Замена заголовка в таблице списка админ-панели
Вот моя ситуация: я пытаюсь отфильтровать содержимое столбца заголовка в таблице редактирования моего пользовательского типа записей, но у меня не получается.
Вот что я пробовал:
add_filter('manage_edit-mycpt_columns', 'replace_title_products');
function replace_title_products() {
// Получаем текущий заголовок
$oldtitle = get_the_title();
// Удаляем span теги из заголовка
$newtitle = str_replace(array("<span class='sub-title'>", "</span>"), array("", ""),$oldtitle);
// Экранируем заголовок
$title = esc_attr($newtitle);
return $title;
}
Я просто хочу отфильтровать теги <span>
в моем заголовке. Может кто-нибудь помочь, пожалуйста?
1. Изменение заголовка записи в колонке списка записей
Я неправильно понял, что вам нужно - очевидно. Вы можете сделать это так:
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 'новый';
}
Используя хук admin_head-$hook_suffix
.
(Примечание: Оставляю это, так как информация связана и полезна)
2. Замена заголовка колонки таблицы
Кроме того, вы не используете и не перезаписываете заголовок колонки таблицы. Ниже приведен примерный код, как это сделать:
На основе хука
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' ] = 'новый заголовок'; return $columns; }
На основе хука
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' ] = 'новый заголовок'; return $posts_columns; }
И последнее, но не менее важное: следующий код полезен для получения нужной вам информации:
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 );
}

Извините, я забыл добавить строку return в своем коде... Спасибо за ответ, но это не то, чего я пытаюсь достичь. Я не хочу менять название колонки для заголовка, я хочу изменить содержимое, которое возвращается в этой колонке для каждого поста. Сейчас у меня: "This my title <span class="sub-title">number 1</span>" для первой строки, затем "This my title <span class="sub-title">number 2</span>" для второй строки и т.д. Теперь понятнее, чего я пытаюсь достичь?

Я попробовал Решение 1 1. Change post title in post list column
Значения изменяются, но как я могу также переименовать метку (Label)?

@Разработчик Вы имеете в виду заголовок столбца таблицы? Как описано во втором пункте.

Я пытался сделать то же самое, но для заголовка таблицы пользовательской ТАКСОНОМИИ (который нужно сократить, так как у меня их 10+). Можно задать сокращенное название для колонки админки 'menu_name' в массиве 'labels', но, что странно, это не влияет на заголовок таблицы. Я долго искал, и эта статья постоянно всплывала, но ничего по таксономиям... ИТАК: С вашим Методом 2.1 =A это можно сделать (колонки называются 'taxonomy-{my_tax_name}'), с вашим Методом 2.2 =B вы получаете только 'title', 'date' и самостоятельно добавленные колонки, как показывает print_r.

@user3445853 Полезно знать. Иногда не хватает конкретной информации, поэтому приходится обращаться к чему-то похожему, как в этой теме. Вы могли бы задать вопрос, ориентированный на таксономии, и затем дать на него ответ, который вы только что изложили в своем комментарии. Для лучшего понимания или чтобы не объяснять все с нуля, можно сослаться на эту тему. Есть даже значок за ответ на свой собственный вопрос, так что это только приветствуется. И вы окажете услугу людям, которые будут искать то же самое в будущем.

Я только что сделал нечто подобное несколько часов назад, поэтому мой код, возможно, не самый оптимальный, но для достижения этой цели вам понадобятся два хука. Судя по вашему коду, вы используете пользовательский тип записи, поэтому эти два хука будут такими:
manage_post_type_posts_columns()
manage_post_type_posts_custom_column()
Я использовал фильтр manage_post_type_posts_columns()
для создания новой колонки с заголовком и удаления старой, а затем хук действия manage_post_type_posts_custom_column()
для реализации собственного метода генерации нового содержимого/заголовка для этой колонки.
Надеюсь, это поможет. Вот ваш код с моими изменениями...
// Заменяем стандартную колонку Title на свою //
function replace_title_column($columns) {
$new = array();
foreach($columns as $key => $title) {
if ($key=='title')
$new['new-title'] = 'Новый заголовок'; // Название новой колонки
$new[$key] = $title;
}
unset($new['title']);
return $new;
}
// Заменяем заголовок на пользовательский
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);

Спасибо, Мэтт. Ты не знаешь, есть ли способ просто отфильтровать исходный столбец "title" до того, как контент будет возвращен? Я не очень хочу создавать новый столбец заголовков, так как оригинальный идет с множеством функций (редактирование, быстрое редактирование, корзина и т.д.).

@Etienne Боюсь, что нет. Может, кто-то еще подскажет нам, как это можно сделать, я бы тоже хотел узнать :-)

Замена колонок
Вот пример, который полностью заменяет колонки, а не добавляет или удаляет отдельные.
function set_book_columns($columns) {
return array(
'cb' => '<input type="checkbox" />',
'title' => __('Название'),
'comments' => '<span class="vers comment-grey-bubble" title="' . esc_attr__( 'Комментарии' ) . '"><span class="screen-reader-text">' . __( 'Комментарии' ) . '</span></span>',
'date' => __('Дата'),
'publisher' => __('Издатель'),
'book_author' =>__( 'Автор книги')
);
}
add_filter('manage_book_posts_columns' , 'set_book_columns');
Подробнее: manage_$post_type_posts_columns
