在页面模板中时,不显示自定义Wordpress循环

时间:2019-03-05 07:28:38

标签: php wordpress

我的索引文件中有一个自定义的Wordpress循环,该循环当前不起作用。此自定义WP循环的目的是根据其帖子编号分配不同的类和结构。

不幸的是,下面的代码在index.php文件中工作正常。

<?php
/**
* Template Name: custom page template
*/
get_header(); ?>

<?php if (have_posts()) : ?>
<?php $count = 0; ?>
<?php while (have_posts()) : the_post(); ?>
<?php $count++; ?>
<?php if ($count == 1) : ?>

<div class="item1">
<span>hello!</span<?php the_title(); ?>>
</div><!-- .item# --> 

<?php elseif ($count == 2) : ?>      

<div class="item2">
<?php the_title(); ?><span>Hi!</span
</div><!-- .item# --> 

<?php elseif ($count == 3) : ?>      

<div class="item3">
<!-- Put Your Stuff Here -->
</div><!-- .item# --> 

<?php elseif ($count == 4) : ?>      

<div class="item4">
<!-- Put Your Stuff Here -->
</div><!-- .item# --> 

<?php elseif ($count == 5) : ?>      

<div class="item5">
<!-- Put Your Stuff Here -->
</div><!-- .item# -->

<?php else : ?>

<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>

目标:

我要实现的目标是创建一个自定义页面(比方说)www.mywebsite.com/my-custom-page,其中列出了所有文章。

如上所述,自定义循环没有在页面中显示,也没有在页面上显示分页。好像页面模板无法识别或忽略自定义循环代码。

我尝试使用WP Query,但还是没有运气。下面的代码返回“抱歉,没有符合您条件的帖子。”

部分工作的WP查询代码

这是我的website,此代码将出现,但似乎不起作用

<?php
/**
* Template Name: Custom Page - Blog
*/
get_header(); ?>


<!-- START of WP Query -->

<?php $the_query = new WP_Query( array("post_type"=>'post')); ?>

<?php if ( $the_query->have_posts() ) : ?>

<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>

<?php $count++; ?>

    <?php if ($count == 1) : ?>
    <div class="item1">
        <span>Post 1</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 2) : ?>      
    <div class="item2">
    <span>Post 2</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 3) : ?>      
    <div class="item3">
        <span>Post 3</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 4) : ?>      
    <div class="item4">
        <span>Post 4</span><?php the_title(); ?>
    </div><!-- .item# --> 

    <?php elseif ($count == 5) : ?>      
    <div class="item5">
        <span>Post 5</span><?php the_title(); ?>
    </div><!-- .item# -->

    <?php elseif ($count >= 5 || $count <= 7) : ?>      
    <div class="item6">
        <span>Post 6 to 7</span><?php the_title(); ?>
    </div><!-- .item# -->

    <?php elseif ($count >= 8 || $count <= 15) : ?>      
    <div class="item6">
        <span>Post 8 onwards - </span><?php the_title(); ?><?php the_excerpt(); ?>
    </div><!-- .item# -->

    <?php elseif ($count >= 16) : ?>      
    <div class="item6">
        <span>Post 8 onwards - </span><?php the_title(); ?><?php the_excerpt(); ?>
    </div><!-- .item# -->
    
    <?php
    global $wp_query;

        $big = 999999999; // need an unlikely integer

        echo paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $wp_query->max_num_pages
        ) );
    ?>


<?php else : ?>

<?php endif; ?>
<?php endwhile; ?>
<?php else : ?>
<p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

<!-- END of WP Query -->


<?php get_footer(); ?>

    </article>

<?php get_footer(); ?>

感谢您的帮助。谢谢!

4 个答案:

答案 0 :(得分:5)

如先前答案中所述,您可以使用WP_Query对帖子,自定义帖子类型(CPT)和页面进行自定义查询:

$the_query = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    // other args here
) );

并使用The Loop显示帖子:

if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        //
        // Post Content here
        //
    } // end while
} // end if

现在是指此:

  

部分工作的WP查询代码

     

此代码将出现在我的网站上,但似乎没有   工作

我想你是说,“ 分页不起作用”,对吗?因为不是:

  1. 因为您正在使用全局$wp_query对象进行分页。

  2. 在您的WP_Query构造中,您没有设置分页才能正常工作所需的paged参数。

所以应该这样:

$current_page = max( 1, get_query_var( 'paged' ) ); // the current page
$the_query = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    'paged'          => $current_page,
    // other args here
) );

然后将$current_pagepaginate_links()一起使用-您也可以在这里看到,在检索/指定最大页面数时,我使用$the_query而不是$wp_query:< / p>

echo paginate_links( array(
    'current'  => $current_page,
    'total'    => $the_query->max_num_pages, // here I don't use $wp_query
    // other args here
) );

以下是一个工作代码,您可以使用它来代替部分工作的代码(介于<!-- START of WP Query --><!-- END of WP Query -->之间的代码)

<?php
$current_page = max( 1, get_query_var( 'paged' ) );
$the_query = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    'paged'          => $current_page,
    // other args here
) );

if ( $the_query->have_posts() ) :
    $count = 1;
    while ( $the_query->have_posts() ) : $the_query->the_post();
        if ( 1 === $count ) :
        ?>
        <div class="item item1" style="background: red; color: #fff;">
            <span>Post 1</span> <?php the_title( '<h3>', '</h3>' ); ?>
        </div>
        <?php
        elseif ( 2 === $count ) :
        ?>
        <div class="item item2" style="background: orange; color: #fff;">
            <span>Post 2</span> <?php the_title( '<h3>', '</h3>' ); ?>
        </div>
        <?php
        // other conditions here
        else :
        ?>
        <div class="item item3" style="background: yellow; color: #666;">
            <span>Post <?php echo $count; ?></span>
            <?php the_title( '<h3>', '</h3>' ); ?>
        </div>
        <?php
        endif;
        $count++;
    endwhile;
?>
<p>Pagination:</p>
<?php
    $big = 999999999; // need an unlikely integer
    echo paginate_links( array(
        'base'     => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format'   => '?paged=%#%',
        'current'  => $current_page,
        'total'    => $the_query->max_num_pages,
        'type'     => 'list',
        'end_size' => 3,
    ) );
?>
<?php else : ?>
    <p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif;

wp_reset_postdata();
?>

答案 1 :(得分:3)

我不知道您所说的“自定义WordPress循环”是什么意思,但是代码正在运行WordPress已经查询过的帖子,因此在您的自定义页面上还没有完成!因此have_posts()返回false。 要查询所有帖子的“ 手动”,您需要执行以下操作:

$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {

,其余部分从<?php $count = 0; ?>开始。 有关WP_Query的更多信息,请参见以下内容 WP_Query

答案 2 :(得分:3)

您需要定义$args。您可以在https://www.billerickson.net/code/wp_query-arguments/

此处找到可在WP_Query中使用的项目列表。

参见下文:

// WP_Query arguments
$args = array(
    'post_type'              => array( 'post' ),
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // do something
    }
} else {
    // no posts found
}

// Restore original Post Data
wp_reset_postdata();

答案 3 :(得分:2)

Please try this one   

  <?php
    /**
     * Template Name: Custom Page - Blog
     */
    ?>

    <?php get_header(); ?>
    <!-- START of WP Query -->
    <?php
    $post_per_page = 10;
    $paged = !empty(get_query_var('paged')) ? get_query_var('paged') : 1;
    $the_query = new WP_Query(array("post_type" => 'post', 'posts_per_page' => $post_per_page));
    $count = ( $paged * $post_per_page ) - ($post_per_page - 1);
    ?>

    <?php if ($the_query->have_posts()) : ?>

        <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>

            <div class="item<?php echo $count ?>">
                <span>Post <?php echo $count ?> </span><?php the_title(); ?>
            </div><!-- .item# -->

            <?php $count++; ?>

        <?php endwhile; ?>

        <?php
        $big = 999999999; // need an unlikely integer

        echo paginate_links(array(
            'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
            'format' => '?paged=%#%',
            'current' => max(1, get_query_var('paged')),
            'total' => $the_query->max_num_pages
        ));
        ?>

    <?php else : ?>
        <p><?php esc_html_e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>
    <!-- END of WP Query -->

    <?php get_footer(); ?>