gpt4 book ai didi

php - 在 Woocommerce 3.3 中为产品短代码使用自定义分类

转载 作者:行者123 更新时间:2023-12-04 02:59:22 25 4
gpt4 key购买 nike

我目前正在为 Woocommerce 网站开发主页,目标是在此页面上显示 3 行显示来自不同品牌的产品。例子;第 1 行将显示 Apple 产品,第 2 行将显示三星产品,第 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 [products] 短代码扩展为处理任何自定义分类,例如 "brand"

代码:

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 短代码参数:

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

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

2) 多个品牌 - 展示“Apple”和“Samsung”品牌的产品:

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

So the class "brand" is mandatory and needs to be the first one. Each term is coma separated.

关于php - 在 Woocommerce 3.3 中为产品短代码使用自定义分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50636718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com