使用If条件根据类别在帖子标题后添加文本-但不适用于菜单项

时间:2022-01-14 作者:Marcus Wood

一些帖子有一个“更多”;“可读值”;即使他们可以自由阅读。为了突出它们增加的读者价值,我将这段代码整合在一起。

"E;“问题”;由于某种原因,在浏览博客页面时,菜单项会得到;“值得一读”;还有标签——这不是我们的想法。

My question is this; 我是做错了还是我需要以某种方式包括一个;is\\u menu()“是”;我不知道有什么条件?

add_filter(\'the_title\', \'label_after_post_title\', 10, 1);
function label_after_post_title($title){

  if (is_admin()) return $title;

    if (is_single() || is_category(\'worth-reading\') || is_search()) return $title;

        $label = \'\';

        if (has_category(\'worth-reading\')){

          $label = \'<span class="worth-reading">Worth Reading</span>\';
          $title = $title . \'&nbsp;&nbsp;\' . $label;
        }
      return $title;
}

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

这个the_title() 过滤器应用于菜单项中帖子和页面的标题,因此在没有任何条件的情况下,您所做的任何更改也将应用于此处。

有必要对您的条件进行细分,以了解您的更改仍应用于菜单的原因:

  • is_single() <我们是否正在查看单个帖子我们可能是,但导航菜单通常仍显示在单柱上
  • is_category() *我们正在查看类别存档吗?`同样,我们可能会这样做,但导航菜单通常仍显示在单个立柱上
  • is_search() <我们是否正在查看搜索结果同样,对于nav菜单项也是如此
因此,您需要一个条件,以便仅对中的帖子标题应用筛选器the loop. 你要找的功能是in_the_loop().

我甚至可以说,你不想要你使用的任何其他条件。您的目标是在循环中具有worth-reading 类别只要满足这些条件,我们就不需要检查其他条件:

function label_after_post_title( $title, $post_id ) {
    if ( is_admin() ) {
        return $title;
    }

    if ( in_the_loop() && has_category( \'worth-reading\', $post_id ) ) {
        return $title . \'&nbsp;&nbsp;<span class="worth-reading">Worth Reading</span>\';
    }

    return $title;
}
add_filter( \'the_title\', \'label_after_post_title\', 10, 2 );

SO网友:rafsuntaskin

您可以使用以下方法检查帖子是否为导航项目,从而跳过更改标题is_nav_menu_item 或者你可以通过检查get_post_type != \'发布\'。