【问题标题】:Wordpress Custom Post Type Index PageinationWordpress 自定义帖子类型索引分页
【发布时间】:2017-10-14 02:17:40
【问题描述】:

我为我的主题创建了一个名为“项目”的自定义帖子类型。在我的项目页面上,我目前使用以下代码在一页上显示所有项目。

<?php
$args = array( 'post_type' => 'bw_projects', 'posts_per_page' => 18 );
                    $loop = new WP_Query( $args );
                    while ( $loop->have_posts() ) : $loop->the_post();

                    echo '<div class="project p-project" data-filter="">';
                    echo '<a href="'.get_permalink( $post->ID).'">';  
                    the_post_thumbnail();
                    echo '</a>'; 
                    echo '</div>';

                    endwhile;

                ?>

我正在使用archive-projects.php,它使用的分页与帖子非常相似。代码如下..

    <?php
    if ( have_posts() ) :

        /* Start the Loop */
        while ( have_posts() ) : the_post();

            get_template_part( 'template-parts/post/contentp', get_post_format() );

        endwhile;

    else :

        get_template_part( 'template-parts/post/contentp', 'none' );

    endif;
    ?>
    <nav>
        <ul class="pager">
            <li><?php next_posts_link( 'Previous' ); ?></li>
            <li><?php previous_posts_link( 'Next' ); ?></li>
        </ul>
    </nav>

如何创建分页项目主页,而不是只显示所有可用项目。我只是添加到我现有的数组中(示例 1)还是有一个特定的模板我应该使用例如(home-projects.php)?

【问题讨论】:

  • 为什么要从这里开始使用自己的查询? Wordpress 的存档功能已经为您构建了正确的查询。只需使用 archiv.php 模板作为基础 - 创建一个副本,适当地命名它,以便在显示您的自定义帖子类型的存档时使用它,然后相应地调整它以生成您想要的输出。
  • 是的,我正在使用 archive-projects.php 模板存档。然而,由于我的 www.website.co.uk/projects/ 不是在寻找存档模板文件,它正在寻找 page-template.php。这样我还可以包含来自 wp-admin 的页面内容。这有意义吗?

标签: php wordpress html pagination content-management-system


【解决方案1】:

按照codex 试试这个:

将“paged”参数添加到查询中

如果 WP_Query 正在更改主循环并且未设置“分页”参数,则需要使用 get_query_var() 添加它。这样 WordPress 就可以准确地知道它在哪个页面上。

例如,如果您的查询如下所示(没有“paged”参数):

<?php $the_query = new WP_Query( 'posts_per_page=3' ); ?>

你像这样添加参数:

<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

$the_query = new WP_Query( 'posts_per_page=3&paged=' . $paged ); 
?>

下一个例子和上面完全一样,只是参数在一个数组中:

<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
  'posts_per_page' => 3,
  'paged'          => $paged
);

$the_query = new WP_Query( $args ); 
?>

所以在你的具体情况下,它会是这样的:

<?php
                $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
                $args = array( 'post_type' => 'bw_projects', 'posts_per_page' => 18, 'paged' => $paged );
                $loop = new WP_Query( $args );
                while ( $loop->have_posts() ) : $loop->the_post();

                echo '<div class="project p-project" data-filter="">';
                echo '<a href="'.get_permalink( $post->ID).'">';  
                the_post_thumbnail();
                echo '</a>'; 
                echo '</div>';

                endwhile;

            ?>

添加分页后,重置循环也可能是个好主意,以便将 WP 返回到物理页面(而不是档案列表)。你可以这样做:

<?php wp_reset_postdata(); ?>

【讨论】:

  • 谢谢@Phill。效果很好,唯一缺少的元素是指向上一页和下一页的实际链接。我应该按照我的示例在页面顶部包含那些吗?
【解决方案2】:

您好,请检查下面的分页代码。

<?php
global $wp_query;
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array('post_type' => 'bw_projects', 'posts_per_page' => 5, 'paged' => $paged);
$wp_query = new WP_Query($args); ?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    <h2><?php the_title(); ?></h2>
<?php endwhile; ?>
<div class="pagination">
    <?php previous_posts_link( 'New projects;' ); ?>
    <?php next_posts_link('Old projects;') ?>
</div>
<?php wp_reset_postdata(); ?>
<?php else:  ?>
    <p><?php _e( 'No results' ); ?></p>
<?php endif; ?>
<?php wp_reset_query(); ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 2011-03-20
    • 2014-05-21
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2012-11-29
    相关资源
    最近更新 更多