WordPress の 管理画面 の メニュー に有る 投稿 の ラベル を 変更する方法
WordPress に デフォルト で 存在する 投稿 の ラベル を 変更する際 良い方法がないものか 考えた結果 良さげな 結論に至ったので 共有したい
最終的な方法 (結論)
add_filter('post_type_labels_post', 'filter_post_type_labels');
function filter_post_type_labels($labels)
{
foreach ($labels as &$label) {
$label = str_replace('投稿', __('New Label', 'default'), $label);
}
unset($label);
return $labels;
}
の 様にするのが 一番コンパクトかな と 思う
よく見る global の $wp_post_types $menu $submenu を 書き変える方法
add_action('init', 'filter_post_types');
function filter_post_types()
{
global $wp_post_types;
$label = __('New Label', 'default');
$labels = &$wp_post_types['post']->labels;
$labels->name = $label;
$labels->singular_name = $label;
// labels の 設定分 書き換える
}
add_action('admin_menu', 'filter_menu');
function filter_menu()
{
global $menu;
global $submenu;
$label = __('New Label', 'default');
$menu[5][0] = $label;
$submenu['edit.php'][5][0] = __('New Label List', 'default');
$submenu['edit.php'][10][0] = __('New New Label', 'default');
}
検索すると 大抵 上記の方法が 引っかかるけど 少々 強引かな?? と 思う
できれば 投稿 を 作るタイミング で ラベル名 を 変更する方が スマートに感じる
あと この手の複製記事が多くて 他の手法が なかなか見つけられなくて 困る…
register_post_type_args フィルター を 使う方法
register_post_type_args | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/register_post_type_args/
次に register_post_type_args
を 使って $args
の 中身を書き換える方法
add_action('admin_menu', [$this, 'add_admin_menu']);
function filter_post_type_args($args, $post_type)
{
if ($post_type === 'post') {
$args['labels'] = [
'name' => __('New Label', 'default'),
'singular_name' => __('New Label', 'default'),
// labels の 設定分 書き換える
];
}
return $args;
}
これは 先程の方法よりも だいぶスマートに感じる
ただ ラベルの数だけ 修正しないといけないのは かなり手間だ
array(1) {
["name_admin_bar"]=>
string(4) "Post"
}
array(1) {
["name_admin_bar"]=>
string(6) "投稿"
}
$args['labels']
の 中身も 上記の通りなので 置換では うまく行かない
post_type_labels_{$post_type} フィルター を 使う方法
register_post_type
を 調べていたところ 省略したラベルを 補完生成してくれる関数 get_post_type_labels
内に post_type_labels_{$post_type}
フィルター を 見つけた
get_post_type_labels() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/get_post_type_labels/
post_type_labels_{$post_type} | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/post_type_labels_post_type/
それで 冒頭のようなコードを 考えついたのだ
post_type_labels_{$post_type}
は デフォルト の 投稿 の 場合 翻訳前 と 翻訳後 の 2回走る
翻訳前 の Post / Posts を 置換しても 翻訳後 の 処理 で 上書きされてしまうので '投稿'
で 置換している
もっとスマートな方法 や これだと こんな問題が起きます 等 何かあったら コメント下さい