Wordpress отображает шорткод, если количество элементов превышает 4 - PullRequest
0 голосов
/ 08 ноября 2018

Я использую плагин (разработанный кем-то другим), который выводит шорткод [wof_wheel id="1111"].Я использую этот шорткод на странице.

Я пытаюсь применить условную логику к шорткоду, чтобы отображать / запускать только шорткод, ЕСЛИ количество товаров в корзине больше 4.

Я знаю, как получить и затем проверить количество элементов корзины с помощью WC()->cart->get_cart_contents_count(), но не уверен, возможно ли реализовать логику отображения / запуска шорткода.

function do_shortcode() {     

$items_count = WC()->cart->get_cart_contents_count();

        if ($items_count > 4) {
DISPLAY/RUN SHORTCODE
} else if ($items_count < 4) 
    {
DO NOT DISPLAY/RUN SHORTCODE
}
}

Возможен ли этот тип условной логики с шорткодами

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Вы можете встроить шорткод в пользовательский шорткод с необходимой условной логикой:

add_shortcode( 'my_wheel', 'custom_conditional_wof_wheel' );
function custom_conditional_wof_wheel( $atts ){
    $atts = shortcode_atts( array(
        'id' => '',
        'count' => '4', // 4 cart items by default
    ), $atts, 'my_wheel' );

    // If there is more than 4 items count in cart the shortcode [wof_wheel] is executed
    if( WC()->cart->get_cart_contents_count() > $atts['count'] ){
        $id = $atts['id'];
        return do_shortcode( "[wof_wheel id='$id']" );
    }
    // Else it display nothing
    return ''; 
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). проверено и работает.
(см. В конце, как я это проверял).

ПРИМЕНЕНИЕ:

1) Для более чем 4 товаров в корзине ( 4 товара по умолчанию устанавливается в шорткоде) :

[my_wheel id="1111"]

2) Для более чем 6 товаров в корзине, например:

[my_wheel id="1111" count='6']

Как это было проверено.

Поскольку я не могу протестировать этот шорткод, полученный от определенного стороннего плагина, я создал [my_wheel] шорткод, который будет выводить идентификатор, указанный в аргументе шорткода id:

add_shortcode( 'my_wheel', 'custom_conditional_wof_wheel' );
function custom_conditional_wof_wheel( $atts ){
    $atts = shortcode_atts( array(
        'id' => '',
        'count' => 4,
    ), $atts, 'my_wheel' );

    if( WC()->cart->get_cart_contents_count() > $atts['count'] ){
        $id = $atts['id'];
        return do_shortcode( "[wof_wheel id='$id']" );
    }
    return '';
}

Код помещается в файл function.php вашей активной дочерней темы (активной темы).

Затем я добавил [my_wheel id="1111"] шорткод в текстовом редакторе Wordpress страницы, и я получаю это отображение, когда количество элементов в корзине 5 или больше:

enter image description here

Так оно и работает.

0 голосов
/ 08 ноября 2018

Что @LoicTheAztec - одно хорошее решение, но если вы хотите другое решение, вы можете использовать следующее:

WordPress имеет встроенную функцию, которая позволяет вам удалить функцию обратного вызова по умолчанию для вашего шорткода и заменить ее на свой собственный.

В этом случае мы собираемся проверить, не превышает ли количество содержимого корзины больше 4, затем удалим обратный вызов по умолчанию и заменим его нашим.

я буду считать, например, что идентификатор страницы, который у вас есть, здесь 49, который вы должны изменить при использовании этого кода, чтобы он соответствовал странице, содержащей шорткод.

//Our Check 
function checkShortCode()
{
    $page = get_post(49);
    if (WC()->cart) {
        $items_count = WC()->cart->get_cart_contents_count();


        if ($items_count == 4) {
            //Remove the Default Hook function for this shortcode
            remove_shortcode('wof_wheel');
            //Add custom callback for that short to display whatever message you want
            add_shortcode('wof_wheel', 'myCustomCallBack');
        }
    }
}
add_action('wp_loaded', 'checkShortCode');

Теперь нам нужно добавить наш пользовательский обратный вызов для отображения любого сообщения, которое вы хотите:

function myCustomCallBack()
{
    echo 'my shortcode is running';
}

приведенный выше код протестирован и работает на 100%

0 голосов
/ 08 ноября 2018

Вы можете добавить условный шорткод, используя следующий код:

    $cartcount = WC()->cart->get_cart_contents_count();

    if ($cartcount > 4) { 
      echo do_shortcode( '[wof_wheel id="1111"]' );
    }else{
     //item count is less than 4
   }

Примечание. В приведенном выше вопросе вы повторно объявляете предопределенную функцию , которая неверна, do_shortcode() - предопределенная функция для отображения короткого кода в файле шаблона.

Для получения дополнительной помощи см. Эту ссылку: Нажмите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...