【问题标题】:WordPress Previous and Next in only one Category - posts with multiple CategoriesWordPress 只有一个类别中的上一个和下一个 - 具有多个类别的帖子
【发布时间】:2017-06-08 19:20:52
【问题描述】:

要点击下一篇或上一篇文章,我使用此代码

<?php the_post_navigation( array (
            'next_text' => '<span class="meta-nav">' . __( 'Previous', 'neubau' ) . '</span> ' .
                '<span class="screen-reader-text">' . __( 'Previous Post', 'neubau' ) . '</span> ',
            'prev_text' => '<span class="meta-nav">' . __( 'Next', 'neubau' ) . '</span> ' .
                '<span class="screen-reader-text">' . __( 'Next Post', 'neubau' ) . '</span> ',
            'in_same_term' => 'true',
        ) ); ?>

'in_same_term' => 'true' 用于打开同一类别中的下一篇或上一篇文章。但这不适用于多个类别。

我的帖子分为三个类别:portfolio-1、portfolio-2、portfolio-3。为了在首页上显示其中一些帖子,我添加了第四个类别:home。在一个类别中(例如,portfolio-1)我点击下一个或上一个帖子链接。如果下一篇或上一篇文章有​​两个类别(portfolio-1home),我将被重定向到 home 的下一篇文章/上一篇文章- 而不是 portfolio-1 的下一篇文章/上一篇文章。

我怎样才能留在一个类别中(例如 portfolio-1)?

我发现一些网站存在类似问题,但我无法将解决方案转移到我的代码中。

感谢您的帮助。

【问题讨论】:

  • 这个地址已经很多很多次了。网上有很多很多的文章可以回答这个问题:presscustomizr.com/snippet/restrict-post-navigation-category
  • 没错,有很多很多的文章。我知道这个 presscustomizr.com-article,但代码没有解决我的问题或给了我解决方案的建议。

标签: php wordpress


【解决方案1】:

文件“link-template.php”似乎是代码更改的正确文件。

function get_the_post_navigation( $args = array() ) {
    $args = wp_parse_args( $args, array(
        'prev_text'          => '%title',
        'next_text'          => '%title',
        'in_same_term'       => true,
        'excluded_terms'     => '7,37',
        'taxonomy'           => 'category',
        'screen_reader_text' => __( 'Post navigation' ),
    ) );

    $navigation = '';

    $previous = get_previous_post_link(
        '<div class="nav-previous">%link</div>',
        $args['prev_text'],
        $args['in_same_term'],
        $args['excluded_terms'],
        $args['taxonomy']
    );

    $next = get_next_post_link(
        '<div class="nav-next">%link</div>',
        $args['next_text'],
        $args['in_same_term'],
        $args['excluded_terms'],
        $args['taxonomy']
    );

    // Only add markup if there's somewhere to navigate to.
    if ( $previous || $next ) {
        $navigation = _navigation_markup( $previous . $next, 'post-navigation', $args['screen_reader_text'] );
    }

    return $navigation;
}

这似乎是重要的段落:

function get_the_post_navigation( $args = array() ) {
    $args = wp_parse_args( $args, array(
        'prev_text'          => '%title',
        'next_text'          => '%title',
        'in_same_term'       => true,
        'excluded_terms'     => '7',
        'taxonomy'           => 'category',
        'screen_reader_text' => __( 'Post navigation' ),
    ) );

我将“in_same_term”设置为“true”。 (为了测试“link-template.php”是否是正确的文件,我从文件“single.php”中删除了之前添加的代码“in_same_term”=>“true”)。我为“家庭”类别添加了“excluded_terms”“7”。结果是上一个/下一个保留在一个类别中。但是没有显示包含两个类别的帖子 - “portfolio-1”和“home”。

下一步:如何包含“portfolio-1”和“home”两个类别的帖子,并排除“home”类别的其他帖子?

【讨论】:

  • 绝对不是。永远,永远永远更改核心 WP 文件。下次您运行更新时,您的更改将会丢失。
  • 我知道 - 更好的主意?
  • ... 更好的办法是更改子主题文件“single.php”中的代码(参见本主题的第一篇文章)。
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
相关资源
最近更新 更多