カスタム投稿タイプが1つの場合は、previous_post_linkとnext_post_linkを単純な矢印で使用します。 (ここではテキストの矢印が表示されていますが、実際にはCSSでテキストを隠したグラフィックを使用しています。)コード:
<nav class="arrowNav">
<div class="nav-previous">
<?php previous_post_link('%link', '«'); ?>
</div>
<div class="nav-next">
<?php next_post_link('%link', '»'); ?>
</div>
</nav>
これはEdgeの場合を除いてうまく働きます。つまり、最初の投稿の場合は、previous_post_linkが最後のの投稿にリンクし、最後の投稿next_post_linkは最初の最初の投稿にリンクします。どちらの場合もデフォルトはnullのようです。最初と最後の投稿ステータスをテストし、それぞれのリンクを作成するにはどうすればよいですか。
Functions.phpファイルに次のカスタム関数を追加し、previous_post_linkおよびnext_post_link関数を呼び出す代わりに、それぞれcustom_next_post_linkおよびcustom_previous_post_linkカスタム関数を呼び出します。
function custom_adjacent_post_link( $format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true ) {
if ( $previous && is_attachment() )
$post = get_post( get_post()->post_parent );
else
$post = get_adjacent_post( $in_same_cat, $excluded_categories, $previous );
if ( ! $post ) {
$post = '';
$args = 'posts_per_page=1&orderby=date&ignore_sticky_posts=1';
if($previous)
$args .= '&order=DESC';
else
$args .= '&order=ASC';
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) :
$the_query->the_post();
$post = get_post(get_the_ID());
endwhile;
wp_reset_postdata();
}
$title = $post->post_title;
if ( empty( $post->post_title ) )
$title = $previous ? __( 'Previous Post' ) : __( 'Next Post' );
$title = apply_filters( 'the_title', $title, $post->ID );
$date = mysql2date( get_option( 'date_format' ), $post->post_date );
$rel = $previous ? 'prev' : 'next';
$string = '<a href="' . get_permalink( $post ) . '" rel="'.$rel.'">';
$inlink = str_replace( '%title', $title, $link );
$inlink = str_replace( '%date', $date, $inlink );
$inlink = $string . $inlink . '</a>';
$output = str_replace( '%link', $inlink, $format );
$adjacent = $previous ? 'previous' : 'next';
echo apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post );
}
function custom_previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') {
custom_adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, true);
}
function custom_next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') {
custom_adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, false);
}
受け入れられた答えはうまくいきますが、おそらく全体のwpqueryとループの代わりにget_posts()を使うべきでした:
if ( ! $post ) {
$args = array('posts_per_page'=> 1,
'orderby'=> 'date',
'ignore_sticky_posts' => 1
);
if($previous)
$args['order']='DESC';
else
$args['order']='ASC';
$adjposts = get_posts($args);
$post = $adjposts[0];
}
あなたが必要としないのであれば、それは一般的にwpqueryを使用することに渋面です。それ以外の場合は、Vinod Dalviに全額のクレジットを付与します。