Search code examples
phpwordpresswoocommercecartshortcode

Wordpress display shortcode if item count is greater than 4


I am using a plugin (developed by someone else) which is outputting a shortcode [wof_wheel id="1111"]. I am using this shortcode on a page.

I am trying to apply conditional logic to the shortcode to only display/run the shortcode IF the number of items in the cart is greater than 4.

I know how to get and then check the cart item count with WC()->cart->get_cart_contents_count() but not sure if its possible to implement the shortcode display/run logic.

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
}
}

Is this type of conditional logic possible with shortcodes?


Solution

  • What @LoicTheAztec is one good solution but if you want another solution you can use the following:

    WordPress have built in function which allow you to remove the default callback function for your shortcode and replaced it with your custom one.

    In this case we are going to check if the cart content count is more than 4 then remove the default callback and replace it with ours .

    i will consider for example that the page id which you have is 49 here which you should change when using this code to match the page which contain the shortcode.

    //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');
    

    now we need to add our custom callback to display whatever message you want:

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

    the code above is tested and working 100%