Как получить правильный контекст для одного продукта, используя Timber и Woocommerce? - PullRequest
0 голосов
/ 07 мая 2019

Я использовал Timber, пока строил свой последний проект Woocommerce. Все это прекрасно работает, но у меня есть одна проблема, которую я не могу понять: контекст на странице отдельного продукта неправильный. На странице одного продукта у меня есть связанные продукты, и контекст последнего продукта в цикле используется в качестве контекста для текущего отдельного продукта.

Доступно только ограниченное количество документов по использованию 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 голосов
/ 10 мая 2019

Интеграция 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);

}
...