Cambiar el título de una caja meta

8

Estoy tratando de crear una función que me permita cambiar el título de un meta cuadro establecido (es decir, cambiar el título de Meta Box 'Autores' a 'Equipo', etc.)

No quería usar JS o tener que desarmar el meta cuadro original y volver a agregarlo.

Comencé con lo siguiente según otro hilo que enumeraba el código de esta manera:

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

Estoy atrapado en la parte para "recorrer la matriz y cambiar los títulos que desea".

¿Cuál sería la mejor manera de lograr esto? Usando un foreach para bucle? O un escenario Switch / Case? Soy bastante nuevo en esto, ¿alguien podría dar un ejemplo de cómo lograr esto?

Actualización: el ejemplo de Stephen Harris funciona para Core Meta (¡gracias!):

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

Actualización: arreglado para meta's personalizados

Para que esto funcione con sus meta personalizados, cambie su add_action de la siguiente manera para que active su código de cambio de título después de que se haya agregado el cuadro meta:

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

Respuestas:

11

Respuesta mejorada

He decidido revisar esta pregunta después de darme cuenta de lo innecesariamente hacky que es.

La mejor solución es eliminar el metabox y luego volver a agregarlo, especificando un título alternativo. Aquí hay un ejemplo para el post 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' );
}

Nota: Si está haciendo esto para un metabox no central, deberá asegurarse de que se llame a la devolución de llamada después de agregar el metabox especificando una prioridad más alta.


Entonces, $wp_meta_boxestiene muchas matrices anidadas

Para sus propósitos:

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

(Nota: no estoy seguro de si se pasa algún argumento a esa acción ...:

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 realidad, la estructura de la matriz es más complicada. He actualizado mi código. He probado esto y funciona: D (solo asegúrate de cambiar 'post_type'al tipo de publicación, por ejemplo, 'publicación').

En términos generales, la estructura de la matriz es post-tipo> prioridad> núcleo> ID de metabox.

Si desea ver la matriz por sí mismo, use su función:

echo '<pre>';
print_r($wp_meta_boxes);
echo '</pre>';
wp_die('');
Stephen Harris
fuente
Stephen Harris, podría besarte. Eso funcionó de maravilla, ¡muchas gracias! Parece que estaba complicando mi código cuando intentaba solucionarlo por mi cuenta.
Syrehn
Me alegra ayudar: D
Stephen Harris
Hmm ... Intenté esto con un meta box personalizado que creé "projectinfo" era la identificación única de metabox, así que intenté ... $wp_meta_boxes['post']['side']['core']['projectinfo']['title']= 'New Title'; pero eso no funcionó, ¿me perdí algo aquí?
Syrehn el
Intente echo '<pre>'; print_r($wp_meta_boxes); echo '</pre>'; wp_die('');después de haber cambiado el título para ver qué salió mal. Mi conjetura es que no es 'núcleo': D
Stephen Harris
Agregué que el meta personalizado no aparece en la lista. Entonces es probable que tenga razón, no es un "núcleo".
Syrehn
2

Sé que esta es una vieja pregunta, pero hay un gancho de filtro para esto. Agregaría al complemento de tema functions.phpo funcionalidad personalizada una función conectada apost_type_labels_{$post_type}

Tomemos, por ejemplo, que tenemos un tipo de publicación personalizado llamado bandy queremos cambiar las etiquetas de imagen destacadas a "Band Photo". La función se vería así:

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/

Guisante
fuente
1

Afaik, su mejor opción sería conectar una función al gancho justo antes de la creación de la caja 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);
emperador
fuente
0

De acuerdo ... Esto es un poco hacky, pero pensé que era inteligente. Básicamente, solo usa las funciones de lenguaje incorporadas para cambiar lo que le gusta. Siempre que conozca la palabra o palabras originales que desea cambiar y que se hayan llamado correctamente en el código con algo como __('text in here'), puede cambiarlas a lo que quiera.

Una vez lo usé para cambiar el meta cuadro "Extractos" a un nombre diferente (junto con la descripción dentro) porque mi tema lo usó para fragmentos de texto extremadamente pequeños. Echar un vistazo:

/**
 * 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 resultado, no fui el único en pensar en esto. Sorpresa. Aquí hay un artículo que discute la misma idea , con un método diferente de usar gettext.

Don
fuente
0

Desde WordPress 4.4, $ screen arg puede ser una matriz que simplifica enormemente las adiciones o alteraciones masivas de meta cuadros.

El siguiente código cambia el título del metacuadro "Autor" a "Editor" en las páginas, publicaciones, archivos adjuntos y todos los tipos de publicaciones personalizadas, sin importar cuántas se agreguen o cuándo se agreguen a su sitio.

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

Esto es un poco extraño, pero para cualquiera que necesite una solución CSS simple, use esto:

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

Simplemente reemplace your-metabox-id con el suyo. :)

(nota: normalmente agrego un admin.css a través de functions.php, ahí es donde controlo algunos estilos de administración de wp)

un.pez.vivo
fuente