所以我有这段代码/钩子将添加“ 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;
}
问题是,此代码还会影响我的标题菜单。如何设置仅适用于博客文章的钩子?
答案 0 :(得分:0)
WordPress有两个过滤器:pre_wp_nav_menu在过滤菜单标题之前触发,而wp_nav_menu_items在过滤菜单标题之后触发。因此,我们可以使用这两个过滤器先删除导航菜单项标题的the_title过滤器,然后再为其他标题再次添加the_title过滤器。
检查此链接,我从这里找到了解决方案。https://wordpress.stackexchange.com/questions/309151/apply-the-title-filter-in-post-page-title-but-not-in-menu-title
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 );