添加筛选器|页面标题|模板|为什么菜单上会出现_TITLE?

时间:2017-11-09 作者:Shahrukh

我在我的主题中添加了一个模板,我想使用以下代码更改页面标题。但它也改变了我的菜单标题。我无法解决此问题。请帮忙。

function get_id_by_slug($page_slug) {
    $page = get_page_by_path($page_slug);
    if ($page) {
        return $page->ID;
    } else {
        return null;
    }
}

$branchPageSlug     = $_GET[\'slug\'];
$branchPageID       = get_id_by_slug($branchPageSlug);

global $branchPageTitle;
$branchPageTitle    = get_the_title($branchPageID);


function cf_ChangePageTitle( $title ) {
    global $branchPageTitle;
    return $branchPageTitle;
}
add_filter( \'the_title\', \'cf_ChangePageTitle\' );

4 个回复
SO网友:LumberHack

代码中有很多地方可以改进,比如global 变量,但我猜您正在学习,所以我将首先回答您的问题。

您可以尝试使用此技术仅在页面中更改标题,保持菜单不变。

Try this tutorial

大体上

转到Appearance -> Menus 和您的菜单项。在这里,您将看到更改的页面标题。要保留旧菜单名称,请打开此菜单并在导航标签下键入,然后单击Save

还要考虑阅读this 为了正确使用global 键盘

SO网友:saad waseem

这是您的代码的工作示例,我引入了一些更改,如“get\\u page\\u by\\u path(page\\u path)”需要页面路径。在这里,您需要处理所有类型的页面,包括有家长的页面和没有家长的页面。我已经在页面中测试了此代码。php。

 function get_id_by_slug($page_path) {
    $page = get_page_by_path($page_path);
    if ($page) {
        return $page->ID;
    } else {
        return null;
    }
}
global $post;
$branchPageSlug     = $post->post_name;
$branchPageID       = get_id_by_slug(get_page_uri( $post->ID ));
global $branchPageTitle;
$branchPageTitle    = get_the_title($branchPageID);


function cf_ChangePageTitle( $title ) {
    global $branchPageTitle;
    //you can change your page title here conditionally/unconditionally 
    $branchPageTitle = "your page title";
    return $branchPageTitle;
}
add_filter( \'the_title\', \'cf_ChangePageTitle\' );

SO网友:obiPlabon

您必须像下面这样更新过滤器回调。$branchPageTitle 将仅在帖子类型为页面时应用。

function cf_ChangePageTitle( $title, $post_id ) {
    if ( \'page\' === get_post_type( $post_id ) ) {
        global $branchPageTitle;
        return $branchPageTitle;
    }
    return $title;
}
add_filter( \'the_title\', \'cf_ChangePageTitle\', 10, 2 );

SO网友:Mark Kaplun

the_title 筛选器将影响调用get_the_title 可以在任何地方使用的功能,尤其是对于这样一个通用功能。如果希望仅在特定范围内进行更改,则需要在过滤器处理中确保您在正确的范围内。

限制范围的一种方法是使用以下函数is_admin, is_single 和他们的朋友,以确保您在过滤器处理功能中处于正确的范围。另一种方法是仅在确定自己在范围内后添加过滤器,例如,如果只需要在页面模板的上下文中运行过滤器,则可以将其作为模板的一部分添加。

无关注释:切勿使用全局。这段代码足够小,人们可以理解那里发生了什么,但还有5行代码,在一个月内,你会因为试图理解正在发生的事情和与各种错误作斗争而变得白发苍苍。不要这样做。

结束

相关推荐

当返回值为空时,Apply_Filters为什么要返回非空字符串?

因为这个把我的键盘弄坏了。进行了正确的安装,将数据库上载到新的MySQL,并一直在正确使用子主题。但有件事困扰着我,我想不出来。在我的新安装上(ver2.whowhatwhy.com) 我故意将一些小部件留空。我想,当阅读default-widgets.php wp中的文件包括在该小部件上不会显示标题元素。相反,显示标题小部件是因为,出于某种原因,传递的值apply_filters 是一个空格,而不是空白值$instance[\'title\'] 为空。$title = apply_filters( \'