Php 从添加过滤器()挂钩效果中排除wordpress菜单

Php 从添加过滤器()挂钩效果中排除wordpress菜单,php,wordpress,hook,add-filter,Php,Wordpress,Hook,Add Filter,因此,我有一个代码/钩子,它将添加“Blog:”或“Review:”取决于Wordpress博客标题文章顶部的每个文章类型 add_filter( 'the_title', 'prepend_post_type', 10, 2 ); function prepend_post_type( $title, $id ) { if( is_home() && is_front_page() ) { $post_type = get_post_type( $id

因此,我有一个代码/钩子,它将添加“Blog:”或“Review:”取决于Wordpress博客标题文章顶部的每个文章类型

add_filter( 'the_title', 'prepend_post_type', 10, 2 );
function prepend_post_type( $title, $id ) {
    if( is_home() && is_front_page() ) {
        $post_type = get_post_type( $id );
        $types = array (
            'post' => 'Blog',
            'gawe_review' => 'Review'
        );

        return '<small>' . $types[$post_type] . ': </small><br>' . $title;
    }
    return $title;
}
add_filter('the_title','prepend_post_type',10,2);
函数前置\后置\类型($title,$id){
if(is_home()&&is_front_page()){
$post\u type=get\u post\u type($id);
$types=数组(
“发布”=>“博客”,
“gawe_review”=>“review”
);
返回“.$types[$post_type]”:
“.$title; } 返回$title; }

问题是,这段代码也会影响我的标题菜单。如何设置仅针对博客文章的挂钩?

WordPress有两个过滤器:过滤菜单标题之前触发pre_wp_nav_菜单,过滤菜单标题之后触发wp_nav_菜单项。因此,我们可以使用这两个过滤器首先删除导航菜单项标题的标题过滤器,然后再次添加其他标题的标题过滤器

检查此链接,我从这里找到了此解决方案

函数wpse309151\u title\u update($title,$id=null){
if(is_home()&&is_front_page()&&!is_nav_菜单项($id)){
$post\u type=get\u post\u type($id);
$types=数组(
“发布”=>“博客”,
“gawe_review”=>“review”
);
返回“.$types[$post_type]”:
“.$title; } 返回$title; } 添加_过滤器('the_title','wpse309151_title_update',10,2); 函数wpse309151_移除_标题_过滤器_导航菜单($nav_菜单,$args){ 删除过滤器(“标题”,“wpse309151标题更新”,10,2); 返回$nav_菜单; } 添加过滤器('pre_wp_nav_menu'、'wpse309151_remove_title_filter_nav_menu',10,2); 函数wpse309151\添加\标题\过滤器\非\菜单($items,$args){ 添加_过滤器('the_title','wpse309151_title_update',10,2); 退回$items; } 添加过滤器('wp_导航菜单项','wpse309151_添加标题过滤器非菜单',10,2);
WordPress有两个过滤器:在过滤菜单标题之前触发pre_wp_nav_菜单,在过滤菜单标题之后触发wp_nav_菜单项。因此,我们可以使用这两个过滤器首先删除导航菜单项标题的标题过滤器,然后再次添加其他标题的标题过滤器

检查此链接,我从这里找到了此解决方案

函数wpse309151\u title\u update($title,$id=null){
if(is_home()&&is_front_page()&&!is_nav_菜单项($id)){
$post\u type=get\u post\u type($id);
$types=数组(
“发布”=>“博客”,
“gawe_review”=>“review”
);
返回“.$types[$post_type]”:
“.$title; } 返回$title; } 添加_过滤器('the_title','wpse309151_title_update',10,2); 函数wpse309151_移除_标题_过滤器_导航菜单($nav_菜单,$args){ 删除过滤器(“标题”,“wpse309151标题更新”,10,2); 返回$nav_菜单; } 添加过滤器('pre_wp_nav_menu'、'wpse309151_remove_title_filter_nav_menu',10,2); 函数wpse309151\添加\标题\过滤器\非\菜单($items,$args){ 添加_过滤器('the_title','wpse309151_title_update',10,2); 退回$items; } 添加过滤器('wp_导航菜单项','wpse309151_添加标题过滤器非菜单',10,2);
wpse309151是什么意思?它只是一个函数名,您可以根据自己的意愿进行更改..wpse309151_title_update()这是一个函数名,wpse309151是所有函数的前缀,您可以更改前缀,也可以更改函数名..:)你知道为什么这个函数
函数wpse309151_title_update($title,$id=null){if(is_home()&&is_front_page()&&!is_nav_menu_item($id)){
会被调用两次吗?(我用一个控制台日志助手函数测试过,看到它被调用了两次)还有其他人得到同样的结果吗?实际上,它被调用了三次。我在if语句中添加了_the_loop()和is_main_query(),并将其减少为被调用两次而不是三次)还有其他人得到同样的结果吗?wpse309151意味着什么?它只是一个函数名,您可以根据自己的意愿进行更改..wpse309151_title_update()这是一个函数名,wpse309151是所有函数的前缀,您可以更改前缀,也可以更改函数名:)您知道为什么这个函数
函数wpse309151_title_update($title,$id=null){如果(is_home()&&is_front_page()&!is_nav_menu item($id)){
会被调用两次吗?(我用一个console\u log helper函数进行了测试,看到它被调用了两次)还有其他人得到了相同的结果吗?实际上,它被调用了三次。我在if语句中添加了\u loop()和is\u main\u query(),并将其减少到被调用两次而不是三次)还有其他人得到了相同的结果吗?
function wpse309151_title_update( $title, $id = null ) {
    if( is_home() && is_front_page() && ! is_nav_menu_item( $id )) {
        $post_type = get_post_type( $id );
        $types = array (
            'post' => 'Blog',
            'gawe_review' => 'Review'
        );

        return '<small>' . $types[$post_type] . ': </small><br>' . $title;
    }
    return $title;
}
add_filter( 'the_title', 'wpse309151_title_update', 10, 2 );

function wpse309151_remove_title_filter_nav_menu( $nav_menu, $args ) {
    remove_filter( 'the_title', 'wpse309151_title_update', 10, 2 );
    return $nav_menu;
}

add_filter( 'pre_wp_nav_menu', 'wpse309151_remove_title_filter_nav_menu', 10, 2 );

function wpse309151_add_title_filter_non_menu( $items, $args ) {
    add_filter( 'the_title', 'wpse309151_title_update', 10, 2 );
    return $items;
}

add_filter( 'wp_nav_menu_items', 'wpse309151_add_title_filter_non_menu', 10, 2 );