Reemplazando el título en la tabla de lista del administrador
Aquí está mi situación: Estoy tratando de filtrar el contenido de la columna del título en mi tabla de edición de tipo de contenido personalizado pero no logro que funcione.
Esto es lo que he intentado:
add_filter('manage_edit-mycpt_columns', 'replace_title_products');
function replace_title_products() {
$oldtitle = get_the_title();
$newtitle = str_replace(array("<span class='sub-title'>", "</span>"), array("", ""),$oldtitle);
$title = esc_attr($newtitle);
return $title;
}
Solo quiero filtrar las etiquetas <span>
en mi título. ¿Podría alguien ayudarme por favor?
1. Cambiar el título del post en la columna de la lista de posts
Entendí mal lo que querías - obviamente. Puedes hacerlo así:
add_action(
'admin_head-edit.php',
'wpse152971_edit_post_change_title_in_list'
);
function wpse152971_edit_post_change_title_in_list() {
add_filter(
'the_title',
'wpse152971_construct_new_title',
100,
2
);
}
function wpse152971_construct_new_title( $title, $id ) {
//print_r( $title );
//print_r( $id );
return 'nuevo';
}
Haciendo uso del hook admin_head-$hook_suffix
.
(Aclaración: Mantengo esto porque está relacionado y es buena información)
2. Reemplazar el título de la columna de la tabla
Además no estás usando y sobrescribiendo el título de la columna de la tabla. A continuación un código de ejemplo sobre cómo hacerlo:
Basado en el hook
manage_{$this->screen->id}_columns
add_filter( 'manage_edit-post_columns', 'wpse152971_replace_column_title_method_a' ); function wpse152971_replace_column_title_method_a( $columns ) { //print_r($columns); $columns[ 'title' ] = 'nuevo título'; return $columns; }
Basado en el hook
manage_{$post_type}_posts_columns
add_filter( 'manage_post_posts_columns', 'wpse152971_replace_column_title_method_b' ); function wpse152971_replace_column_title_method_b( $posts_columns ) { //print_r($posts_columns); $posts_columns[ 'title' ] = 'nuevo título'; return $posts_columns; }
Por último pero no menos importante, el siguiente código es útil para obtener la información que necesitas:
add_action( 'admin_head', 'wpse152619_dbg_dev' );
function wpse152619_dbg_dev() {
global $pagenow;
print_r( $pagenow );
echo '<br>';
print_r( $_GET[ 'taxonomy' ] );
echo '<br>';
$current_screen = get_current_screen();
print_r( $current_screen->id );
}

Perdón, olvidé la línea de retorno en mi código... Gracias por tu respuesta pero esto no es lo que estoy intentando lograr. No quiero cambiar el nombre de la columna para el título, quiero cambiar el contenido que se devuelve en esta columna para cada publicación. Actualmente tengo: "Este es mi título <span class="sub-title">número 1</span>" para la primera fila, luego "Este es mi título <span class="sub-title">número 2</span>" para la segunda fila, etc. ¿Queda más claro lo que estoy intentando lograr?

Probé la Solución 1 1. Cambiar el título de la publicación en la columna de la lista de publicaciones
Los valores cambian, ¿Cómo puedo renombrar también la etiqueta?

@Developer ¿Te refieres al título de la columna de la tabla? Como se describe en el segundo punto.

Estaba intentando hacer lo mismo pero para un encabezado de tabla de TAXONOMÍA personalizada (que necesita ser abreviado, ya que tengo 10+). Puedes dar un nombre corto para la columna de administración 'menu_name' en su array de 'labels', pero extrañamente eso no afecta el encabezado de la tabla. Busqué mucho y este artículo seguía apareciendo, nada para taxonomías... ENTONCES: Con tu Método 2.1 =A, se puede hacer (columnas nombradas 'taxonomy-{mi_nombre_de_tax}'), con tu Método 2.2 =B solo obtienes 'title' y 'date' y columnas autoinsertadas como lo revela el print_r.

@user3445853 Bueno saberlo. A veces no hay suficiente información específica disponible, así que te dirigen a algo similar, como este hilo. Podrías hacer una pregunta orientada a taxonomías tú mismo, y luego responderte con la solución que acabas de describir en tu comentario. Para mejor comprensión o para no explicar todo desde cero, podrías enlazar aquí. Incluso hay una insignia por responder tu propia pregunta, así que está totalmente recomendado. Y harías un servicio para las personas que busquen lo mismo en el futuro.

Acabo de hacer algo similar hace unas horas, así que mi código podría no ser el mejor posible, pero necesitas usar 2 hooks para lograrlo. Por lo que vi en tu código, parece que estás usando un custom post type, estos dos hooks serían:
manage_post_type_posts_columns()
manage_post_type_posts_custom_column()
He usado el hook de filtro manage_post_type_posts_columns()
para crear una nueva columna de Título y eliminar la antigua, y luego el hook de acción manage_post_type_posts_custom_column()
para usar mi propio método para generar el nuevo contenido/título para esta columna.
Espero que esto ayude, he añadido tu código también...
// Reemplaza tu Columna de Título con la existente //
function replace_title_column($columns) {
$new = array();
foreach($columns as $key => $title) {
if ($key=='title')
$new['new-title'] = 'Nuevo Título'; // Nuestro nuevo nombre de columna
$new[$key] = $title;
}
unset($new['title']);
return $new;
}
// Reemplaza el título con tu título personalizado
function replace_title_products($column_name, $post_ID) {
if ($column_name == 'new-title') {
$oldtitle = get_the_title();
$newtitle = str_replace(array("<span class='sub-title'>", "</span>"), array("", ""),$oldtitle);
$title = esc_attr($newtitle);
echo $title;
}
}
add_filter('manage_mycpt_columns', 'replace_title_column');
add_action('manage_mycpt_custom_column', 'replace_title_products', 10, 2);

Gracias Matt. ¿Sabes si hay alguna manera de filtrar solo la columna "título" original antes de que se devuelva el contenido? Realmente no quiero crear una nueva columna de título ya que la original viene con muchas funciones (editar, edición rápida, papelera, etc.).

@Etienne Me temo que no. Quizás alguien más pueda darnos una idea sobre cómo hacer esto, a mi también me gustaría saber :-)

Reemplazar Columnas
Aquí hay un ejemplo que reemplaza completamente las columnas, en lugar de agregar y eliminar columnas específicas
function set_book_columns($columns) {
return array(
'cb' => '<input type="checkbox" />',
'title' => __('Título'),
'comments' => '<span class="vers comment-grey-bubble" title="' . esc_attr__( 'Comentarios' ) . '"><span class="screen-reader-text">' . __( 'Comentarios' ) . '</span></span>',
'date' => __('Fecha'),
'publisher' => __('Editorial'),
'book_author' =>__( 'Autor del Libro')
);
}
add_filter('manage_book_posts_columns' , 'set_book_columns');
Ver más:manage_$post_type_posts_columns
