wordpress - 木材分页

标签 wordpress twig timber

我正在使用 Timber,目前正在尝试按照 Timber docs 进行分页,虽然到目前为止,没有成功。下面是我的自定义存档 php 文件:

global $paged;
if (!isset($paged) || !$paged){
    $paged = 1;
}
$context = Timber::get_context();
$args = array(
    'post_type' => 'product',
    'posts_per_page' => 2,
    'paged' => $paged,
);
$context['subCatItems'] = new Timber\PostQuery($args);

Timber::render('archive-product.twig', $context);

和我对应的 Twig 文件:

<div class="l-container vert-push--small vert-push--adult--medium">
    {% for post in posts %}
        <div class="c-std">{{ post.title }}</div>
    {% endfor %}
</div>

<div class="tool-pagination c-std">
    {% if posts.pagination.prev %}
        <a href="{{posts.pagination.prev.link}}" class="prev {{posts.pagination.prev.link|length ? '' : 'invisible'}}">Prev</a>
    {% endif %}
    <ul class="pages">
        {% for page in posts.pagination.pages %}
            <li>
                {% if page.link %}
                    <a href="{{page.link}}" class="{{page.class}}">{{page.title}}</a>
                {% else %}
                    <span class="{{page.class}}">{{page.title}}</span>
                {% endif %}
            </li>
        {% endfor %}
    </ul>
    {% if posts.pagination.next %}
        <a href="{{posts.pagination.next.link}}" class="next {{posts.pagination.next.link|length ? '' : 'invisible'}}">Next</a>
    {% endif %}
</div>

目前的主要问题是 posts_per_page 似乎什么都不做,我只是在页面上呈现所有帖子(目前大约 20 个),而应该只有 2 个带有分页(当前未显示。有什么想法吗?

最佳答案

很遗憾,我没有发表评论的特权,所以我必须以这种方式发帖。

您的代码显示您呈现“archive-product.twig”并查询“产品”帖子类型,因此您应该根据链接到的文档尝试使用事件查询的方法。您已经尝试过了吗?

编辑

发布这篇文章后不久,我需要构建一个木材 Twig 分页的实现 - 但一开始就失败了,因为项目计数与 WP 后端定义的每页帖子数不同。我想添加一点点可能对某人有用的信息..

因此,如果您需要在具有分页的自定义 posttype 存档中使用不同数量的帖子,请尝试以下操作:

在您的 Controller 或存档文件中:

global $paged;
if (!isset($paged) || !$paged){
    $paged = 1;
}

$args_cp = array(
    'post_type' => 'HERE_YOUR_CUSTOM_POSTTYPE_NAME',
    'posts_per_page' => 2,
    'paged' => $paged
);
$context['posts'] = new Timber\PostQuery($args_cp);

另外你需要在你的 function.php 中使用这个 每页的帖子与 WP 后端中的不同:

function cpt_archive_posts_per_page( $query ) {

    // for cpt or any post type main archive
    if ( $query->is_main_query() && ! is_admin() && is_post_type_archive( 'HERE_YOUR_CUSTOM_POSTTYPE_NAME' ) ) {
        $query->set( 'posts_per_page', '2' );   // number has to be the same like in your query / 'posts_per_page'
    }
}
add_action( 'pre_get_posts', 'cpt_archive_posts_per_page' );

如果您在第 2 页收到 404,请尝试 Timber Twigs 作者的建议: https://timber.github.io/docs/guides/pagination/

部分:使用 pre_get_posts 分页

function my_home_query( $query ) {
    if ( $query->is_main_query() && !is_admin() ) {
        $query->set( 'post_type', array( 'movie', 'post' ));
    }
}
add_action( 'pre_get_posts', 'my_home_query' );

当然可以根据您的需要调整值:)

关于wordpress - 木材分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45962977/

相关文章:

forms - 原型(prototype)字段在表单(表单)之后为空,但在表单(表单)之前设置时设置 symfony

javascript - 当用 twig 定义元素时,通过 ID 捕获元素

wordpress - Post Object Timber/Twig WordPress 问题

php - Woocommerce 使用复选框追加销售

javascript - 在 JS (Wordpress) 中获取帖子数

html - 由于某种原因,移动汉堡包链接左对齐

php - Twig (在 Symfony 中): access template parameters from twig extensions

javascript - 如何防止从 WordPress 帖子页面中的所有帖子触发点击功能?

php - 在 WordPress 中转义 Twig/Timber 的要求

php - 未呈现模板