Files
torebki-fabiola.pl/wp-content/plugins/ajax-search-for-woocommerce/includes/Shortcode.php
2026-03-05 13:07:40 +01:00

150 lines
4.8 KiB
PHP

<?php
namespace DgoraWcas;
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) {
exit;
}
class Shortcode
{
public static function register()
{
add_shortcode( 'wcas-search-form', array( __CLASS__, 'addBody' ) );
add_shortcode( 'fibosearch', array( __CLASS__, 'addBody' ) );
}
/**
* Register Woo Ajax Search shortcode
*
* @param array $atts bool show_details_box
*/
public static function addBody( $atts, $content, $tag )
{
$layout = Helpers::getLayoutSettings();
$searchArgs = shortcode_atts( array(
'class' => '',
'style' => $layout->style,
'icon' => $layout->icon,
'layout' => $layout->layout,
'layout_breakpoint' => '',
'mobile_overlay' => $layout->mobile_overlay,
'mobile_overlay_breakpoint' => '',
'darken_bg' => $layout->darken_background,
'submit_btn' => null,
'submit_text' => null,
'icon_color' => '',
), $atts, $tag );
$searchArgs['class'] .= ( empty($searchArgs['class']) ? 'woocommerce' : ' woocommerce' );
$args = apply_filters( 'dgwt/wcas/shortcode/args', $searchArgs );
return self::getForm( $args );
}
/**
* Display search form
*
* @param array args
*
* @return string
*/
public static function getForm( $args )
{
// Enqueue required scripts (only if AMP is not active)
if ( !Helpers::isAMPEndpoint() ) {
wp_enqueue_script( 'jquery-dgwt-wcas' );
if ( DGWT_WCAS()->settings->getOption( 'show_details_box' ) === 'on' ) {
wp_enqueue_script( 'woocommerce-general' );
}
}
$args = self::mapAlternativeFormArgs( $args );
$args = self::applyCondtitionalFormArgs( $args );
$filename = apply_filters( 'dgwt/wcas/form/partial_path', DGWT_WCAS_DIR . 'partials/search-form.php' );
$html = self::getTemplatePart( $filename, $args );
return apply_filters( 'dgwt/wcas/form/html', $html, $args );
}
/**
* Map alternative form of shortcode params values
*
* @param array $args
*
* @return array
*/
public static function mapAlternativeFormArgs( $args )
{
// Show submit button
if ( isset( $args['submit_btn'] ) ) {
if ( in_array( $args['submit_btn'], array( '1', 'yes', 'show' ) ) ) {
$args['submit_btn'] = 'on';
}
if ( in_array( $args['submit_btn'], array( '0', 'no', 'hide' ) ) ) {
$args['submit_btn'] = 'off';
}
}
// Style: solaris, pirx
if ( !empty($args['style']) ) {
if ( in_array( $args['style'], array( 'default', 'classic' ) ) ) {
$args['style'] = 'solaris';
}
if ( in_array( $args['style'], array( 'bean', 'rounded' ) ) ) {
$args['style'] = 'pirx';
}
}
// Layout: classic, icon, icon-flexible, icon-flexible-inv
if ( !empty($args['layout']) ) {
if ( in_array( $args['layout'], array( 'search-bar', 'default' ) ) ) {
$args['layout'] = 'classic';
}
if ( in_array( $args['layout'], array( 'flex-icon-on-mobile', 'flex-icon-mob' ) ) ) {
$args['layout'] = 'icon-flexible';
}
if ( in_array( $args['layout'], array( 'flex-icon-on-desktop', 'flex-icon-desktop' ) ) ) {
$args['layout'] = 'icon-flexible-inv';
}
}
return $args;
}
/**
* Apply some conditions before pass shortcode args forward
*
* @param array $args
*
* @return array
*/
public static function applyCondtitionalFormArgs( $args )
{
// Force requires options for Pirx style
if ( !empty($args['style']) && $args['style'] === 'pirx' ) {
$args['submit_btn'] = 'on';
$args['submit_text'] = '';
}
return $args;
}
public static function getTemplatePart( $filename, $args )
{
ob_start();
if ( file_exists( $filename ) ) {
include $filename;
/** @see wp_opcache_invalidate() */
if ( function_exists( 'opcache_invalidate' ) && (!ini_get( 'opcache.restrict_api' ) || stripos( realpath( $_SERVER['SCRIPT_FILENAME'] ), ini_get( 'opcache.restrict_api' ) ) === 0) ) {
@opcache_invalidate( $filename, true );
}
}
return (string) ob_get_clean();
}
}