高度なカスタムフィールドとカスタム投稿タイプのuiプラグインを使って、私のWordpressサイトにニュースセクションを作りました。カスタムニュース概要ページ(標準のワードプレス記事ではありません)では、1ページあたりのニュース数を6に制限し、paginate_linksを使用してナビゲーションを提供したいと思いました。私は以下のスニペットを作成しました:
<section class="news-main" role="main">
<?php
$args = array(
'post_type' => 'news',
'posts_per_page' => '6'
);
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$pagination = array(
'base' => '%_%',
'format' => '?page=%#%',
'total' => $the_query->max_num_pages,
'prev_next' => True,
'prev_text' => __( '<< Previous' ),
'next_text' => __( 'Next >>' )
);
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<article class="news-snippet">
<header class="news-box">
<h2 class="mus-hi slogan-head fancy"><span class="fancy-hook"><?php the_time( 'j. F Y' ); ?></span></h2>
<a href="<?php the_permalink(); ?>"><p class="bran-hn slogan-state closure"><?php the_title(); ?></p></a>
</header>
<div class="news-wrap">
<p class="news-excerpt"><?php echo acf_excerpt( 'news_post', 35, ' <span class="news-more-inbox">[...]</span>' ); ?></p>
<p class="bran-hn news-more"><a href="<?php the_permalink(); ?>">More →</a></p>
</div>
</article>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p>No entries</p>
<?php endif; ?>
<nav>
<?php echo paginate_links( $pagination );
$wp_query = NULL;
$wp_query = $temp_query; ?>
</nav>
</section>
最初にwp_queryの引数が定義され、次にWP_Queryで$the_query
が設定され、その後$wp_query
変数が一時変数に保存され、NULLでリセットされてから$the_query
変数に設定されます。最後のステップでpaginate_links
の設定配列が設定されます。それからニュース記事を出力するためのループがあります。ループ後、paginate_links関数が呼び出され、最後に$wp_query
がリセットされ、一時的な$temp_query
変数の内容が書き戻されます。
15のブログ記事を投稿したとすると、出力は次のようになります。
私が3番の上にカーソルを合わせると、スラッグの終わりは次のようになります。
問題は、前後のリンクが設定されていても表示されないことです。主な問題は与えられたスラグです - 私がナンバー3をクリックするならば、私は404ページに着陸します。私が向けられている「ページ3」は、ワードプレスでは不明です。事前に感謝しますラルフ
更新:
$args = array(
'post_type' => 'news',
'posts_per_page' => '1'
);
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$total_pages = $wp_query->max_num_pages;
if ( $total_pages > 1) {
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$current_page = new WP_Query('post_type=news&posts_per_page=1&paged=' . $paged);
$pagination = array(
'base' => '%_%',
'format' => '?paged=%#%',
'mid-size' => 1,
'current' => $current_page,
'total' => $total_pages,
'prev_next' => True,
'prev_text' => __( '<< Previous' ),
'next_text' => __( 'Next >>' )
);
}
更新2:
コードの最初の部分に次の変更を加えてわかりました。ナビゲーションが機能しました。
$args = array(
'post_type' => 'news',
'posts_per_page' => '3',
'paged' => get_query_var( 'paged' )
);
$the_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query = NULL;
$wp_query = $the_query;
$total_pages = $wp_query->max_num_pages;
if ( $total_pages > 1) {
$the_paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$pagination = array(
'base' => @add_query_arg('paged','%#%'),
'format' => '?paged=%#%',
'mid-size' => 1,
'current' => $the_paged,
'total' => $total_pages,
'prev_next' => True,
'prev_text' => __( '<< Previous' ),
'next_text' => __( 'Next >>' )
);
}
私が残した唯一の質問(それでもまだ誤動作している唯一のこと)は、最初のリンクがlink /?paged = 1の代わりにlinkを持っている可能性があります。
表示されるページ数に関しては、 paginate_links
の引数、特にend_size
とmid_size
を読んでください。
404に関しては、問題はページ3がないということです。ページがコンテンツを返すか、404テンプレートをロードするかどうかは、 main query の結果に基づいています。テンプレート。これがpage
投稿タイプの場合は、paged
ではなくpage
query varを設定してみてください。