与标签相关的输出帖子

use*_*759 6 php tags wordpress plugins woocommerce

我使用的WordPress 3.9WooCommerce 2.1.8,并想知道我怎么可以显示用户当前正在查看四个相关帖子单行,这是相对于标签标签的帖子,而不是分类它在...

理想情况下,我想显示与我的单个产品页面底部当前正在查看的项目标签相关的四种产品,具体来说,每个相关帖子的特色图片或缩略图以及价格.如果可能,还可以从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',
                    'field' => 'id',
                    'terms' => $tags_array
                )
            )
        )); 

        $content = ob_get_clean();
        if($content) { $output .= $content; }

        echo '<div class="clear"></div>' . $output;

    } 
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,
谢谢.

Dan*_*jel 20

还有一个过滤器,woocommerce_related_products_args/templates/single-product/related.php模板文件,重写您的查询数组.

一种可能的解决方案是覆盖related.php模板,创建新模板并在WP_Query那里执行自定义,然后将该模板包含在wc_get_template()函数中.

另一种是利用内置过滤器(其中很多都存在).我将尝试按照执行顺序解释这里的过滤器,它们的目的是什么,以及如何使用它们.


woocommerce_output_related_products_args

第一个用于设置woocommerce_related_products()函数参数的过滤器.函数加载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;
});
Run Code Online (Sandbox Code Playgroud)


在模板的开头,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;
});
Run Code Online (Sandbox Code Playgroud)

woocommerce_product_related_posts_relate_by_tag

按标签排除相关产品.

add_filter( 'woocommerce_product_related_posts_relate_by_tag', function() {
    return false;
});
Run Code Online (Sandbox Code Playgroud)

woocommerce_product_related_posts_query

要对查询部分进行最终修改.

add_filter( 'woocommerce_product_related_posts_query', function( $query ) {
    // modify $query array
    return $query;
});
Run Code Online (Sandbox Code Playgroud)


提供修改主查询参数的可能性的最后一个过滤器是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;
});
Run Code Online (Sandbox Code Playgroud)

如何显示与标签相关的四个相关产品的示例.

add_filter( 'woocommerce_output_related_products_args', function( $args ) 
{ 
    $args = wp_parse_args( array( 'posts_per_page' => 4 ), $args );
    return $args;
});

add_filter( 'woocommerce_product_related_posts_relate_by_category', function() {
    return false;
});
Run Code Online (Sandbox Code Playgroud)

一些可能有用的提示:

在每个过滤器挂钩中,如果您不确定传入的默认参数是什么,请简单使用print_r它们来查看浏览器中的值.另外,查看WooCommerce源文件将澄清一些事情.最后,很多时候没有必要完全覆盖默认的WooCommerce功能,因为插件的创建者真的努力使用所有这些过滤器来简化操作.