Получение атрибутов продукта WooCommerce в Twig / Timber и вызов методов PHP - PullRequest
0 голосов
/ 27 января 2019

Я создаю сайт WooCommerce, используя систему шаблонов Twig вместе с плагином Timber WordPress и следуя вместе с этим руководством для шаблона tease.

Однако, взглянув на собственный стандарт WooCommerce templates/content-product.php, они имеют это на самом верху:

// Ensure visibility.
if ( empty( $product ) || ! $product->is_visible() ) {
    return;
}

Так что я думаю, что мы должны делать ту же проверку в файле шаблона? Однако я не уверен, как проверить это значение в Twig.

Я пытался dump(post.is_visible()), но каждый возвращает (bool) false.

Кроме того, я понятия не имею, откуда взялся showthumb, и не смог найти много информации или документов об этом конкретном параметре / атрибуте.

Редактировать: Вот мой контроллер: (my-theme / woocommerce / archive-product.php)

$context            = Timber::get_context();
$context['shop-sidebar'] = Timber::get_widgets( 'shop-sidebar' );

$posts = Timber::get_posts();
$context['products'] = $posts;

if ( is_product_category() ) {
    $queried_object = get_queried_object();
    $term_id = $queried_object->term_id;
    $context['category'] = get_term( $term_id, 'product_cat' );
    $context['title'] = single_term_title( '', false );
}

Timber::render( 'views/woo/archive.twig', $context );

Вот мой archive.twig file:

{% extends 'archive.twig' %} {# Base Archive File #}

{% block before_article %}
    {% do action('woocommerce_before_main_content') %}
{% endblock %}

{% block below_h1 %}
    {% do action('woocommerce_archive_description') %}
{% endblock %}

{% block primary_block %}

    {% if products|length > 0 %}

        <div class="before-products">
            {% do action('woocommerce_before_shop_loop') %}
        </div>

        <div class="products-wrap">
            <div class="products row flex">
                {% for post in products %}
                    <div class="product col-sm-6 col-md-4">
                        {% do action('woocommerce_shop_loop') %}
                        {% include ["woo/partials/tease-product.twig"] %}
                    </div>
                {% endfor %}
            </div>
        </div>

        <div class="after-products">
            {% do action('woocommerce_after_shop_loop') %}
        </div>

    {% else %}

        <div class="no-products">
            {% do action('woocommerce_no_products_found') %}
        </div>

    {% endif %}

{% endblock  %}

{% block after_article %}
    {% do action('woocommerce_after_main_content') %}
    {{ parent() }}
{% endblock %}

Вот мой файл tease-product.twig :

<article {{ fn('post_class', ['entry'] ) }}>

    {{ fn('timber_set_product', post) }}

    <div class="media">

        <div class="media-figure {% if not post.thumbnail %}placeholder{% endif %}">
            <a href="{{ post.link }}">
                {% if post.thumbnail %}
                    <img src="{{ post.thumbnail.src|resize(600)|e('esc_url') }}" class="img-responsive" />
                {% else %}
                    <span class="thumb-placeholder"><i class="icon-camera"></i></span>
                {% endif %}
            </a>
        </div>

        <div class="media-content">

            {% do action('woocommerce_before_shop_loop_item') %}
            {% do action('woocommerce_before_shop_loop_item_title') %}

            {% if post.title %}
                <h3 class="entry-title"><a href="{{ post.link }}">{{ post.title }}</a></h3>
            {% else %}
                <h3 class="entry-title"><a href="{{ post.link }}">{{ fn('the_title') }}</a></h3>
            {% endif %}

            {% do action( 'woocommerce_after_shop_loop_item_title' ) %}
            {% do action( 'woocommerce_after_shop_loop_item' ) %}

        </div>

    </div>

</article>

Как получить правильное значение метода is_visible?

1 Ответ

0 голосов
/ 18 июля 2019

Я считаю, что OP уже решил проблему.Но, для дальнейшего использования ...

Вы должны быть в состоянии сделать {{ post.is_visible }} для вывода значения.

Точно так же оба приведенных ниже оператора if работают для меня.

{% if (product.is_visible) %} {% if (product.is_visible()) %}

Теперь я довольно новичок в WooCommerce и Timber, и я неЯ не знаю много о is_visible, поэтому я прошу прощения, если я здесь не прав.Но я знаю, что могу использовать функции-члены WC_Product в шаблонах веточек, таких как {{variable. function_name }}, т.е.{{ product.get_title }} или {{ product.get_price }}, поэтому я ожидаю, что is_visible ничем не отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...