Modificare il Titolo di una Meta Box

19 gen 2012, 18:12:36
Visualizzazioni: 16.2K
Voti: 10

Sto cercando di creare una funzione che mi permetta di modificare il titolo di una meta box già esistente (ad esempio, cambiare il titolo 'Autori' in 'Team', ecc.).

Non voglio utilizzare JavaScript né dover rimuovere la meta box originale per poi riaggiungerla.

Ho iniziato con il seguente codice, come suggerito in un altro thread:

// aggancio all'azione 'add_meta_boxes'
add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles($post_type, $post)) {
    global $wp_meta_boxes; // array delle meta box definite
    // scorrere l'array e modificare i titoli desiderati
}

Sono bloccato nella parte in cui devo "scorrere l'array e modificare i titoli desiderati".

Qual è il modo migliore per farlo? Usare un foreach per il ciclo? Oppure uno scenario Switch/Case? Sono abbastanza nuovo in questo, qualcuno potrebbe fornire un esempio di come realizzarlo?

Aggiornamento: L'esempio di Stephen Harris funziona per le Meta Box di WordPress Core (grazie!):

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array delle meta box definite
    // scorrere l'array e modificare i titoli desiderati

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

Aggiornamento: Soluzione per Meta Box Personalizzate

Per farlo funzionare con le tue meta box personalizzate, modifica l'add_action come segue in modo che il codice di modifica del titolo venga eseguito dopo che la meta box è stata aggiunta:

add_action('add_meta_boxes', 'change_meta_box_titles', 999);
0
Tutte le risposte alla domanda 6
7
13

Risposta Migliorata

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

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

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', __('Membro del Team','wpse39446_domain'), 'post_author_meta_box', 'post', 'core', 'high' );
}

Nota: Se stai facendo questo per un metabox non core, dovrai assicurarti che il callback venga chiamato dopo che il metabox è stato aggiunto specificando una priorità più alta.


Quindi, $wp_meta_boxes ha molti array annidati

Per i tuoi scopi:

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

(NB. Non sono sicuro se vengono passati argomenti a quell'azione...:

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array dei metabox definiti
    // scorri l'array, cambia i titoli che vuoi
}

In realtà la struttura dell'array è più complessa. Ho aggiornato il mio codice. L'ho testato e funziona :D (Assicurati solo di cambiare 'post_type' con il tipo di post, es. 'post').

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

Se vuoi vedere l'array per conto tuo, all'interno della tua funzione usa:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');
19 gen 2012 18:34:31
Commenti

Stephen Harris potrei baciarti. Ha funzionato perfettamente, grazie mille!

Sembra che stessi complicando troppo il mio codice quando cercavo di risolvere questo problema da solo.

Syrehn Syrehn
19 gen 2012 19:15:00

Felice di esserti stato utile :D

Stephen Harris Stephen Harris
19 gen 2012 19:16:24

Hmm... Ho provato questo con un meta box personalizzato che ho creato "projectinfo" era l'id unico del metabox, quindi ho provato...

$wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; ma non ha funzionato, mi sono perso qualcosa qui?

Syrehn Syrehn
19 gen 2012 19:45:57

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

Stephen Harris Stephen Harris
19 gen 2012 19:55:46

Ho aggiunto quello, il meta personalizzato non appare nell'elenco. Quindi probabilmente hai ragione, non è un 'core'.

Syrehn Syrehn
19 gen 2012 19:59:18

Grazie per questa meravigliosa risposta e domanda. Stavo cercando esattamente la stessa cosa! Grazie ancora. :)

Nicole Nicole
19 set 2012 01:59:35

Vedi la mia risposta più in basso in questa pagina per come gestire più tipi di post contemporaneamente (WordPress 4.4 e versioni successive).

Slam Slam
11 ott 2017 18:38:27
Mostra i restanti 2 commenti
0

Per quanto ne so, la soluzione migliore sarebbe agganciare una funzione all'hook appena prima della creazione dei meta box:

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

    // Verifica se sei sul corretto $post_type, $priority, ecc.
    // Poi modifica l'output
    foreach( $wp_meta_boxes as $index => $box )
        $wp_meta_boxes[ $index]['title'] = 'TITOLO PERSONALIZZATO';

    return $wp_meta_boxes;
}
add_action( 'do_meta_boxes', 'alter_meta_box_titles', 0, 3);
19 gen 2012 18:38:21
0

So che questa è una domanda vecchia, ma esiste un hook filter per questo. Dovresti aggiungere al file functions.php del tuo tema o a un plugin di funzionalità personalizzate una funzione agganciata a post_type_labels_{$post_type}

Prendiamo ad esempio un custom post type chiamato band e vogliamo cambiare le etichette dell'immagine in evidenza in "Foto della Band". La funzione sarebbe qualcosa del genere:

function wpse39446_modify_featured_image_labels( $labels ) {
  $labels->featured_image = __( 'Foto della Band', 'textdomain' );
  $labels->set_featured_image = __( 'Imposta Foto della Band', 'textdomain' );
  $labels->remove_featured_image = __( 'Rimuovi Foto della Band', 'textdomain' );
  $labels->use_featured_image = __( 'Usa come Foto della Band', 'textdomain' );

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

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

25 mag 2017 23:41:13
1

Da WordPress 4.4 l'argomento $screen può essere un array, il che semplifica notevolmente l'aggiunta o la modifica massiva di meta box.

Il seguente codice modifica il titolo del meta box "Autore" in "Editor" per pagine, articoli, allegati e tutti i tipi di post personalizzati, indipendentemente da quanti ne vengano aggiunti o quando vengono aggiunti al tuo sito.

add_action('do_meta_boxes', 'my_customize_meta_boxes'); //usando do_meta_boxes si possono modificare anche i meta box dei plugin
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');
}
6 ago 2017 18:17:46
Commenti

Ha funzionato perfettamente, grazie! Ho sostituito $post_types con un array dei tipi di post che volevo modificare, poiché get_post_types() restituisce tutti i tipi di post conosciuti.

alexg alexg
20 mag 2021 19:37:07
0

Questa è una soluzione un po' "hacky", ma per chi ha bisogno di una semplice soluzione CSS, usa questo codice:

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

.meta-box-sortables #your-metabox-id .ui-sortable-handle span:before {
    content: 'Il tuo nuovo titolo';
    display: inline-block;
    color: #000;
}

Sostituisci semplicemente your-metabox-id con il tuo ID. :)

(nota: normalmente aggiungo un admin.css tramite functions.php, è lì che controllo alcuni stili dell'admin di WordPress)

9 dic 2017 21:40:49
0

Ok... Questo è un po' un hack, ma l'ho trovato piuttosto intelligente. In sostanza, si utilizzano le funzioni integrate per la gestione delle lingue per modificare ciò che si desidera. Finché si conoscono le parole originali che si vogliono cambiare e queste sono state correttamente richiamate nel codice con qualcosa come __('testo qui dentro'), è possibile modificarle come si preferisce.

Una volta l'ho usato per cambiare il nome del meta box "Riassunti" (insieme alla descrizione interna) perché il mio tema lo utilizzava per pezzi di testo estremamente brevi. Dai un'occhiata:

/**
 * Ecco alcune personalizzazioni che modificano l'output del testo tramite il filtro gettext.
 * Questo era pensato per tradurre temi in altre lingue, ma perché non
 * usarlo per ulteriori personalizzazioni?
 *
 * @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 = 'Sintesi rapida';
                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 = 'Usa questo campo per COMPRIMERE davvero la descrizione di questo evento. Mantienila intorno alle 12 parole o meno se possibile. Se salti questo campo, verranno utilizzate le prime parole nell\'area sopra.';
                break;

        }

    }

    return $translated_text;
}

A quanto pare, non ero l'unico a pensarci. Sorpresa. Ecco un articolo che discute la stessa idea, con un metodo diverso di utilizzo di gettext.

10 mag 2012 09:11:31