Alterar o título de uma caixa de meta

8

Estou tentando criar uma função que me permita alterar o título de uma meta box estabelecida (ou seja, alterar o título da Meta Box 'Authors' para 'Team' etc.)

Eu não queria usar o JS ou precise desmarcar a meta box original e adicioná-la novamente.

Comecei com o seguinte, conforme outro segmento que listava o código da seguinte maneira:

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

Estou preso na parte de "percorrer a matriz e alterar os títulos que você deseja".

Qual seria a melhor maneira de conseguir isso? Usando um foreach para fazer um loop? Ou um cenário de Switch / Case? Eu sou bastante novo nisso, alguém poderia dar um exemplo de como fazer isso?

Atualização: O exemplo de Stephen Harris funciona para o Core Meta (obrigado!):

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

Atualização: corrigida para Meta personalizado

Para que isso funcione com as meta personalizadas, altere sua add_action da seguinte maneira, para que ele ative seu código de título de alteração após a adição da meta box:

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

Respostas:

11

Resposta melhorada

Decidi revisar essa questão depois de perceber o quão desagradável é hacky.

A melhor solução é remover o metabox e adicioná-lo novamente, especificando um título alternativo. Aqui está um exemplo para o pós-tipo de postagem.

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 você estiver fazendo isso para uma metabox não essencial, precisará garantir que o retorno de chamada seja chamado após a adição da metabox, especificando uma prioridade mais alta.


Então, $wp_meta_boxestem muitas matrizes aninhadas

Para seus propósitos:

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

(NB. Não tenho certeza se algum argumento foi passado para essa ação ...:

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
}

Na verdade, a estrutura da matriz é mais complicada. Eu atualizei meu código. Eu testei isso e funciona: D (Apenas certifique-se de mudar 'post_type'para o tipo de post, por exemplo, 'post').

Vagamente, a estrutura da matriz é pós-tipo> prioridade> núcleo> ID metabox.

Se você deseja ver a matriz por si mesmo, dentro da sua função use:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');
Stephen Harris
fonte
Stephen Harris, eu poderia te beijar. Isso funcionou como um encanto, muito obrigado! Eu estava complicando meu código, parece que estava tentando resolver isso sozinho.
Syrehn
Fico feliz em ajudar: D
Stephen Harris
Hmm ... Eu tentei isso com uma meta box personalizada que eu criei "projectinfo" era o ID exclusivo da metabox, então tentei ... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; mas isso não funcionou, perdi algo aqui?
Syrehn
Experimente echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');Depois de alterar o título para ver o que deu errado. Meu palpite é que não é "essencial": D
Stephen Harris
Eu adicionei que, a meta personalizada não aparece na lista. Então você provavelmente está correto, não é um 'núcleo'.
Syrehn
2

Eu sei que essa é uma pergunta antiga, mas existe um gancho de filtro para isso. Você adicionaria ao plugin de funcionalidade personalizadafunctions.php ou do seu tema uma função conectada apost_type_labels_{$post_type}

Tomemos, por exemplo, que temos um tipo de postagem personalizado chamado bande queremos alterar os rótulos das imagens em destaque para "Band Photo". A função ficaria assim:

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/

Ervilha
fonte
1

No entanto, sua melhor aposta seria conectar uma função ao gancho imediatamente antes da criação da 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);
kaiser
fonte
0

Ok ... Isso é um pouco hacky, mas eu pensei que era inteligente. Basicamente, você apenas usa as funções de linguagem incorporadas para alterar o que você gosta. Contanto que você conheça a palavra original ou as palavras que deseja alterar e elas tenham sido adequadamente identificadas no código com algo parecido __('text in here'), você pode alterá-las para o que quiser.

Uma vez eu o usei para alterar a meta box "Trechos" para um nome diferente (junto com a descrição), porque meu tema a usava para pedaços de texto extremamente pequenos. Dar uma olhada:

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

Como se viu, não fui o único a pensar nisso. Surpresa. Aqui está um artigo discutindo a mesma idéia , com um método diferente de usar o gettext.

Don
fonte
0

Desde o WordPress 4.4, o $ screen arg pode ser uma matriz que simplifica muito as adições em massa ou alterações de meta boxes.

O código a seguir altera o título da caixa meta "Autor" para "Editor" em páginas, postagens, anexos e todos os tipos de postagem personalizados, independentemente de quantas foram adicionadas ou quando foram adicionadas ao seu 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');
}
bater
fonte
0

Isso é um pouco hacky, mas para quem precisa de uma solução CSS simples, use o seguinte:

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

Apenas substitua o seu-metabox-id pelo seu. :)

(nota: eu normalmente adiciono um admin.css através do functions.php, é onde eu controlo alguns estilos de administrador do wp)

un.pez.vivo
fonte