メタボックスのタイトルを変更する


8

確立されたメタボックスのタイトルを変更できる関数を作成しようとしています(つまり、メタボックスのタイトルを「作成者」から「チーム」に変更します)。

JSを使用したくなかったか、元のメタボックスの設定を解除して再度追加する必要がありました。

私は次のようにコードをリストした別のスレッドごとに次のように始めました:

// hook to the 'add_meta_boxes' action
add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles($post_type, $post)) {
    global $wp_meta_boxes; // array of defined meta boxes
    // cycle through the array, change the titles you want
}

「配列を循環して、必要なタイトルを変更する」という部分で立ち往生しています。

これを達成するための最良の方法は何でしょうか?foreachを使用してループしますか?またはスイッチ/ケースのシナリオ?私はこれでかなり新しいです、これを達成する方法の例を誰かが提供できますか?

更新:スティーブンハリスの例はコアメタ(ありがとう!)

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array of defined meta boxes
    // cycle through the array, change the titles you want

    $wp_meta_boxes['post']['normal']['core']['authordiv']['title']= 'Team Member';
}

更新:カスタムメタの修正

これをカスタムメタで使用するには、次のようにadd_actionを変更して、メタボックスが追加された後に変更タイトルコードを起動するようにします。

add_action('add_meta_boxes', 'change_meta_box_titles', 999);

回答:


11

改善された回答

それが不必要にハックであることに気付いた後、私はこの質問を再訪することにしました。

最良の解決策は、メタボックスを削除してから、別のタイトルを指定して再度追加することです。投稿タイプの例です。

add_action( 'add_meta_boxes_post',  'wpse39446_add_meta_boxes' );
function wpse39446_add_meta_boxes() {
    remove_meta_box( 'authordiv', 'post', 'core' );
    add_meta_box( 'authordiv', __('Team Member','wpse39446_domain'), 'post_author_meta_box', 'post', 'core', 'high' );
}

注:コア以外のメタボックスに対してこれを行う場合は、より高い優先度を指定して、メタボックスが追加された後にコールバックが呼び出されるようにする必要があります。


だから、$wp_meta_boxesネストされた配列がたくさんあります

あなたの目的のために:

$wp_meta_boxes['post_type']['normal']['core']['authordiv']['title']= 'teams';

(注:そのアクションに引数が渡されるかどうかはわかりません...:

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array of defined meta boxes
    // cycle through the array, change the titles you want
}

実際、配列構造はもっと複雑です。コードを更新しました。私はこれをテストしましたが、動作します:D('post_type''post'などの投稿タイプに変更してください)。

大まかに言うと、配列の構造は、post-type> priority> core> metabox IDです。

配列を自分で確認したい場合は、関数内で次のように使用します。

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');

スティーブン・ハリス私はあなたにキスできました。それは魅力のように働きました、本当にありがとう!これを自分で整理しようとしたときにコードが複雑になりすぎたようです。
Syrehn

助けてくれて嬉しい:D
スティーブンハリス

うーん...「projectinfo」を作成したカスタムメタボックスでこれを試しましたが、メタボックスの一意のIDだったので、試しました $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; が、うまくいきませんでした。
Syrehn

試してみてくださいecho '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');あなたがいただきました!ゴーン間違っを参照するにはタイトルを変更した後。私の推測では、それは「コア」ではないということです:D
スティーブン・ハリス

さらに、カスタムメタがリストに表示されません。だからあなたはおそらくそれが「コア」ではないことを正しいと思います。
Syrehn

2

これは古い質問ですが、これにはフィルターフックがあります。あなたはあなたのテーマfunctions.phpまたはカスタム機能プラグインにフックされた関数を追加しますpost_type_labels_{$post_type}

たとえば、カスタムの投稿タイプが呼び出されband、注目の画像ラベルを「バンド写真」に変更したいとします。関数は次のようになります。

function wpse39446_modify_featured_image_labels( $labels ) {
  $labels->featured_image = __( 'Band Photo', 'textdomain' );
  $labels->set_featured_image = __( 'Set Band Photo', 'textdomain' );
  $labels->remove_featured_image = __( 'Remove Band Photo', 'textdomain' );
  $labels->use_featured_image = __( 'Use as Band Photo', 'textdomain' );

  return $labels;
}
add_filter( 'post_type_labels_band', 'wpse39446_modify_featured_image_labels', 10, 1 );

ref: https //developer.wordpress.org/reference/hooks/post_type_labels_post_type/


1

Afaik、あなたの最善の策は、メタボックスを作成する直前に関数をフックにフックすることです。

function alter_meta_box_titles( $post_type, $priority, $post )
{
    global $wp_meta_boxes;

    // Do check if you're on the right $post_type, $priority, etc.
    // Then alter the output
    foreach( $wp_meta_boxes as $index => $box )
        $wp_meta_boxes[ $index]['title'] = 'CUSTOM TITLE';

    return $wp_meta_boxes;
}
add_action( 'do_meta_boxes', 'alter_meta_box_titles', 0, 3);

0

わかりました...これは少しハッキーですが、私はそれが賢いものだと思っていました 基本的には、組み込みの言語関数を使用して、好きなものを変更するだけです。変更したい1つまたは複数の元の単語がわかっていて、それらが次のようなコードで適切に呼び出されている限り__('text in here')に、に変更できます。

私のテーマは非常に小さなテキストに使用されていたので、「抜粋」メタボックスを別の名前(内部の説明とともに)に変更するために一度使用しました。見てください:

/**
 * Here are some customizations that change text output via the gettext filter.
 * This was intended for translating themes to other languages, but why not
 * use it for more customization?
 *
 * @link http://codex.wordpress.org/Plugin_API/Filter_Reference/gettext
 *
 */
add_filter( 'gettext', 'change_excerpt_name', 20, 3 );
function change_excerpt_name( $translated_text, $text, $domain ) {

    if( $_GET['post_type'] == 'events' ) {

        switch ( $translated_text ) {

            case 'Excerpt' :

                $translated_text = 'Quick Summary';
                break;

            case 'Excerpts are optional hand-crafted summaries of your content that can be used in your theme. <a href="%s">Learn more about manual excerpts</a>.' :

                $translated_text = 'Use this field to REALLY condense the description of this event.  Keep it around 12 words or less if possible. If you skip this field, the first few words in the area above will be used instead.';
                break;

        }

    }

    return $translated_text;
}

結局のところ、これを考えるのは私だけではありませんでした。驚き。これは、gettextの使用方法が異なる、同じアイデアを論じている記事です。


0

WordPress 4.4以降、$ screen引数は、メタボックスの大量の追加または変更を大幅に簡略化する配列にすることができます。

次のコードは、ページ、投稿、添付ファイル、およびすべてのカスタム投稿タイプの「作成者」メタボックスのタイトルを「編集者」に変更します。

add_action('do_meta_boxes', 'my_customize_meta_boxes'); //using do_meta_boxes also allows plugin metaboxes to be modified
function my_customize_meta_boxes(){
  $post_types = get_post_types();
  remove_meta_box( 'authordiv', $post_types, 'normal' );
  add_meta_box('authordiv', __('Editor'), 'post_author_meta_box', $post_types, 'side', 'default');
}

0

これは少しハックですが、簡単なCSSソリューションを必要とする人は、これを使用してください:

.meta-box-sortables #your-metabox-id .ui-sortable-handle span {
    color: transparent;
}

.meta-box-sortables #your-metabox-id .ui-sortable-handle span:before {
    content: 'Your new title';
    display: inline-block;
    color: #000;
}

your-metabox-idを独自のものに置き換えるだけです。:)

(注:私は通常、functions.phpを介してadmin.cssを追加します。ここで、いくつかのwp管理者スタイルを制御します)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.