web-dev-qa-db-ja.com

ページ区切りのページ数を制限する

私は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();
}
1
Hussain Ansari

始める前に、ページ区切り付きのクエリにget_postsを使用しないでください。 get_postsは、改ページを合法的に中断し、クエリオブジェクトを返しません。クエリをページ分割する必要がある場合は、WP_Queryを使用してください。

あなたの問題に関しては、私は本当にあなたがページネーションを含むとき、合計の総投稿数を100に制限することが可能であるとは思わない。私が考えることができる唯一のシナリオは:

  • 10ページのページのリンクを削除しますが、ここでも手動で11ページを入力して11ページの投稿を見ることができます

  • 新しい投稿が公開されたときにカスタム関数を実行して、101番目の投稿および連続投稿の投稿ステータスをdraftのような何か他のものに変更します。デフォルトでは、WP_Queryはすべてのユーザーのpublished投稿とログインユーザーの追加のprivate投稿のみを照会します。そのため、投稿のステータスを変更した場合、これらの投稿は除外されます

  • もう1つの、それほど邪魔にならない方法は、2つのクエリを実行することです。最初のものは非常に基本的でスリムで、最初の100個の投稿のうち投稿IDのみを返します。このIDは2番目のクエリに渡されます。2番目のクエリは1ページに10件の投稿を受け取り、100ページのIDを渡しているため、10ページしかありません。ここでの利点は、11ページを手動で入力すると404ページになることです。

ポイント3の例

私が言ったように、ここではポイント3が最良の選択肢です。最初のクエリはページネーションをカットするのでget_postsを使います。これはあなたのクエリをスピードアップし、ポストIDを取得するだけで完全なクエリを通常よりも99.9%速くします。全体として、ページへの影響はほぼゼロです。 2番目のクエリでは、WP_Querypost__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();
}
3
Pieter Goosen

たぶんそれは役立ちます

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

4
Trang

このコードを試してみると、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 } ?>
0
Anand