如何定制WooCommerce相关产品?

时间:2013-11-16 作者:user1752759

我的网站中有以下代码行,将显示related products 在我的WooCommerce单一产品页面的底部。。。

functions.php:

// display upsells and related products within dedicated div with different column and number of products
remove_action( \'woocommerce_after_single_product_summary\', \'woocommerce_output_related_products\',20);
remove_action( \'woocommerce_after_single_product\', \'woocommerce_output_related_products\',10);
add_action( \'woocommerce_after_single_product_summary\', \'woocommerce_output_related_products\', 20);

function woocommerce_output_related_products() {
    $output = null;

    ob_start();
    woocommerce_related_products(4,4); 
    $content = ob_get_clean();
    if($content) { $output .= $content; }

    echo \'<div class="clear"></div>\' . $output;
}
由于它显示了4种以相同名称分类的产品,我将如何修改上述内容,以显示related tags 相反

例如,我有一个名为“Automotive”的产品类别,在这个类别中有几个标签——“Holden”、“Ford”、“Toyota”、“Nissan”等。

我想在底部显示4种产品,与用户当前查看的产品标签相关。

2 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

Firstly, 用问题中显示的代码无法立即实现所描述的目标。要理解为什么没有直接的方法来处理这些代码,您必须看看您使用的是什么-woocommerce_related_products() - 去做你迄今为止所做的事。

Secondly, 你必须理解,否则你就无法提出一个切中要害的问题,而这绝对是你的目标,以确保你得到了答案。除此之外,你必须记住Wordpress Development 是否在wordpress核心相关问题上设置了其主要范围-如果您感兴趣,这正在讨论中Wordpress Development Meta, 一个具体的主题是Our wooes and future of platform plugins at WPSE. 因此,如果你要问一些关于插件的问题,比如woocommerce,你应该把它分解成尽可能与核心功能相关的部分——看下一点——因为你不能指望人们知道你使用的每个插件的每一个细节。

Thirdly, 现在,让我们深入了解正在发生的事情。正如你所说,你正在使用woocommerce_related_products() 现在如果查看源代码,您会看到此函数使用woocommerce_get_template() 获取related.php 样板woocommerce_get_template() 再次使用woocommerce_locate_template() 为了定位模板,后者通过使用wordpress的核心功能来定位模板locate_template().<现在有了一个与core的连接,从而认识到上述woocommerce功能实际上是扩展核心功能的包装通过分析功能依赖关系,另一件事情变得很清楚,正如我之前所说的,您需要一种不同的方法来实现您的目标,因为woocommerce_related_products() - 现在不可否认的是显而易见的——这不是正确的<如果你跟随我的解释,并且已经通读到目前为止,你就会意识到related.php 包含您正在查找的内容。我特别要说的是get_related() 函数,其中包括woocommerce_product_related_posts 钩住并利用核心功能wp_get_post_terms()get_posts() - get_related() 用于获取一组ID。此外,还有woocommerce_related_products_args 钩子,可用于更改内部相关产品查询的参数related.php, WP_Query 用于此。查询使用get_related() 呼叫<我想你现在手头有一切可以解决你的问题了。实际上,更重要的是,这提供了一个关于如何定制相关产品的几乎完整的概述。我并没有提到所检查的源代码的所有功能-功能和/或挂钩,但肯定提到了所有重要的功能。现在应该更清楚的是,woocommerce的相关产品功能如何追溯到wordpress的核心功能。

Fourthly, 我来了,你应该在哪里应用你的定制和你应该要求的东西。例如:

Woocommerce拥有woocommerce_product_related_posts 钩子以自定义get_posts() 致电确定相关产品

代码:

        // Get the posts
        $related_posts = get_posts( apply_filters(\'woocommerce_product_related_posts\', array(
                \'orderby\' => \'rand\',
                \'posts_per_page\' => $limit,
                \'post_type\' => \'product\',
                \'fields\' => \'ids\',
                \'meta_query\' => $meta_query,
                \'tax_query\' => array(
                        \'relation\' => \'OR\',
                        array(
                                \'taxonomy\' => \'product_cat\',
                                \'field\' => \'id\',
                                \'terms\' => $cats_array
                        ),
                        array(
                                \'taxonomy\' => \'product_tag\',
                                \'field\' => \'id\',
                                \'terms\' => $tags_array
                        )
                )
        ) ) );
我如何定制它来实现我的目标?显示属于同一产品类别的相关产品-product_cat - 并且具有相同的标签-product_tag - 如单品所示

在没有给出结论的情况下(至少如果您希望得到完整的现成代码的话),您可能应该做的第一件事是更改tax_query 参数relation 从…起ORAND.





Notes:

这是一个较长的描述性回答,我考虑到了上述正在进行的讨论,希望您不要介意,这不仅是对您问题的回答,而且是为了实现一般教育目的,这是未经测试的,因为没有实际现成的代码,可以预见,随着woocoomerce 2.1的发布,将实施一些重要的代码更改,但目前从2.0.19开始,上述代码是有效的

<小时>

Edit:

你真的不应该直接编辑(插件)核心类。这是有问题的,因为您必须在更新时再次维护更改,因为如果执行更新,核心文件会被更新和覆盖。特别是如果像在这种情况下很容易避免的话,下面的代码会以任何方式实现您想要做的事情,也就是说,通过functions.php.

代码:

    add_filter( \'woocommerce_product_related_posts\', 
                \'wpse_123436_change_wc_related_products_relation_to_and\' );
    function wpse_123436_change_wc_related_products_relation_to_and() {
            $get_related_products_args = array(
                \'orderby\' => \'rand\',
                \'posts_per_page\' => $limit,
                \'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
                    )
                )
            );
            return $get_related_products_args;
    }

对于WooCommerce 2.1.0版及以上版本,上述挂钩将不起作用,因为它不再存在,因此答案在2.0.20版之前可用。但是@NathanPowell在StackOverflow上找到了一个关于from v2的好答案。1.0上可用,用于customization of the related products usable set of hooks.

SO网友:Nathan Powell

伙计们,我们不要在这里自欺欺人。被接受的答案只会让用户达到他的目标。

第一个问题是:

<?php
// display upsells and related products within dedicated div with different column and number of    products
remove_action( \'woocommerce_after_single_product_summary\', \'woocommerce_output_related_products\',20);
remove_action( \'woocommerce_after_single_product\', \'woocommerce_output_related_products\',10);
add_action( \'woocommerce_after_single_product_summary\', \'woocommerce_output_related_products\', 20);
将移除动作,然后将其放置在移除动作的确切位置。目标完全不清楚。

我在搜索相关产品时发现了这一点,因为我不知道标签和类别是驱动woocommerce_output_related_products 此插件中的函数。

这个问题的最佳答案是以下链接,它与woocommerce_output_related_products_args() 过滤器:https://stackoverflow.com/questions/23554993/output-posts-relating-to-the-tags

结束

相关推荐

Missing HTML comment tags

我有这个WP安装,我目前正在修改。最疯狂的是HTML注释没有显示在源代码的任何地方。也就是说,如果您右键单击页面并“查看源代码”。但是,如果要使用这样的工具打开页面->http://www.iwebtool.com/code_viewer?domain=w3lol.com 你可以清楚地看到评论就在那里。网站url为http://w3lol.com可悲的是,关于这件事的任何地方都没有任何信息,而且我也不知道如何确定这是否是由代码本身、Apache、WordPress或其他原因造成的。。。(顺便说一句,