web-dev-qa-db-fra.com

Changer le titre d'une méta-boîte

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-case 'Authors' en 'Équipe', etc.)

Je ne voulais pas utiliser JS ou avoir à désactiver la méta-boîte d'origine et à la rajouter.

J'ai commencé avec les éléments suivants selon un autre thread qui a répertorié 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 bloqué sur la partie pour "parcourir le tableau et changer les titres que vous voulez".

Quel serait le meilleur moyen d'y parvenir? Utiliser une foreach pour faire une boucle? Ou un scénario Switch/Case? Je suis assez nouveau dans ce domaine. Quelqu'un pourrait-il donner un exemple de la manière de procéder?

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és

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 changement après l'ajout de la boîte de méta:

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

Réponse améliorée

J'ai décidé de revenir sur cette question après avoir réalisé à quel point c'est un hacky inutile.

La meilleure solution consiste à supprimer le metabox, puis à le rajouter, en spécifiant un titre alternatif. Voici un exemple pour le post-type.

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 un métabox non essentiel, vous devez vous assurer que le rappel est appelé après l'ajout du métabox en spécifiant une priorité plus élevée.


Donc, $wp_meta_boxes a 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 pour 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 réalité, 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' en type de message, par exemple 'post').

En gros, la structure de la matrice est post-type> priority> core> metabox ID.

Si vous voulez voir le tableau vous-même, utilisez dans votre fonction:

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

Je sais que c'est une vieille question, mais il existe un crochet de filtre pour cela. Vous ajouteriez à functions.php ou plug-in de fonctionnalités personnalisées de votre thème une fonction liée à post_type_labels_{$post_type}

Prenons, par exemple, un type de message personnalisé appelé band et que nous souhaitons modifier les étiquettes d’image sélectionnée pour "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 );

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

2
Pea

Après tout, votre meilleur pari serait d’accrocher une fonction au crochet juste avant la création de la méta-boîte:

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

D'accord ... C'est un peu bizarre, mais j'ai en quelque sorte pensé que c'était intelligent. En gros, vous utilisez simplement les fonctions de langage intégrées pour changer ce que vous aimez. Tant que vous connaissez le mot original ou les mots que vous souhaitez modifier et que ceux-ci ont été correctement appelés dans le code avec quelque chose comme __('text in here'), vous pouvez les modifier comme bon vous semble.

Une fois, je l'ai utilisé pour changer la méta-boîte "Extraits" en un autre nom (avec la description à l'intérieur), car mon thème l'utilisait pour de très petits morceaux de texte. 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 fin de compte, je n'étais pas le seul à penser à cela. Surprise. Voici un article traitant de la même idée , avec une méthode différente d’utilisation de gettext.

0
Don

Depuis WordPress 4.4, l'argument $ screen peut être un tableau, ce qui simplifie grandement les ajouts ou les modifications en masse de boîtes à méta.

Le code suivant modifie le titre de la boîte méta "Auteur" en "Éditeur" dans les pages, les publications, les pièces jointes et tous les types de publication personnalisés, quel que soit leur nombre ou leur ajout à 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
Slam

C'est un peu compliqué, 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;
}

Il suffit de remplacer le your-metabox-id par le vôtre. :)

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

0
un.pez.vivo