Встановіть параметри екрана адміністратора за замовчуванням та Порядок метабокса


28

Я відчайдушно шукаю якийсь спосіб (будь-яким способом) встановити за замовчуванням "параметри екрана" та замовити метабокс через файл function.php. хтось має допомогу, яку він може надати тут?


Оновлення 2014 року: Для тих, хто просто потребує переупорядкування мета-вікон, дивіться відповідь Nabil нижче .
rinogo

Відповіді:


23

Встановлення порядку мета-вікон на сторінках редагування публікацій

Вам потрібно буде вийняти метаполя і знову додати їх у потрібному порядку.

Щоб вимкнути метабокси: (налаштуйте під свої потреби, подивіться ідентифікатор метабокса в коді html, щоб дізнатися, яке ім'я слід використовувати як перший параметр функцій)

function my_remove_meta_boxes() {

    remove_meta_box('postcustom', 'post', 'core');

    remove_meta_box('commentsdiv', 'post', 'core');

    ...
}

add_action( 'admin_menu', 'my_remove_meta_boxes' );

Після видалення їх можна використовувати функцію add_meta_box, щоб додати їх на нові позиції: http://codex.wordpress.org/Function_Reference/add_meta_box . Порядок мета-полів залежить від порядку, в якому ви викликаєте функцію add_meta_box. Напр .: із наведеним нижче фрагментом коду мета-поле коментарів буде перед мета-полем спеціальних полів.

function my_add_meta_boxes( $post_type, $post ) {
    if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
        add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');

    if ( post_type_supports($post_type, 'custom-fields') )
        add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', $post_type, 'normal', 'core');

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

Ви можете подивитися файл wp-admin / edit-form-advanced.php

Встановлення заголовків стовпців на сторінці списку публікацій

Вам потрібно використовувати управління фільтрами _ {$ post_type} _posts_column. Наприклад: наступний фрагмент видалить стовпець коментарів.

function my_remove_columns( $posts_columns ) {
    unset( $posts_columns['comments'] );

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Налаштування результатів за замовчуванням для відображення на сторінці списку публікацій

Використовуйте фільтри 'редагувати _ {$ post_type} _per_page' та 'edit_posts_per_page'.

function my_edit_post_per_page( $per_page, $post_type ) {

    $edit_per_page = 'edit_' . $post_type . '_per_page';
    $per_page = (int) get_user_option( $edit_per_page );
    if ( empty( $per_page ) || $per_page < 1 )
        $per_page = 1;

    return $per_page;
}

add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );

Щоб націлити на певний тип публікації:

  • використовувати, add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );наприклад, add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );для публікацій, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );для сторінок.

  • або використовувати умову у межах своєї функції. наприклад:

    функція my_edit_post_per_page ($ per_page, $ post_type) {

    if( $post_type == 'post' ) {
        $edit_per_page = 'edit_' . $post_type . '_per_page';
        $per_page = (int) get_user_option( $edit_per_page );
        if ( empty( $per_page ) || $per_page < 1 )
            $per_page = 1;
    }
    
    
    return $per_page;

Вибачте, можливо, я не пояснив себе правильно. Я мав на увазі мета-поля на сторінці редагування публікацій в області адміністратора, а також встановив за замовчуванням кількість публікацій для відображення на сторінці списку публікацій адміністратора.
NetConstructor.com

1
технічно це не питання, це справді 2 питання?
Том Дж. Ноуелл

Я змінив свою відповідь. Повідомте мене, якщо вам потрібно більше деталей.
sorich87

@ sorich87 дякую за вашу відповідь, однак, наскільки я пам’ятаю, не було способу визначити точний порядок кожної метабокси чи був там? Можливо, я повинен бути трохи більш конкретним. Я в основному шукаю різні фрагменти коду, які дозволяють мені заздалегідь встановити різні параметри для всіх користувачів, не входячи в кожен обліковий запис. Приклади: встановлення точного порядку метаполев на сторінках редагування публікацій, встановлення того, який заголовок стовпців відображатиметься на сторінці списку публікацій, встановлення результатів за замовчуванням для відображення на сторінці списку публікацій ... подібних речей. Заздалегідь спасибі.
NetConstructor.com

Я змінив свою відповідь.
sorich87

9

У наступному прикладі, замініть {CPT}з ім'ям поста типу, як post, page, book, event, imaginary, foobar... Так що якщо у вас є тип запису з ім'ям event, вам потрібно буде додати фільтр для get_user_option_meta-box-order_event.

add_filter( 'get_user_option_meta-box-order_{CPT}', 'metabox_order' );
function metabox_order( $order ) {
    return array(
        'normal' => join( 
            ",", 
            array(       // vvv  Arrange here as you desire
                'customdiv-{CPT}',
                'authordiv',
                'slugdiv',
            )
        ),
    );
}

Примітки:

  • Поряд з normal, ви можете також мати sideіadvanced
  • Значення є розділеними комами розділовими кодами, їх можна схопити, переглянувши вихідний код сторінки або ви можете здогадатися
  • Будь-який метабокс, який не включений у ваш спеціальний порядок, буде доданий автоматично в кінці списку.

1
Мене дещо збентежила {CPT}номенклатура; щоб уточнити, якщо у вас назва імені посади event, вам потрібно буде додати фільтр дляget_user_option_meta-box-order_event .
rinogo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.