假设我有以下文章,上面有以下标题:

  • PostA(分配给“类别1”)
  • Postx(类别2)
  • Postb(类别1)
  • Postc(类别1)
  • Postd(类别1)
  • 邮政(类别2)
  • Poste(类别1)
    ...

当访问者阅读Postc时,我该如何在侧边栏中显示:


以前的文章:
“ PostA”(当然是这些链接)
'Postb'

下一篇文章:
'postd'
'Poste'


同一类别的上一个和接下来的两个帖子。 (如果帖子有更多类别,我们将选择第一或最后一个类别 - 这并不重要)。

另外,如果不可能显示上述和接下来的两个帖子,则可以接受,也只有一篇上一篇文章。 (我知道这有一些WP功能,但我们更喜欢两个帖子)。

另外,当然,我们要显示第一个 'n' 标题中的字符(假设22)。我们不想显示诸如“下一个帖子”或类似的静态文本。

tia

有帮助吗?

解决方案

现有的WordPress函数仅用于显示上一篇或下一个帖子。我迅速编写了功能以显示任何数量的帖子。

将以下内容粘贴到您的主题function.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>';
    }
}

在您要显示帖子的侧边栏文件中,使用 custom_adjacent_posts_links( true ); 在同一类别中显示前两个帖子, custom_adjacent_posts_links( true, false ); 在同一类别中显示接下来的两个帖子。

许可以下: CC-BY-SA归因
scroll top