如何使用Timber和Woocommerce为单个产品获得正确的上下文?

时间:2019-05-07 07:53:59

标签: wordpress timber

在构建我的最新Woocommerce项目时,我一直在使用Timber。一切都很好,但是我有一个我无法弄清楚的问题:单个产品页面上的上下文不正确。在单一产品页面上,我有相关的产品,循环中最后一个产品的上下文用作当前单一产品的上下文。

关于使用Timber和Woocommerce的文档有限。尽管我已经尝试了所有方法,但似乎并不能解决问题。

function timber_set_product($post)
{
    global $product;

    if (is_woocommerce() || is_search() || is_front_page()) {
        $product = wc_get_product($post->ID);
    }
}

我在做什么错?我的设置与https://github.com/timber/timber/blob/master/docs/guides/woocommerce.md相同,但对我来说无法正常工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

将WooCommerce与Timber集成可能会有些复杂,但是一旦您掌握了一些技巧,它就可以正常工作。

主要问题是当您要覆盖WooCommerce时,然后您必须以经典的Wordpress方式覆盖WooCommerce,该主题位于主题的“ / woocommerce”文件夹中,您可以从其中复制要覆盖而不是不覆盖的插件中的文件以Timber方式分离PHP和TWIG文件中的关注点。不过这里不需要。

我们获取产品上下文和相关产品的一种方法是在woocommerce.php中设置产品:

$context = Timber::get_context();

if (is_singular('product')) {

    $context['page']    = Timber::get_post();
    $product            = get_product( $context['page']->id );
    $context['product'] = $product;

    $args = array(
        'post_type'            => 'product',
        'posts_per_page'       => -1,
        'orderby'              => 'DESC',
        'post__in'             => $product->get_related(),
        'post__not_in'         => array( $product->id )
    ) ;
    $context['related'] = Timber::get_posts( $args );

    Timber::render('woo/single-product.twig', $context);

}