Ändern Sie den Titel einer Meta-Box

8

Ich versuche, eine Funktion zu erstellen, mit der ich den Titel einer etablierten Meta-Box ändern kann (dh den Meta-Box-Titel "Autoren" in "Team" usw. ändern kann).

Ich wollte JS nicht verwenden oder musste die ursprüngliche Meta-Box deaktivieren und erneut hinzufügen.

Ich habe mit dem folgenden Thema begonnen, wie in einem anderen Thread, in dem der Code wie folgt aufgeführt ist:

// 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
}

Ich bin fest entschlossen, "durch das Array zu blättern und die gewünschten Titel zu ändern".

Was wäre der beste Weg, um dies zu erreichen? Verwenden Sie eine foreach-Schleife? Oder ein Switch / Case-Szenario? Ich bin ziemlich neu in diesem Bereich. Könnte jemand ein Beispiel dafür geben, wie dies erreicht werden kann?

Update: Stephen Harris 'Beispiel funktioniert für Core Meta (danke!):

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';
}

Update: Für benutzerdefinierte Metas behoben

Damit dies mit den benutzerdefinierten Metas funktioniert, ändern Sie Ihre add_action wie folgt, sodass Ihr Änderungstitelcode nach dem Hinzufügen des Meta-Felds ausgelöst wird:

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

Antworten:

11

Verbesserte Antwort

Ich habe beschlossen, diese Frage erneut zu prüfen, nachdem mir klar wurde, wie unnötig hackig sie ist.

Die beste Lösung besteht darin, die Metabox zu entfernen und sie dann erneut hinzuzufügen, wobei ein alternativer Titel angegeben wird. Hier ist ein Beispiel für den Post-Post-Typ.

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' );
}

Hinweis: Wenn Sie dies für eine Nicht-Core-Metabox tun, müssen Sie sicherstellen, dass der Rückruf nach dem Hinzufügen der Metabox aufgerufen wird, indem Sie eine höhere Priorität angeben.


Hat $wp_meta_boxesalso viele verschachtelte Arrays

Für Ihre Zwecke:

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

(NB. Ich bin nicht sicher, ob Argumente an diese Aktion übergeben werden ...:

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
}

Tatsächlich ist die Array-Struktur komplizierter. Ich habe meinen Code aktualisiert. Ich habe dies getestet und es funktioniert: D (Stellen Sie einfach sicher, dass Sie 'post_type'zum Beitragstyp wechseln , z. B. "Beitrag").

Die Struktur des Arrays lautet lose Post-Typ> Priorität> Kern> Metabox-ID.

Wenn Sie das Array selbst sehen möchten, verwenden Sie in Ihrer Funktion:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');
Stephen Harris
quelle
Stephen Harris Ich könnte dich küssen. Das hat wie ein Zauber funktioniert, vielen Dank! Ich war überfordert, meinen Code zu komplizieren, als ich versuchte, dies selbst zu klären.
Syrehn
Gerne helfen: D
Stephen Harris
Hmm ... Ich habe dies mit einer benutzerdefinierten Meta-Box versucht, die ich erstellt habe. "Projectinfo" war die eindeutige Metabox-ID. Dann habe ich es versucht ... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; aber das hat nicht funktioniert. Habe ich hier etwas verpasst?
Syrehn
Versuchen echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');Sie es, nachdem Sie den Titel geändert haben, um festzustellen, was schief gelaufen ist. Ich vermute, dass es nicht "Kern" ist: D
Stephen Harris
Ich habe hinzugefügt, dass das benutzerdefinierte Meta nicht in der Liste angezeigt wird. Sie haben also wahrscheinlich Recht, dass es kein "Kern" ist.
Syrehn
2

Ich weiß, dass dies eine alte Frage ist, aber dafür gibt es einen Filterhaken. Sie würden dem Plugin Ihres Themas functions.phpoder Ihrer benutzerdefinierten Funktionalität eine Funktion hinzufügen, mit der Sie verbunden sindpost_type_labels_{$post_type}

Nehmen wir zum Beispiel an, wir haben einen benutzerdefinierten Beitragstyp namens bandund möchten die vorgestellten Bildbezeichnungen in "Bandfoto" ändern. Die Funktion würde ungefähr so ​​aussehen:

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/

Erbse
quelle
1

Afaik, Ihre beste Wette wäre es, eine Funktion kurz vor der Erstellung der Meta-Box an den Hook anzuschließen:

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);
Kaiser
quelle
0

Okay ... Das ist ein bisschen hacky, aber ich fand es irgendwie klug. Grundsätzlich verwenden Sie einfach die integrierten Sprachfunktionen, um zu ändern, was Sie möchten. Solange Sie das ursprüngliche Wort oder die ursprünglichen Wörter kennen, die Sie ändern möchten, und diese im Code mit so etwas wie richtig aufgerufen wurden __('text in here'), können Sie sie nach Belieben ändern.

Ich habe es einmal verwendet, um das Meta-Feld "Auszüge" in einen anderen Namen zu ändern (zusammen mit der Beschreibung darin), weil mein Thema es für extrem kleine Textteile verwendet hat. Guck mal:

/**
 * 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;
}

Wie sich herausstellte, war ich nicht der einzige, der daran dachte. Überraschung. Hier ist ein Artikel, der dieselbe Idee mit einer anderen Methode zur Verwendung von gettext beschreibt.

Don
quelle
0

Seit WordPress 4.4 kann das $ screen arg ein Array sein, das das Hinzufügen oder Ändern von Meta-Boxen in Massen erheblich vereinfacht.

Der folgende Code ändert den Titel des Meta-Felds "Autor" auf Seiten, Posts, Anhängen und allen benutzerdefinierten Post-Typen in "Editor", unabhängig davon, wie viele hinzugefügt wurden oder wann sie Ihrer Site hinzugefügt wurden.

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');
}
Zuschlagen
quelle
0

Dies ist ein bisschen hackig, aber für alle, die eine einfache CSS-Lösung benötigen, verwenden Sie diese:

.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;
}

Ersetzen Sie einfach Ihre Metabox-ID durch Ihre eigene. :) :)

(Hinweis: Normalerweise füge ich eine admin.css über functions.php hinzu. Dort steuere ich einige wp-Admin-Stile.)

un.pez.vivo
quelle