Php 在Woocommerce 3.3中对产品短代码使用自定义分类法

Php 在Woocommerce 3.3中对产品短代码使用自定义分类法,php,wordpress,woocommerce,shortcode,custom-taxonomy,Php,Wordpress,Woocommerce,Shortcode,Custom Taxonomy,我目前正在为Woocommerce网站开发主页,在这个页面上,目标是有3行显示来自不同品牌的产品。例子;第一行显示苹果产品,第二行显示三星产品,第三行显示HTC产品 我已经使用插件CPT UI创建了自定义分类法“品牌”。现在我想用上面的例子来显示特定品牌下列出的产品 查看Woocommerce短代码,我看到了以下内容: [products limit="8" columns="4" category="hoodies, tshirts" cat_operator="AND"] 对于这种情况下的

我目前正在为Woocommerce网站开发主页,在这个页面上,目标是有3行显示来自不同品牌的产品。例子;第一行显示苹果产品,第二行显示三星产品,第三行显示HTC产品

我已经使用插件CPT UI创建了自定义分类法“品牌”。现在我想用上面的例子来显示特定品牌下列出的产品

查看Woocommerce短代码,我看到了以下内容:

[products limit="8" columns="4" category="hoodies, tshirts" cat_operator="AND"]
对于这种情况下的品牌,有没有像这样的定制分类法?即:

[products limit="8" columns="4" brand="apple" cat_operator="AND"]

非常感谢您在正确方向上的任何帮助或推动

可以通过某种技巧将Woocommerce
[产品]
快捷码扩展到处理任何自定义分类法,如
“品牌”

守则:

add_filter( 'woocommerce_shortcode_products_query', 'extend_products_shortcode_to_brand', 10, 3 );
function extend_products_shortcode_to_brand( $query_args, $atts, $loop_name ){
    if ( ! empty($atts['class']) && strpos($atts['class'], 'brand') !== false ) {
        global $wpdb;

        $terms = array_map( 'sanitize_title', explode( ',', $atts['class'] ) );
        array_shift( $terms );
        $terms = implode(',', $terms);
        $terms = str_replace(",", "','", $terms);

        $ids = $wpdb->get_col( "
            SELECT DISTINCT tr.object_id
            FROM {$wpdb->prefix}term_relationships as tr
            INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
            INNER JOIN {$wpdb->prefix}terms as t ON tt.term_id = t.term_id
            WHERE tt.taxonomy LIKE 'brand' AND t.slug IN ('$terms')
        " );

        if ( ! empty( $ids ) ) {
            if ( 1 === count( $ids ) ) {
                $query_args['p'] = $ids[0];
            } else {
                $query_args['post__in'] = $ids;
            }
        }
    }
    return $query_args;
}
代码进入活动子主题(或活动主题)的function.php文件。测试和工作


用法

我们将在此处使用
class
shortcode参数:

1)一个品牌-展示“苹果”品牌的产品:

2)多个品牌-展示“苹果”和“三星”品牌的产品:

因此,
“brand”
类是强制性的,必须是第一类。每个术语是分开的

[products limit="8" columns="4" class="brand,Apple"]
[products limit="8" columns="4" class="brand,Apple,Samsung"]