Changer le titre d'une boîte Meta


8

J'essaie de créer une fonction qui me permettrait de changer le titre d'une méta-boîte établie (c.-à-d., Changer le titre de la méta-boîte «Auteurs» en «Équipe», etc.)

Je ne voulais pas utiliser JS ni devoir désinstaller la méta-boîte d'origine et la rajouter.

J'ai commencé avec ce qui suit selon un autre thread qui répertorie le code comme suit:

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

Je suis coincé sur la partie pour "parcourir le tableau et changer les titres que vous voulez".

Quelle serait la meilleure façon d'y parvenir? Vous utilisez une boucle foreach? Ou un scénario Switch / Case? Je suis assez nouveau dans ce domaine, est-ce que quelqu'un pourrait fournir un exemple de la façon d'y parvenir?

Mise à jour: l'exemple de Stephen Harris fonctionne pour Core Meta (merci!):

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

Mise à jour: corrigé pour les méta personnalisées

Pour que cela fonctionne avec vos méta personnalisées, changez votre add_action comme suit afin qu'il déclenche votre code de titre de modification après l'ajout de la méta-boîte:

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

Réponses:


11

Réponse améliorée

J'ai décidé de revisiter cette question après avoir réalisé à quel point elle est inutilement hacky.

La meilleure solution consiste à supprimer la métabox, puis à la rajouter en spécifiant un titre alternatif. Voici un exemple pour le 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', __('Team Member','wpse39446_domain'), 'post_author_meta_box', 'post', 'core', 'high' );
}

Remarque: Si vous effectuez cette opération pour une métabox non principale, vous devrez vous assurer que le rappel est appelé après l'ajout de la métabox en spécifiant une priorité plus élevée.


Donc, $wp_meta_boxesa beaucoup de tableaux imbriqués

Pour vos besoins:

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

(NB. Je ne sais pas si des arguments sont passés à cette action ...:

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
}

En fait, la structure du tableau est plus compliquée. J'ai mis à jour mon code. J'ai testé cela et cela fonctionne: D (assurez-vous simplement de changer 'post_type'pour le type de message, par exemple «post»).

La structure du tableau est vaguement post-type> priorité> core> ID de la metabox.

Si vous voulez voir le tableau par vous-même, à l'intérieur de votre fonction, utilisez:

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

Stephen Harris, je pourrais t'embrasser. Cela a fonctionné comme un charme, merci beaucoup! J'étais en train de compliquer mon code, semble-t-il, lorsque j'essayais de résoudre ce problème par moi-même.
Syrehn

Heureux d'aider: D
Stephen Harris

Hmm ... J'ai essayé avec une meta box personnalisée que j'ai créée "projectinfo" était l'identifiant unique de la metabox alors j'ai essayé ... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; mais ça n'a pas marché, ai-je raté quelque chose ici?
Syrehn

Essayez echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');après avoir modifié le titre pour voir ce qui ne va pas. Je suppose que ce n'est pas «essentiel»: D
Stephen Harris

J'ai ajouté cela, la méta personnalisée n'apparaît pas dans la liste. Vous avez donc probablement raison de dire que ce n'est pas un «noyau».
Syrehn

2

Je sais que c'est une vieille question, mais il y a un crochet de filtre pour cela. Vous ajouteriez à votre thème functions.phpou plugin de fonctionnalité personnalisée une fonction accrochée àpost_type_labels_{$post_type}

Prenons par exemple le fait que nous avons un type de publication personnalisé appelé bandet que nous souhaitons remplacer les libellés des images par "Band Photo". La fonction ressemblerait à ceci:

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

réf: https://developer.wordpress.org/reference/hooks/post_type_labels_post_type/


1

Afaik, votre meilleur pari serait d'accrocher une fonction au crochet juste avant la création de la 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

D'accord ... C'est un peu hacky, mais je pensais que c'était intelligent. Fondamentalement, vous utilisez simplement les fonctions de langage intégrées pour changer ce que vous aimez. Tant que vous connaissez le ou les mots d'origine que vous souhaitez modifier et qu'ils ont été correctement appelés dans le code avec quelque chose comme __('text in here'), vous pouvez les changer en ce que vous voulez.

Je l'ai utilisé une fois pour changer la méta-boîte "Extraits" en un nom différent (avec la description à l'intérieur) parce que mon thème l'a utilisé pour des morceaux de texte extrêmement petits. Regarde:

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

En fait, je n'étais pas le seul à y penser. Surprise. Voici un article discutant de la même idée , avec une méthode différente d'utilisation de gettext.


0

Depuis WordPress 4.4, l'argument $ screen peut être un tableau qui simplifie considérablement les ajouts ou les modifications de masse des métadonnées.

Le code suivant change le titre de la méta-boîte «Auteur» en «Éditeur» sur les pages, les publications, les pièces jointes et tous les types de publication personnalisés, quel que soit le nombre ajouté ou lorsqu'ils sont ajoutés à votre site.

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

C'est un peu hacky, mais pour ceux qui ont besoin d'une solution CSS simple, utilisez ceci:

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

Remplacez simplement votre-metabox-id par le vôtre. :)

(note: j'ajoute normalement un admin.css via functions.php, c'est là que je contrôle certains styles d'administration wp)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.