WooCommerce短代码产品列表

时间:2017-07-24 09:20:53

标签: php wordpress plugins woocommerce shortcode

我必须制作一个Wordpress插件,为WooCommerce添加短代码。我想从特定产品类别中获取产品以及要显示的最大产品数量。短代码参数应该是类别ID和产品限制。我想我应该使用WP_Query对象。

我需要看起来像这样:

enter image description here

Shortcode就像这样:[productslist_category="[category_ID]" limit="[product_limit]"]

我使用了以下代码from this answer (感谢LoicTheAztec

if( !function_exists('products_list_in_a_product_category') ) {

function products_list_in_a_product_category( $atts ) {

    // Shortcode Attributes
    $atts = shortcode_atts(
        array(
            'cat'       => '',
            'limit'     => '4', // default product per page
            'column'    => '4', // default columns
        ),
        $atts, 'productslist'
    );

    // The query
    $posts = get_posts( array(
        'post_type'      => 'product',
        'posts_per_page' => intval($atts['limit'])+1,
        'product_cat'    => $atts['cat'],
    ) );

    $output = '<div class="products-in-'.$atts['cat'].'">';

    // The loop
    foreach($posts as $post_obj)
        $ids_array[] = $post_obj->ID;

    $ids = implode( ',', $ids_array );

    $columns = $atts['column'];

    $output .= do_shortcode ( "[products ids=$ids columns=$columns ]" ) . '</div>';

    return $output;
}
add_shortcode( 'productslist', 'products_list_in_a_product_category' );}

但是我收到了一个错误。它说内爆功能有问题。

2 个答案:

答案 0 :(得分:2)

  

以下是我删除的上一个问题的原始答案,以及您在此使用的地方:Display WooCommerce products with a custom shortcode based on a category

该代码在woocommerce版本2.6.x和3 +中完美运行。

这是我原来的答案代码(在删除上一个问题之前):

以下是基于您的短代码与现有[product] WooCommerce短代码混合的解决方案。正如您将看到的那样,您将得到您所期待的......

以下是代码:

if( !function_exists('products_list_in_a_product_category') ) {

    function products_list_in_a_product_category( $atts ) {

        // Shortcode Attributes
        $atts = shortcode_atts(
            array(
                'cat'       => '',
                'limit'     => '5', // default product per page
                'column'    => '4', // default columns
            ),
            $atts, 'productslist'
        );

        // The query
        $posts = get_posts( array(
            'post_type'      => 'product',
            'posts_per_page' => intval($atts['limit'])+1,
            'product_cat'    => $atts['cat'],
        ) );

        $output = '<div class="products-in-'.$atts['cat'].'">';

        // The loop
        foreach($posts as $post_obj)
            $ids_array[] = $post_obj->ID;

        $ids = implode( ',', $ids_array );

        $columns = $atts['column'];

        $output .= do_shortcode ( "[products ids=$ids columns=$columns ]" ) . '</div>';

        return $output;
    }
    add_shortcode( 'productslist', 'products_list_in_a_product_category' );
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码在WooCommerce 3+上进行测试并正常运行。

USAGE (示例)

[productslist cat="clothing" limit="4"]

你会得到这个:

enter image description here

-

答案 1 :(得分:-1)

$ args = array('post_type'=&gt;'product','post_status'=&gt;'发布','ignore_sticky_posts'=&gt; 1,'posts_per_page'=&gt;'12','meta_query'= &gt; array(array('key'=&gt;'_visibility','value'=&gt; array('catalog','visible'),'compare'=&gt;'IN')),'tax_query'=&gt ; array(array('taxonomy'=&gt;'product_cat','field'=&gt;'term_id',//这是可选的,因为它默认为'term_id''terms'=&gt; 26,'operator'= &gt;'IN'//可能的值为'IN','NOT IN','AND'。))); $ products = new WP_Query($ args); var_dump($ products);