Alterar o título de uma caixa 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 do Meta Box de 'Authors' para 'Team', etc.)

Eu não queria usar JS nem ter que desanexar a meta box original e adicioná-la novamente.

Eu comecei com o seguinte conforme outro tópico que listava o código da seguinte forma:

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

Eu estou preso na parte de "percorrer o array e mudar os títulos que você quer".

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

Atualização: O exemplo de Stephen Harris funciona para o Core Meta's (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 personalizada

Para que isso funcione com suas metatags personalizadas, altere seu add_action da seguinte maneira para que ele ative seu código de título de alteração depois que a caixa meta tiver sido adicionada:

add_action('add_meta_boxes', 'change_meta_box_titles', 999);
    
por Syrehn 19.01.2012 / 17:12

6 respostas

10

Resposta Aprimorada

Eu decidi revisitar essa questão depois de perceber o quão inusitadamente hacky ela é.

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

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

Observação: Se você estiver fazendo isso para um metabox não essencial, será necessário garantir que o retorno de chamada seja chamado depois que o metabox for adicionado, especificando uma prioridade mais alta.

Então, $wp_meta_boxes tem muitos arrays aninhados

Para seus objetivos:

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

(NB. Não tenho certeza se algum argumento é 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 alterar 'post_type' para o tipo de postagem, por exemplo, "post").

Facilmente a estrutura da matriz é do tipo pós > prioridade > core > ID do metabox.

Se você quiser ver o array por si mesmo, dentro da sua função use:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');
    
por Stephen Harris 19.01.2012 / 17:34
2

Eu sei que essa é uma pergunta antiga, mas há um gancho de filtro para isso. Você adicionaria ao functions.php ou plug-in de funcionalidade personalizada do seu tema uma função vinculada a post_type_labels_{$post_type}

Por exemplo, temos um tipo de post personalizado chamado band e queremos alterar os rótulos das imagens em destaque para "Band Photo". A função seria algo como isto:

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: enlace

    
por Pea 25.05.2017 / 22:41
1

Afaik, sua melhor aposta seria ligar uma função ao gancho antes da criação da caixa meta:

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);
    
por kaiser 19.01.2012 / 17:38
0

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

Eu usei uma vez para mudar a meta box "Excerpts" para um nome diferente (junto com a descrição dentro) porque o meu tema usava para textos extremamente pequenos. Dê 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;
}

Acontece que eu não fui o único a pensar nisso. Surpresa. Aqui está um artigo discutindo a mesma ideia , com um método diferente de usar gettext.

    
por Don 10.05.2012 / 08:11
0

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

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 quantos são adicionados ou quando são adicionados 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');
}
    
por Slam 06.08.2017 / 17:17
0

Isso é um pouco hacky, mas para qualquer pessoa que precise de uma solução CSS simples, use isto:

.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, é aí que eu controlo alguns estilos de administração do wp)

    
por un.pez.vivo 09.12.2017 / 20:40

Tags