wordpress - 如何使用 Timber 和 WooCommerce 为单个产品获取正确的上下文?
问题描述
在构建我最新的 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相同,但它对我来说无法正常工作。
提前致谢!
解决方案
将 WooCommerce 与 Timber 集成可能有点复杂,但一旦您知道一些技巧,它就可以正常工作。
主要问题出现在您想要覆盖 WooCommerce 时,因为您必须以经典的 Wordpress 方式在主题中的“/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);
}
推荐阅读
- javascript - 将 Javascript 警报转换为工具提示
- javascript - 悬停时的导航滑动线 - 当没有项目是“当前”或“选定”时
- dart - 如何从异步方法返回?
- apache-flink - 用于滚动聚合的 GlobalWindow 的替代品
- javascript - 承诺异步功能
- rcpp - 使用消毒剂运行时 Rcpp 函数的段错误(来自 rhub)
- sql - Xargs、sqlplus 和报价的噩梦?
- mysql - mysql中的',\n'是什么意思
- php - Wordpress - 获取以下用户的用户列表
- wordpress - Wordpress Jetpack 插件 simple_payments 问题