与标签相关的输出帖子

时间:2014-05-09 00:47:59

标签: php wordpress plugins tags woocommerce

我正在使用 WordPress 3.9 WooCommerce 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;

    } 

非常感谢任何帮助,
感谢。

1 个答案:

答案 0 :(得分: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;
});


在模板的开头,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', 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;
});

一些可能有用的提示:

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