理想情况下,我想显示与我的单个产品页面底部当前正在查看的项目标签相关的四种产品,具体来说,每个相关帖子的特色图片或缩略图以及价格.如果可能,还可以从functions.PHP文件编写一个解决方案.
下面的代码是我到目前为止,它显示的是相关的帖子类别,而不是它所基于的标签:
add_action( 'woocommerce_after_single_product_summary','woocommerce_output_related_products',20); function woocommerce_output_related_products() { $output = null; ob_start(); woocommerce_related_products(array( 'columns' => 4,'posts_per_page' => 4,'post_type' => 'product','fields' => 'ids','Meta_query' => $Meta_query,'tax_query' => array( 'relation' => 'AND',array( 'taxonomy' => 'product_cat','field' => 'id','terms' => $cats_array ),array( 'taxonomy' => 'product_tag','terms' => $tags_array ) ) )); $content = ob_get_clean(); if($content) { $output .= $content; } echo '<div class="clear"></div>' . $output; }
任何帮助将不胜感激,
谢谢.
一种可能的解决方案是覆盖related.PHP模板,创建新模板并在那里执行自定义WP_Query,然后使用wc_get_template()函数包含该模板.
另一种是利用内置过滤器(其中很多都存在).我将尝试按照执行顺序解释这里的过滤器,它们的目的是什么,以及如何使用它们.
woocommerce_output_related_products_args
第一个用于设置woocommerce_related_products()函数参数的过滤器.函数load related.PHP模板和传递的参数是模板的全局选项.参数是“posts_per_page”,“columns”和“orderby”.
/* An example of how to set the four products per page */ add_filter( 'woocommerce_output_related_products_args',function( $args ) { $args = wp_parse_args( array( 'posts_per_page' => 4 ),$args ); return $args; });
在模板的开头,WooCommerce $product对象按类别和标记搜索相关产品.结果是一个post id数组,后来用于主查询中的post__in子句.有几个过滤器可用.
woocommerce_product_related_posts_relate_by_category
它用于按类别排除相关产品.
add_filter( 'woocommerce_product_related_posts_relate_by_category',function() { return false; });
woocommerce_product_related_posts_relate_by_tag
按标签排除相关产品.
add_filter( 'woocommerce_product_related_posts_relate_by_tag',function() { return false; });
woocommerce_product_related_posts_query
add_filter( 'woocommerce_product_related_posts_query',function( $query ) { // modify $query array return $query; });
提供修改主查询参数的可能性的最后一个过滤器是woocommerce_related_products_args.
woocommerce_related_products_args
从现在起查询基于post__in子句,删除该部分并添加自定义查询部分.
add_filter( 'woocommerce_related_products_args',function( $args ) { unset( $args['post__in'] ); $args['tax_query'] = array( /* taxonomy parameters */ ); return $args; });
add_filter( 'woocommerce_output_related_products_args',$args ); return $args; }); add_filter( 'woocommerce_product_related_posts_relate_by_category',function() { return false; });
一些可能有用的提示:
在每个过滤器挂钩中,如果您不确定传入的默认参数是什么,只需在它们上使用print_r来查看浏览器中的值.另外,查看WooCommerce源文件将澄清一些事情.最后,很多时候没有必要完全覆盖默认的WooCommerce功能,因为插件的创建者真的努力使用所有这些过滤器来简化操作.