Schimbarea Titlului unei Cutii Meta

19 ian. 2012, 18:12:36
Vizualizări: 16.2K
Voturi: 10

Încerc să creez o funcție care să îmi permită să schimb titlul unei cutii meta deja existente (de exemplu, să schimb titlul 'Autori' în 'Echipa', etc.).

Nu am vrut să folosesc JavaScript sau să fiu nevoit să elimin cutia meta originală și să o adaug din nou.

Am început cu următoarea abordare conform unui alt thread care lista codul astfel:

// conectare la acțiunea '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 cu cutii meta definite
    // parcurge array-ul, schimbă titlurile dorite
}

Am rămas blocat la partea de a "parcurge array-ul și de a schimba titlurile dorite".

Care ar fi cea mai bună metodă de a realiza acest lucru? Folosind un foreach pentru buclă? Sau un scenariu Switch/Case? Sunt relativ nou în acest domeniu, poate cineva să ofere un exemplu despre cum să realizez asta?

Actualizare: Exemplul lui Stephen Harris funcționează pentru cutiile meta Core (mulțumesc!):

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array cu cutii meta definite
    // parcurge array-ul, schimbă titlurile dorite

    $wp_meta_boxes['post']['normal']['core']['authordiv']['title']= 'Membru al echipei';
}

Actualizare: Rezolvat pentru cutii meta personalizate

Pentru a face acest lucru să funcționeze cu cutiile tale meta personalizate, schimbă add_action astfel încât să declanșeze codul de schimbare a titlului după ce cutia meta a fost adăugată:

add_action('add_meta_boxes', 'change_meta_box_titles', 999);
0
Toate răspunsurile la întrebare 6
7
13

Răspuns Îmbunătățit

Am decis să revin la această întrebare după ce am realizat cât de inutil de hacky era soluția anterioară.

Cea mai bună soluție este să eliminăm metabox-ul și apoi să-l adăugăm din nou, specificând un titlu alternativ. Iată un exemplu pentru post-type-ul 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', __('Membru al Echipei','wpse39446_domain'), 'post_author_meta_box', 'post', 'core', 'high' );
}

Notă: Dacă faceți acest lucru pentru un metabox non-core, va trebui să vă asigurați că callback-ul este apelat după ce metabox-ul este adăugat, specificând o prioritate mai mare.


Deci, $wp_meta_boxes are o mulțime de array-uri imbricate

Pentru scopurile dumneavoastră:

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

(NB. Nu sunt sigur dacă sunt transmise argumente la acea acțiune...:

add_action('add_meta_boxes', 'change_meta_box_titles');
function change_meta_box_titles() {
    global $wp_meta_boxes; // array de metabox-uri definite
    // parcurgeți array-ul, schimbați titlurile dorite
}

De fapt, structura array-ului este mai complicată. Am actualizat codul meu. Am testat acest lucru și funcționează :D (Doar asigurați-vă că schimbați 'post_type' cu tipul de post, de ex. 'post').

Pe scurt, structura array-ului este post-type > prioritate > core > ID metabox.

Dacă doriți să vedeți array-ul pentru dumneavoastră, folosiți în interiorul funcției:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');
19 ian. 2012 18:34:31
Comentarii

Stephen Harris, aș putea să te sărut! A funcționat perfect, îți mulțumesc enorm!

Se pare că am complicat inutil codul meu când încercam să rezolv singur această problemă.

Syrehn Syrehn
19 ian. 2012 19:15:00

Mă bucur că am putut ajuta :D

Stephen Harris Stephen Harris
19 ian. 2012 19:16:24

Hmm... Am încercat asta cu o cutie meta personalizată pe care am creat-o. "projectinfo" a fost ID-ul unic al metabox-ului, așa că am încercat...

$wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; dar nu a funcționat. Am omis ceva aici?

Syrehn Syrehn
19 ian. 2012 19:45:57

Încearcă echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die(''); După ce ai schimbat titlul pentru a vedea ce nu a funcționat. Presupunerea mea este că nu este 'core' :D

Stephen Harris Stephen Harris
19 ian. 2012 19:55:46

Am adăugat asta, meta personalizat nu apare în listare. Deci, probabil ai dreptate, nu este 'core'.

Syrehn Syrehn
19 ian. 2012 19:59:18

Mulțumesc pentru acest răspuns și întrebare minunate. Căutam exact același lucru! Mulțumesc din nou. :)

Nicole Nicole
19 sept. 2012 01:59:35

Vezi răspunsul meu mai jos pe această pagină pentru cum să faci mai multe tipuri de postări simultan (WordPress 4.4 și versiuni superioare).

Slam Slam
11 oct. 2017 18:38:27
Arată celelalte 2 comentarii
0

Din câte știu, cea mai bună soluție ar fi să atașezi o funcție la hook-ul dinaintea creării meta box-urilor:

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

    // Verifică dacă ești pe $post_type, $priority etc. corecte
    // Apoi modifică output-ul
    foreach( $wp_meta_boxes as $index => $box )
        $wp_meta_boxes[ $index]['title'] = 'TITLU PERSONALIZAT';

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

Știu că aceasta este o întrebare veche, dar există un cârlig de filtrare pentru aceasta. Ai adăuga în functions.php al temei tale sau într-un plugin de funcționalități personalizate o funcție legată de post_type_labels_{$post_type}

De exemplu, să presupunem că avem un tip de postare personalizată numită band și vrem să schimbăm etichetele imaginii reprezentative în "Poză de Bandă". Funcția ar arăta cam așa:

function wpse39446_modify_featured_image_labels( $labels ) {
  $labels->featured_image = __( 'Poză de Bandă', 'textdomain' );
  $labels->set_featured_image = __( 'Setează Poză de Bandă', 'textdomain' );
  $labels->remove_featured_image = __( 'Șterge Poză de Bandă', 'textdomain' );
  $labels->use_featured_image = __( 'Folosește ca Poză de Bandă', 'textdomain' );

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

referință: https://developer.wordpress.org/reference/hooks/post_type_labels_post_type/

25 mai 2017 23:41:13
1

Începând cu WordPress 4.4, argumentul $screen poate fi un array, ceea ce simplifică foarte mult adăugarea sau modificarea în masă a metabox-urilor.

Următorul cod schimbă titlul metabox-ului "Autor" în "Editor" pentru pagini, articole, atașamente și toate tipurile personalizate de postări, indiferent câte sunt adăugate sau când sunt adăugate pe site-ul tău.

add_action('do_meta_boxes', 'my_customize_meta_boxes'); //folosirea do_meta_boxes permite și modificarea metabox-urilor plugin-urilor
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 aug. 2017 18:17:46
Comentarii

A funcționat perfect, mulțumesc! Am înlocuit $post_types cu un array care conține tipurile de postări pe care voiam să le afectez, deoarece get_post_types() returnează toate tipurile de postări cunoscute.

alexg alexg
20 mai 2021 19:37:07
0

Aceasta este o soluție puțin improvizată, dar pentru cei care au nevoie de o soluție CSS simplă, folosiți următoarele:

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

.meta-box-sortables #your-metabox-id .ui-sortable-handle span:before {
    content: 'Noul tău titlu';
    display: inline-block;
    color: #000;
}

Doar înlocuiți your-metabox-id cu al vostru. :)

(notă: de obicei adaug un fișier admin.css prin functions.php, acolo unde controleaz unele stiluri din wp admin)

9 dec. 2017 21:40:49
0

Bine... Acest truc este puțin hacky, dar am considerat că e destul de ingenios. Practic, folosești funcțiile încorporate pentru limbă pentru a schimba ce dorești. Atât timp cât știi cuvintele originale pe care vrei să le modifici și acestea au fost corect marcate în cod cu ceva de genul __('text aici'), le poți schimba în orice dorești.

Am folosit odată această metodă pentru a schimba numele căsuței meta "Excerpts" (Fragmente) într-un alt nume (împreună cu descrierea din interior), deoarece tema mea o folosea pentru bucăți extrem de mici de text. Uite un exemplu:

/**
 * Mai jos sunt câteva personalizări care modifică textul afișat prin filtrul gettext.
 * Aceasta a fost inițial destinată traducerii temelor în alte limbi, dar de ce să nu
 * o folosim pentru mai multă personalizare?
 *
 * @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 = 'Rezumat Rapid';
                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 = 'Folosește acest câmp pentru a REZUMATA foarte mult descrierea acestui eveniment. Încearcă să te limitezi la aproximativ 12 cuvinte sau mai puțin dacă este posibil. Dacă săriți peste acest câmp, vor fi folosite primele câteva cuvinte din zona de mai sus.';
                break;

        }

    }

    return $translated_text;
}

Se pare că nu am fost singurul care s-a gândit la asta. Surpriză. Iată un articol care discută aceeași idee, dar cu o metodă diferită de utilizare a gettext.

10 mai 2012 09:11:31