WPの次の投稿リンク機能を使用して、「同じカテゴリの次の投稿」への次および前のナビゲーションリンクを表示します。これですべてがうまくいきます。カテゴリの「最後の」投稿、とにかく「次の」リンクが表示され、私がしたくないことをしています:別のカテゴリへのリンク最初の投稿。カテゴリの最初の投稿と同じように、カテゴリの最初の投稿を閲覧すると、「PREVIOUS」リンクが別の異なるカテゴリの前の投稿にリンクして表示されます。表示されません。
<div id="nav-above" class="navigation">
<div class="nav-previous"><?php previous_post_linknext_post_link( '%link', '<span class="meta-nav">' .
_x( '◄ Previous', 'Previous post link','category' ,TRUE ) . '</span>' ); ?></div>
<div class="nav-next"><?php next_post_link( '%link', '<span class="meta-nav">' . _x( 'Next ► ', 'Next post link', 'category',TRUE ) . '</span>' ); ?> </div>
</div><!-- #nav-above -->
http://codex.wordpress.org/Function_Reference/next_post_link
これを行うには、 previous_post_link()
および next_post_link()
を使用します。
これらの関数はリンクを作成し、ページネーションに使用しているすべてのロジックを取り除くことができるはずです。
同じカテゴリの投稿にのみリンクする場合は、次のパラメーターを使用して関数を使用する必要があります。
previous_post_link('« %link', '%title', true);
next_post_link('%link »', '%title', true);
最初/最後の投稿である前/次のリンクの問題に関する更新された質問への回答として、 previous_post_link()
と next_post_link()
$in_same_term
パラメーターに関連して:
次の投稿が現在の投稿と同じ分類用語内にある必要があるかどうかを示します。 「true」に設定すると、現在の分類用語の投稿のみが表示されます。投稿が親カテゴリとサブカテゴリの両方、または複数の用語にある場合、次の投稿リンクはそれらの用語のいずれかの次の投稿につながります。
それを念頭に置いて、最初の最後の投稿が複数のカテゴリに関連付けられている可能性がありますか?その場合は、wp_get_object_terms
フィルターが役立つ場合があります。
元の質問(編集前)では、最初のカテゴリの投稿のみを検索していたため、ここにそのロジックを適用します。
<?php add_filter('wp_get_object_terms', 'my_custom_post_navigation', 4, 99); ?>
<div id="nav-above" class="navigation">
<div class="nav-previous">
<?php previous_post_link( '<span class="meta-nav"> %link </span>', _x( '◄ Previous', 'Previous post link', 'category') , TRUE ); ?>
</div>
<div class="nav-previous">
<?php next_post_link( '<span class="meta-nav"> %link </span>', _x( 'Next ►', 'Next post link', 'category') , TRUE ); ?>
</div>
</div><!-- #nav-above -->
<?php remove_filter('wp_get_object_terms', 'my_custom_post_navigation', 99); ?>
上記に加えて、これをfunctions.phpファイルに配置する必要があります。
/**
* Return only the first category when outputting the previous/next post links
*/
function my_custom_post_navigation($terms, $object_ids, $taxonomies, $args){
return array_slice($terms, 0, 1);
}
Single.phpページを親テーマからコピーして、子テーマのディレクトリに貼り付けます。 child-themeディレクトリからsingle.phpを開き、ファイルの最後に次のコードを追加します[get_footer();の前)。 ]
<?php
$post_id = $post->ID; // Get current post ID
$cat = get_the_category();
$current_cat_id = $cat[0]->cat_ID; // Get current Category ID
$args = array('category'=>$current_cat_id,'orderby'=>'post_date','order'=> 'DESC');
$posts = get_posts($args);
// Get IDs of posts retrieved by get_posts function
$ids = array();
foreach ($posts as $thepost) {
$ids[] = $thepost->ID;
}
// Get and Echo the Previous and Next post link within same Category
$index = array_search($post->ID, $ids);
$prev_post = $ids[$index-1];
$next_post = $ids[$index+1];
?>
<?php if (!empty($prev_post)){ ?> <a class="previous-post" rel="prev" href="<?php echo get_permalink($prev_post) ?>"> <span class="meta-icon"><i class="fa fa-angle-left fa-lg"></i></span> Previous</a> <?php } ?>
<?php if (!empty($next_post)){ ?> <a class="next-post" rel="next" href="<?php echo get_permalink($next_post) ?>">Next <span class="meta-icon"><i class="fa fa-angle-right fa-lg"></i></span> </a> <?php } ?>
このコードを追加した後、次のコードを子テーマのStyle.cssに貼り付けて、リンクのスタイルを設定します。
a.previous-post, a.next-post {
color: #fff;
background-color: #4498e7;
text-align: center;
height: 34px;
line-height: 34px;
font-size: 14px;
border: 1px solid;
padding: 0 20px;
margin-bottom: 30px;
text-transform: uppercase;
border-radius: 4px;
font-weight: bold;
}
a.previous-post:hover, a.next-post:hover {
color: #4498e7;
background-color: #fff;
}
a.previous-post {
float: left !important;
}
a.next-post {
float: right !important;
}
結果を教えてください:)
特定のカスタム分類またはterm、カスタム投稿のprevまたはnext postリンクを制限する必要がある場合type、custom fieldまたはformatを試してください Ambrosite Next/Previous Post Link Plus 。このプラグインは、2つの新しいテンプレートタグを作成します—next_post_link_plusおよびprevious_post_link_plus—これらはコアWordPressのアップグレードバージョンですnext_post_linkおよびprevious_post_linkテンプレートタグ。