如果项目数大于4,则WordPress显示简码

时间:2018-11-08 11:52:31

标签: php wordpress woocommerce cart shortcode

我正在使用一个由别人开发的插件,该插件输出一个简码[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 :(得分:2)

您可以使用所需的条件逻辑将简码嵌入自定义简码中:

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文件中。测试和工作。
(请参阅最后如何测试)。

  

用法:

     

1)购物车中有4个以上的商品(在短代码中默认设置 4个商品

[my_wheel id="1111"]
     

2)例如,购物车中有6个以上商品:

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

如何对此进行测试。

由于我无法测试来自特定第三方插件的此短代码,因此我创建了一个[my_wheel]短代码,该短代码将输出在短代码参数id中提供的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文件中。

然后,我在页面的Wordpress文本编辑器中添加了[my_wheel id="1111"]短代码,并且当购物车中的商品计数为5或更多时,我得到以下显示:

enter image description here

因此有效。

答案 1 :(得分:2)

@LoicTheAztec是一个很好的解决方案,但是如果您需要其他解决方案,则可以使用以下方法:

WordPress具有内置功能,可让您删除短信的默认回调函数,并将其替换为自定义的短信。

在这种情况下,我们将检查购物车内容计数是否大于4,然后删除默认回调并将其替换为我们的回调。

例如,我将考虑您拥有的页面ID是49,在使用此代码来匹配包含短代码的页面时应更改此页面ID。

//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%工作

答案 2 :(得分:1)

您可以使用以下代码添加条件短代码:

do_shortcode()

注意:在上述问题中,您重新声明了不正确的预定义函数,{{1}}是用于回显模板文件中的短代码的预定义函数。

有关更多帮助,请参见以下链接:Click Here