【问题标题】:Plugin Development: Dynamically change post title (the_title()) from a plugin, without changing database title插件开发:从插件动态更改帖子标题(the_title()),而不更改数据库标题
【发布时间】:2019-12-18 10:12:37
【问题描述】:

我正在开发一个自定义插件,它需要在不使用页面模板的情况下动态更改帖子标题(不是头部的“标题”标签)。

我希望插件的最终用户能够使用他们自己的主题模板,这些模板已经输出了标题,通常在 h1 标签中,但我不知道在哪里以及如何确定,因为它不是我的主题。

我只需要更改前端的输出,而不是数据库中的输出。我想根据 url 的查询字符串是否匹配某些值,或者前端用户是否登录来更改它。我知道如何通过自定义模板执行此操作,但我想通过用户已经选择的模板执行此操作。

我注意到,如果我过滤 the_title(),它会在管理仪表板和前端导航菜单中的任何地方更改它,这是我不想要的,我只想更改它在用户页面中的输出位置模板(通常在 h1 标记中).... 有没有人对如何进行此操作有任何建议?

【问题讨论】:

  • 在更改标题之前使用is_admin()函数检查用户是否在管理区域(例如if ( ! is_admin() ) { /* Do your thing */ })。
  • @cabrerahector,即使 !is_admin 返回 true,当我过滤标题时,它也会在前端的导航菜单中过滤它,而不仅仅是在模板的 h1 标签中

标签: wordpress wordpress-plugin-creation


【解决方案1】:

您可以使用_title过滤器,它只会对前端产生影响,这不会改变数据库中的记录。您的代码将是这样的: add_filter('the_title', 'add_text_to_post_title');

function add_text_to_page_title( $title ) {
    if( is_post() )
        $title = 'Your text: '. $title;

    return $title;
}

【讨论】:

  • the_title 过滤器确实在仪表板中更改了它,但您可以通过首先检查是否 is_admin() 来规避这一点。但即便如此,这会改变前端各处的标题......即导航菜单,而不仅仅是在 h1 标签中,就像我提出的问题一样。
  • @Jeremy 在这种情况下我建议使用 js,例如你可以这样做:var = $('h1').text(); $('h1').text('your text' + var);
猜你喜欢
  • 2015-06-09
  • 2015-10-05
  • 2014-03-04
  • 2016-08-10
  • 1970-01-01
  • 2021-08-01
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多