質問: get_post_meta($current_post_id, 'pp_new_title',true); return $new_titile; } } } return $title; } add_filter( 'the_title', 'pppp_title_update', 10, 2 );
回答: wordpressナビゲーションエディタには、投稿/ページのタイトルに関係なくメニュータイトルを変更する機能があります。以下のより自動化されたソリューションコードが必要な場合は、the_titleフィルタを使用して至る所の投稿/ページのタイトルを置き換えますが、nav_menu_item_titleフィルタを使用してメニュー項目のデフォルトのタイトルを復元します。/** * replace post/page title on home, single and archive pages. * * @param string $title post title * @param int $post_id post id * * @return string new post tilte */ function wpse_309151_get_replace_default_title_from_meta( $title, $post_id ) { $post_type = get_post_type( $post_id ); if( !is_admin() && ( $post_type === 'post' || $post_type === 'page' ) ) { $new_title = get_post_meta( $post_id, 'wpse_309151_post_title', true); if( $new_title && !empty( $new_title ) ) { return $new_title; } } return $title; } add_filter( 'the_title', 'wpse_309151_get_replace_default_title_from_meta', 10, 2 ); /** * restore default post/page title in navigation * * @param string $title the menu item's title. * @param wp_post $item the current menu item. * @param stdclass $args an object of wp_nav_menu() arguments. * @param int $depth depth of menu item. used for padding. * * @return string restored post title */ function wpse_309151_get_restore_default_title_for_navigation( $title, $item, $args, $depth ) { // remove filter to not affect title remove_filter( 'the_title', 'wpse_309151_get_replace_default_title_from_meta', 10, 2 ); $post_id = $item->object_id; $title = get_the_title( $post_id ); // add the title filter back add_filter( 'the_title', 'wpse_309151_get_replace_default_title_from_meta', 10, 2 ); return $title; } add_filter( 'nav_menu_item_title', 'wpse_309151_get_restore_default_title_for_navigation', 10, 4 );