Замена заголовка в таблице списка админ-панели

8 июл. 2014 г., 16:20:22
Просмотры: 22.8K
Голосов: 11

Вот моя ситуация: я пытаюсь отфильтровать содержимое столбца заголовка в таблице редактирования моего пользовательского типа записей, но у меня не получается.

Вот что я пробовал:

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> в моем заголовке. Может кто-нибудь помочь, пожалуйста?

0
Все ответы на вопрос 3
6
27

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. Замена заголовка колонки таблицы

Кроме того, вы не используете и не перезаписываете заголовок колонки таблицы. Ниже приведен примерный код, как это сделать:

  1. На основе хука 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;  
    }  
    
  2. На основе хука 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 );
}
8 июл. 2014 г. 17:07:31
Комментарии

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

Pipo Pipo
8 июл. 2014 г. 17:14:09

Отлично!! Это именно то, что я хотел сделать. Большое спасибо!

Pipo Pipo
8 июл. 2014 г. 17:57:45

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

Mohammad Fareed Mohammad Fareed
1 июн. 2017 г. 10:17:28

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

Nicolai Grossherr Nicolai Grossherr
1 июн. 2017 г. 13:26:26

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

user3445853 user3445853
26 нояб. 2019 г. 11:16:22

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

Nicolai Grossherr Nicolai Grossherr
26 нояб. 2019 г. 15:26:19
Показать остальные 1 комментариев
3

Я только что сделал нечто подобное несколько часов назад, поэтому мой код, возможно, не самый оптимальный, но для достижения этой цели вам понадобятся два хука. Судя по вашему коду, вы используете пользовательский тип записи, поэтому эти два хука будут такими:

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);
8 июл. 2014 г. 17:17:07
Комментарии

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

Pipo Pipo
8 июл. 2014 г. 17:28:46

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

Matt Royal Matt Royal
8 июл. 2014 г. 17:37:52

Смотри мой переработанный ответ, не нужно создавать новый столбец. @Etienne

Nicolai Grossherr Nicolai Grossherr
8 июл. 2014 г. 17:44:29
0

Замена колонок

Вот пример, который полностью заменяет колонки, а не добавляет или удаляет отдельные.

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

30 апр. 2018 г. 15:16:14