wake-up-neo.net

Ändern Sie den Titel einer Meta-Box

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

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

Ich habe mit dem folgenden Thread begonnen, in dem der Code folgendermaßen 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 bleibe dabei, "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 darin, könnte jemand ein Beispiel dafür liefern, wie dies erreicht werden kann?

Update: Stephen Harris Beispiel funktioniert für Core Meta's (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 der Änderung Ihres benutzerdefinierten Metas funktioniert, ändern Sie Ihre add_action wie folgt, sodass sie Ihren Änderungstitelcode auslöst, nachdem das Meta-Feld hinzugefügt wurde:

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

Verbesserte Antwort

Ich habe mich entschlossen, diese Frage zu überdenken, nachdem ich festgestellt habe, wie unnötig abgedreht sie ist.

Die beste Lösung besteht darin, die Metabox zu entfernen und sie dann unter Angabe eines alternativen Titels erneut hinzuzufügen. 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 aufgerufen wird, nachdem die Metabox hinzugefügt wurde, indem Sie eine höhere Priorität angeben.


$wp_meta_boxes hat also viele verschachtelte Arrays

Für Ihre Zwecke:

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

(NB. Ich bin mir 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 sicher, dass Sie 'post_type' in den Post-Typ ändern, z. B. 'post').

Die Struktur des Arrays ist locker nach 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('');
10
Stephen Harris

Ich weiß, das ist eine alte Frage, aber dafür gibt es einen Filterhaken. Sie würden dem functions.php oder benutzerdefinierten Funktions-Plug-in Ihres Themas hinzufügen eine Funktion, die mit post_type_labels_{$post_type} verknüpft ist.

Nehmen wir zum Beispiel an, wir haben einen benutzerdefinierten Beitragstyp mit dem Namen band und möchten die angezeigten Bildbezeichnungen in "Band Photo" ä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/

2
Pea

Afaik, Ihre beste Wette wäre, eine Funktion direkt vor der Meta-Box-Erstellung mit dem Hook zu verknüpfen:

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);
1
kaiser

Okay ... Das ist ein bisschen abgedreht, aber ich fand es irgendwie klug. Grundsätzlich verwenden Sie einfach die eingebauten 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 sie im Code ordnungsgemäß mit etwas wie __('text in here') aufgerufen wurden, 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 Textstücke verwendete. 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 beschreibt , mit einer anderen Methode zur Verwendung von gettext.

0
Don

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

Mit dem folgenden Code wird der Titel des Metafelds "Autor" auf Seiten, Posts, Anhängen und allen benutzerdefinierten Post-Typen in "Editor" geändert, unabhängig davon, wie viele oder wann sie zu Ihrer Site hinzugefügt werden.

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
Slam

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

.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, hier steuere ich einige wp admin-Stile)

0
un.pez.vivo