私は以下のタイトルを持つ以下の投稿があるとしましょう。
訪問者がPostCを読むとき、サイドバーにどのように表示することができますか:
前の投稿:
'PostA'(これらはもちろんここにリンクです)
'PostB'
次の投稿:
'PostD'
'PostE'
同じカテゴリからの前後の2つの投稿を表示します。 (投稿にもっと多くのカテゴリがある場合は、最初のものか最後のものを選択します - それほど重要ではありません)。
また、前の記事と次の2つの記事を表示することが不可能な場合は、前後の記事も1つだけにしてもかまいません。 (私はこれにはいくつかのWP関数があることを知っていますが、可能であれば2つの投稿が望ましいです)。
また、もちろんタイトルの最初の 'n'文字を表示したいです(22としましょう)。 「次の投稿」などのような静的テキストは表示したくありません。
TIA
既存のWordPressの機能は一つ前または次の投稿を表示するためのものです。私はすぐに任意の数の投稿を表示する機能を書きました。
テーマのfunctions.phpファイルに以下を貼り付けます。
function custom_get_adjacent_posts( $in_same_cat = false, $previous = true, $limit = 2 ) {
global $post, $wpdb;
$op = $previous ? '<' : '>';
if ( $in_same_cat ) {
$cat_array = wp_get_object_terms($post->ID, 'category', array('fields' => 'ids'));
$join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy = 'category' AND tt.term_id IN (" . implode(',', $cat_array) . ")";
}
$posts = $wpdb->get_results( $wpdb->prepare( "SELECT p.* FROM wp_posts AS p $join WHERE p.post_date $op '%s' AND p.post_type = 'post' AND p.post_status = 'publish' ORDER BY p.post_date DESC LIMIT $limit", $post->post_date, $post->post_type ) );
return $posts;
}
function custom_adjacent_posts_links( $in_same_cat = false, $previous = true, $limit = 2 ) {
$prev_posts = custom_get_adjacent_posts( $in_same_cat, $previous, $limit );
if( !empty($prev_posts) ) {
echo ($previous) ? '<h3>Previous Posts:</h3>' : '<h3>Next Posts:</h3>';
echo '<ul>';
foreach( $prev_posts as $prev_post ) {
$title = apply_filters('the_title', $prev_post->post_title, $prev_post->ID);
echo '<li><a href="' . get_permalink( $prev_post ) . '">' .$title . '</a></li>';
}
echo '</ul>';
}
}
投稿を表示するサイドバーファイルで、同じカテゴリ内の前の2つの投稿を表示するにはcustom_adjacent_posts_links( true );
を、同じカテゴリ内の次の2つの投稿を表示するにはcustom_adjacent_posts_links( true, false );
を使用します。