我正在开发一个网上商店,我想要一个功能来显示包含特定品牌产品的产品类别。
我在网上商店出售衣服,然后,例如,如果您在标题菜单中选择“李维斯”品牌,那么在商店页面的侧栏中,您应该会看到包含“李维斯”品牌产品的所有产品类别。希望有道理。
我一直在寻找解决方案,但尚未成功。在网络上的某个地方,它说没有解决方案,所以我必须从头开始开发它。
如果有必要从头开始开发它,您如何最轻松地进行开发?我本人已经为Wordpress开发了一些主题,所以我知道Wordpress的工作原理。只是看不出如何解决这个问题。
有什么主意吗?
答案 0 :(得分:2)
这只能通过使用WordPress WPDB
类的自定义SQL查询来完成。
现在,由于有多个产品品牌插件可用于WooCommerce,根据所使用的插件,您必须调整正确的分类法:
product_brand
for WooCommerce Brands插件(默认情况下,此处在下面的函数中) yith_product_brand
for YITH WooCommerce Brands插件pa_brand
用于自定义产品属性(自制) 在下面,您将找到一个自定义函数,该函数根据产品品牌术语 slug :
返回一系列WooCommerce产品类别对象。// The defined taxonomy here in the function $taxonomy argument is for WooCommerce Product brand plugin
function get_product_categories_from_a_product_brand( $brand_term_slug, $taxonomy = 'product_brand' ) {
global $wpdb;
return $wpdb->get_results( "
SELECT t1.*
FROM {$wpdb->prefix}terms t1
INNER JOIN {$wpdb->prefix}term_taxonomy tt1
ON t1.term_id = tt1.term_id
INNER JOIN {$wpdb->prefix}term_relationships tr1
ON tt1.term_taxonomy_id = tr1.term_taxonomy_id
INNER JOIN {$wpdb->prefix}term_relationships tr2
ON tr1.object_id = tr2.object_id
INNER JOIN {$wpdb->prefix}term_taxonomy tt2
ON tr2.term_taxonomy_id = tt2.term_taxonomy_id
INNER JOIN {$wpdb->prefix}terms t2
ON tt2.term_id = t2.term_id
WHERE tt1.taxonomy = 'product_cat'
AND tt2.taxonomy = '$taxonomy'
AND t2.slug = '$brand_term_slug'
" );
}
代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。
任何php文件中的示例代码-显示产品品牌子弹的所有相关链接的产品类别名称:
$brand_term_slug = 'levis'; // A term slug is required (not the term id or term name)
$results = get_product_categories_from_a_product_brand( $brand_term_slug );
if( ! empty($results) ) {
$term_names = []; // Initializing an empty array variable
// Loop through each product category terms:
foreach ( $results as $result ) {
$term_id = $result->term_id; // Term id
$term_name = $result->slug; // Term slug
$term_slug = $result->name; // Term name
$taxonomy = 'product_cat';
$term_link = get_term_link( get_term( $result->term_id, $taxonomy ), $taxonomy );
// Example: Set the linked formatted term name in an array
$term_names[] = '<a class="'.$result->slug.'" href="'.$term_link.'">'.$result->name.'</a>';
}
// Display the linked formatted terms names
echo '<div class="brand-categories '.$brand_term_slug.'">'.implode(' ', $term_names).'</div>';
}