我正在建立一个基于WooCommerce的电子商务网站,并使用Timber(Twig)进行模板制作。我现在正在尝试建立一个页面(e.g. domain.com/sale)
,其中列出了我所有正在销售的产品。由于我完全自定义了整个WooCommerce模板结构(因为我正在Twig中进行模板制作),因此不能选择短代码。
我的问题:
我设法建立了一个自定义查询,显示我的商品正在销售,但是似乎缺少一些东西,因为底部没有显示分页,我的AJAX过滤器也没有工作..依此类推..可能是因为我没有调用默认查询?即使我采用非AJAX方式:domain.com/sale/page/2
,也会返回与我在首页上所获得的结果相同的结果。实际上什么也没改变...
我做什么:
我在Wordpress中创建了一个名为“销售”的页面。转到我的index.php
并添加以下代码:
<!-- index.php -->
$products = Timber::get_posts(
array(
'post_type' => 'product',
'nopaging' => false,
'posts_per_archive_page' => '24',
'meta_query' => array(
'relation' => 'OR',
array( // Simple products type
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
),
array( // Variable products type
'key' => '_min_variation_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
)
)
);
$context['products'] = $products;
Timber::render( '/pages/landingpages/sale.twig', $context );
按我的选择,这完全可以正常工作。实际上,这被正确的if子句包围,当请求domain.com/sale
时要调用。现在,我进入了sale.twig
文件,并添加了以下代码:
sale.twig
$context = Timber::get_context();
{% block content %}
<div id="product_list" class="product_listing grid">
{{ fn('woocommerce_breadcrumb', breadcrumb_settings) }}
<h1>Sale</h1>
<div id="product_list" class="product_listing grid">
{# Filters #}
<div class="product_filter">
{{ fn('do_shortcode', '[br_filters_group group_id=7861]') }}
</div>
{# Order by #}
<div class="product_sorting">
<label for="orderby">Order by:</label>
{{ fn('woocommerce_catalog_ordering') }}
</div>
{# Products #}
<div class="product_listing-content">
<ul class="product_results products">
{% for product in products %}
{% include ('partials/loop-product.twig') %}
{% endfor %}
</ul>
<div class="products-footer">
{% include 'partials/pagination.twig' %}
</div>
</div>
</div>
</div>
{% endblock content %}
在这一点上,我必须说我正在使用BeRocket AJAX Filters作为我的过滤器。包含的文件loop-product.twig
和pagination.twig
如下所示:
loop-product.twig //为简化起见删除了几行
<li id="{{ 'product-' ~ product._sku }}" class="product-item {{ product._stock_status }}">
{{ product.name }}
</li>
pagination.twig
<ul class="pagination clearfix">
{% if posts.pagination.prev %}
<li class="prev-item">
<a href="{{posts.pagination.prev.link}}" class="prev {{posts.pagination.prev.link|length ? '' : 'invisible'}}">
<span class="sr-only">Prev</span>
</a>
</li>
{% endif %}
{% for page in posts.pagination.pages %}
<li class="page">
{% if page.link %}
<a href="{{page.link}}" class="{{page.class}}">{{page.title}}</a>
{% else %}
<span class="{{page.class}}">{{page.title}}</span>
{% endif %}
</li>
{% endfor %}
{% if posts.pagination.next %}
<li class="next-item">
<a href="{{posts.pagination.next.link}}" class="next {{posts.pagination.next.link|length ? '' : 'invisible'}}">
<span class="sr-only">Next</span>
</a>
</li>
{% endif %}
</ul>
再次避免误解我:我以正确的方式收到了我所有的产品。我的问题是它的行为不像存档页面。分页,过滤器等
也许对于此主题有完全不同的方法,但看来这是唯一的方法。我在网上发现了类似问题的大量代码片段,但都不适合我...
任何帮助表示赞赏!
编辑:
仅出于测试目的,我尝试添加通用的WooCommerce短代码[sale_products]
,并且至少使我的过滤器再次工作。我的分页仍然没有出现...
答案 0 :(得分:0)
我将竭尽全力。如果我不在基地,请原谅我。古腾堡街区对我来说仍然很难把握。
您的sale.twig正在动态提取数据,并使用JS通过php include填充内容,但实际上从未通过WP钩子将内容写入到/ sale页面或帖子正在从中提取数据的数据库。那是故意的吗?
还请注意,应该为您提供来自dom的分页的树枝js与通过link_template.php创建的dom不匹配 看看
我认为您将不得不打电话给这个
<?php previous_post_link( '<strong>%link</strong>' ); ?>