私は500以上の投稿を持っています、そして私はページ付けで100の投稿だけを制限したいです。そのため、それぞれに10の投稿がある10ページ。あなたにコードを見せる:
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$posts = get_posts(
array(
'numberposts' => 10,
'paged' => $paged,
'meta_key' => 'property',
'orderby' => 'meta_value_num', //or 'meta_value_num'
'order' => 'DESC',
)
);
if( $posts ) {
$count = 0;
foreach( $posts as $post ) {
setup_postdata( $post );
// post stuff
$count++;
}
wp_reset_postdata();
}
始める前に、ページ区切り付きのクエリにget_posts
を使用しないでください。 get_posts
は、改ページを合法的に中断し、クエリオブジェクトを返しません。クエリをページ分割する必要がある場合は、WP_Query
を使用してください。
あなたの問題に関しては、私は本当にあなたがページネーションを含むとき、合計の総投稿数を100に制限することが可能であるとは思わない。私が考えることができる唯一のシナリオは:
10ページのページのリンクを削除しますが、ここでも手動で11ページを入力して11ページの投稿を見ることができます
新しい投稿が公開されたときにカスタム関数を実行して、101番目の投稿および連続投稿の投稿ステータスをdraft
のような何か他のものに変更します。デフォルトでは、WP_Query
はすべてのユーザーのpublish
ed投稿とログインユーザーの追加のprivate
投稿のみを照会します。そのため、投稿のステータスを変更した場合、これらの投稿は除外されます
もう1つの、それほど邪魔にならない方法は、2つのクエリを実行することです。最初のものは非常に基本的でスリムで、最初の100個の投稿のうち投稿IDのみを返します。このIDは2番目のクエリに渡されます。2番目のクエリは1ページに10件の投稿を受け取り、100ページのIDを渡しているため、10ページしかありません。ここでの利点は、11ページを手動で入力すると404ページになることです。
私が言ったように、ここではポイント3が最良の選択肢です。最初のクエリはページネーションをカットするのでget_posts
を使います。これはあなたのクエリをスピードアップし、ポストIDを取得するだけで完全なクエリを通常よりも99.9%速くします。全体として、ページへの影響はほぼゼロです。 2番目のクエリでは、WP_Query
とpost__in
パラメータを使用して投稿のページリストを取得します。
(このコードはテストされていないため、PHP 5.4 +が必要です。
$args = [
'posts_per_page' => 100,
'fields' => 'ids',
// Add additional args here
];
$post_ids = get_posts( $args );
if ( $post_ids ) {
$args_2 = [
'paged' => $paged,
'post__in' => $post_ids,
'posts_per_page' => 10,
];
$q = new WP_Query( $args_2 );
while ( $q->have_posts() ) {
$q->the_post();
// YOUR LOOP
}
next_posts_link( 'Next Posts', $q->max_num_pages );
previous_posts_link( 'Previous Posts' );
wp_reset_postdata();
}
たぶんそれは役立ちます
function wpcodex_filter_main_search_post_limits( $limit, $query ) {
return 'LIMIT 0, 100';
}
add_filter( 'post_limits', 'wpcodex_filter_main_search_post_limits', 10, 2 );
もっと: post_limits
filter
このコードを試してみると、10ページしか表示できません。
これは投稿を表示したい場所のコードです。
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array( 'post_type' => 'property', 'posts_per_page' => 10,'paged'=> $paged,'orderby'=> 'meta_value_num','order'=> 'DESC');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
print_r($post); ?>
<h1> <?php the_post_thumbnail(); ?></h1>
<h2><?php the_title(); ?></h2>
<h3><?php the_content(); ?></h3>
<?php endwhile; ?>
これは、ページ付けを表示する必要がある場所のフッターです。
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
<?php if($loop->max_num_pages > 1 && $loop->max_num_pages < 11 ) { ?>
<ul class="pager">
<?php for($i=1;$i<=$loop->max_num_pages; $i++){ ?>
<li><a href="<?php get_permalink();?>page/<?php echo $i; ?>"> <?php echo $i; ?></a></li>
<?php } ?>
</ul>
<?php } else if($loop->max_num_pages > 1 && $loop->max_num_pages > 10) { ?>
<ul class="pager">
<?php for($i=1;$i<=10; $i++){ ?>
<li><a href="<?php get_permalink();?>page/<?php echo $i; ?>"> <?php echo $i; ?></a></li>
<?php } ?>
</ul>
<?php } else{ ?>
<?php } ?>