我的索引文件中有一个自定义的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(); ?>
感谢您的帮助。谢谢!
答案 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查询代码
此代码将出现在我的网站上,但似乎没有 工作
我想你是说,“ 分页不起作用”,对吗?因为不是:
因为您正在使用全局$wp_query
对象进行分页。
在您的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_page
与paginate_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 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(); ?>