Cambia il titolo di una Meta Box


8

Sto cercando di creare una funzione che mi consenta di cambiare il titolo di una meta box stabilita (ovvero, cambiare il titolo della Meta Box "Autori" in "Squadra", ecc.)

Non volevo usare JS né disinserire la meta box originale e aggiungerla di nuovo.

Ho iniziato con il seguente secondo un altro thread che elencava il codice in questo modo:

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

Sono bloccato sulla parte per "scorrere l'array e cambiare i titoli desiderati".

Quale sarebbe il modo migliore per raggiungere questo obiettivo? Usi un foreach per fare il loop? O uno scenario Switch / Case? Sono abbastanza nuovo in questo, qualcuno potrebbe fornire un esempio di come realizzare questo?

Aggiornamento: l'esempio di Stephen Harris funziona per Core Meta (grazie!):

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

Aggiornamento: risolto per Meta personalizzati

Per farlo funzionare con i tuoi meta personalizzati cambia la tua add_action come segue in modo che spari il tuo codice di modifica del titolo dopo che la meta box è stata aggiunta:

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

Risposte:


11

Risposta migliorata

Ho deciso di rivisitare questa domanda dopo aver realizzato quanto inutilmente sia confusa.

La soluzione migliore è rimuovere il metabox e quindi aggiungerlo nuovamente, specificando un titolo alternativo. Ecco un esempio per il post post-tipo.

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

Nota: se si esegue questa operazione per un metabox non core, è necessario assicurarsi che il callback venga chiamato dopo l'aggiunta del metabox specificando una priorità più elevata.


Quindi, $wp_meta_boxesha molti array nidificati

Per i tuoi scopi:

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

(NB. Non sono sicuro che siano passati argomenti a quell'azione ...:

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
}

In realtà la struttura dell'array è più complicata. Ho aggiornato il mio codice. Ho provato questo e funziona: D (Assicurati solo di passare 'post_type'al tipo di post, ad esempio 'post').

Liberamente la struttura dell'array è post-tipo> priorità> core> ID metabox.

Se vuoi vedere l'array per te stesso, all'interno della tua funzione usa:

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

Stephen Harris, posso baciarti. Ha funzionato come un incantesimo, grazie mille! Stavo complicando troppo il mio codice sembra quando stavo cercando di risolvere questo da solo.
Syrehn,

Felice di aiutare: D
Stephen Harris,

Hmm ... Ho provato questo con una meta-box personalizzata che ho creato "projectinfo" era l'ID univoco di metabox, quindi ho provato ... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; ma non ha funzionato, mi sono perso qualcosa qui?
Syrehn,

Prova echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');dopo aver modificato il titolo per vedere cosa è andato storto. La mia ipotesi è che non sia "core": D
Stephen Harris,

Ho aggiunto che il meta personalizzato non compare nell'elenco. Quindi probabilmente hai ragione non è un 'core'.
Syrehn,

2

So che questa è una vecchia domanda, ma c'è un gancio per questo. Aggiungeresti al tuo tema functions.phpo plugin di funzionalità personalizzato una funzione agganciatapost_type_labels_{$post_type}

Ad esempio, abbiamo un tipo di post personalizzato chiamato bande vogliamo cambiare le etichette delle immagini in primo piano in "Band Photo". La funzione sarebbe simile a questa:

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

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


1

Dopo tutto, la soluzione migliore sarebbe quella di agganciare una funzione all'amo appena prima della creazione della meta-box:

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

Okay ... Questo è un po 'confuso, ma ho pensato che fosse intelligente. Fondamentalmente, basta usare le funzioni del linguaggio integrato per cambiare ciò che ti piace. Finché conosci la parola originale o le parole che desideri modificare e sono state correttamente richiamate nel codice con qualcosa del genere __('text in here'), puoi cambiarle in qualsiasi cosa ti piaccia.

Una volta l'ho usato per cambiare la meta box "Estratti" con un nome diverso (insieme alla descrizione all'interno) perché il mio tema lo usava per pezzi di testo estremamente piccoli. Dare un'occhiata:

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

A quanto pare, non ero il solo a pensarci. Sorpresa. Ecco un articolo che discute la stessa idea , con un metodo diverso di usare gettext.


0

A partire da WordPress 4.4, arg $ screen può essere un array che semplifica notevolmente le aggiunte di massa o le alterazioni delle meta box.

Il codice seguente modifica il titolo della meta box "Autore" in "Editor" su pagine, post, allegati e tutti i tipi di post personalizzati, indipendentemente dal numero di quelli aggiunti o dal momento in cui vengono aggiunti al tuo sito.

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

Questo è un po 'confuso, ma per chiunque abbia bisogno di una semplice soluzione CSS, usa questo:

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

Basta sostituire il tuo-metabox-id con il tuo. :)

(nota: normalmente aggiungo un admin.css tramite funzioni.php, è lì che controllo alcuni stili di amministrazione di wp)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.