Как удалить кнопку "Добавить новую запись" в произвольном типе записи?

22 нояб. 2014 г., 11:32:26
Просмотры: 32.1K
Голосов: 12

У меня есть много произвольных типов записей, которым нужна функция "Добавить [произвольный тип записи]", но у меня есть произвольный тип записи "О нас", и мне не нужна кнопка "Добавить новую запись" для этого типа записи. Поэтому я хочу удалить кнопку вверху, на которой написано "Добавить О нас".

Вот что я имею в виду:

Кнопка добавления новой записи в WordPress

Есть идеи, как я могу удалить эту кнопку?

0
Все ответы на вопрос 5
7
52

Более элегантное решение — отключить возможность создания записей пользовательского типа (custom_post_type):

Просто передайте параметр 'create_posts' => 'do_not_allow', в массиве capabilities при вызове функции register_post_type.

$args = array(
        'label'               => __( 'Пользовательский тип записи', 'text_domain' ),
        'description'         => __( 'Пользовательский тип записи', 'text_domain' ),
        'labels'              => $labels,
        'supports'            => array( ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'map_meta_cap'        => true,
        'capabilities' => array(
            'create_posts' => 'do_not_allow'
        )
    );
    register_post_type( 'custom_post_type', $args );
30 апр. 2015 г. 10:53:54
Комментарии

Есть ли недостатки у такого подхода? Это кажется гораздо лучшим решением, чем просто скрывать ссылки с помощью CSS.

Nick Young Nick Young
10 июн. 2015 г. 06:01:14

Подтверждаю, что это работает! Это должно быть принятым ответом, так как не использует CSS-костыли.

helgatheviking helgatheviking
3 февр. 2016 г. 18:03:11

Не работает в 4.7.2 ... Кроме того, параметр вообще не должен принимать boolean значение. Должно быть строковое значение: do_not_allow.

Michael Ecklund Michael Ecklund
27 янв. 2017 г. 20:52:59

не самое предпочтительное решение, иногда просто не должно быть возможности создавать "записи" без заранее определенного контекста. Некоторые вещи — это просто UX-конфетки, а альтернатива в виде попытки выдавать возможности на основе контекста в админке — это кошмар, который невозможно поддерживать.

Mark Kaplun Mark Kaplun
7 июл. 2017 г. 10:38:16

Есть связанный баг в WP #22895 (https://core.trac.wordpress.org/ticket/22895), из-за которого страница edit.php для CPT не отображается, если в подменю админки для CPT будет только пункт "Все записи". Обходное решение есть по ссылке https://wordpress.stackexchange.com/questions/178033/disable-posts-only-allow-to-edit-existing-pages-not-create-new-ones-create-po.

jarnoan jarnoan
11 сент. 2017 г. 10:17:55

Чтобы иметь возможность выбирать для каждой роли, кто может создавать записи CPT, нужно указать 'capabilities' => array('create_posts' => 'create_custom_post_types')), где 'custom_post_types' — это имя вашего CPT с добавленной 's'. Или второй элемент массива capability_type, если вы определили его таким образом.

jarnoan jarnoan
11 сент. 2017 г. 10:22:53

это работает в версии 4.9.4, заменя 'create_posts' => false на 'create_posts' => 'do_not_allow'. И 'capability_type' => 'custom_post_type' можно удалить, это не обязательно

diogo.abdalla diogo.abdalla
10 мар. 2018 г. 16:13:29
Показать остальные 2 комментариев
3

Пожалуйста, ознакомьтесь с кодом ниже:

function disable_new_posts() {
    // Скрываем ссылку в боковой панели
    global $submenu;
    unset($submenu['edit.php?post_type=CUSTOM_POST_TYPE'][10]);

    // Скрываем ссылку на странице списка записей
    if (isset($_GET['post_type']) && $_GET['post_type'] == 'CUSTOM_POST_TYPE') {
        echo '<style type="text/css">
        #favorite-actions, .add-new-h2, .tablenav { display:none; }
        </style>';
    }
}
add_action('admin_menu', 'disable_new_posts');
22 нояб. 2014 г. 12:10:52
Комментарии

Спасибо, действительно ценю это. Ещё один вопрос по коду: можно ли его использовать для удаления других элементов на той же странице? Например, "Поиск" справа.

Lucas Santos Lucas Santos
23 нояб. 2014 г. 13:07:39

Да, но для этого вам нужно изменить соответствующие элементы в коде.

Helping Hands Helping Hands
24 нояб. 2014 г. 07:13:27

Это больше не работает, так как выдаст ошибку "headers already sent" (заголовки уже отправлены).

ZeroNine ZeroNine
19 дек. 2020 г. 22:19:26
0

Если вы просто хотите убрать пункт Добавить новое и не используете custom_post_type, вам не следует использовать 'capability_type' => 'custom_post_type'. Лучше удалить этот код. Удачи :)

Демонстрация ниже:

array(
'labels' => $member_labels,
'has_archive' => true,
'public' => true,
'hierarchical' => true, // как страница
'rewrite' => array('slug' => 'member_pages'),
'supports' => array(
    'title',
    'editor',
    'excerpt',
    'custom-fields',
    'thumbnail',
    'page-attributes',
),
'taxonomies' => array('post_tag', 'cm_club'),
// 'capability_type' => 'custom_post_type',
'capabilities' => array(
    'create_posts' => false,
),
'map_meta_cap' => true,
)
28 нояб. 2016 г. 08:06:34
0

Отредактировал ответ @TompaLompa, так как он был неполным. Добавление create_posts => false не будет работать, если map_meta_cap не установлен в true.

Если не устанавливать этот параметр (или установить его в false), это также отключит возможность редактирования типа записи. Это связано с тем, что вам потребуется добавить edit_post для каждой роли пользователя, чтобы можно было добавлять И редактировать записи вашего типа.

Установка этого параметра задействует внутреннюю систему WordPress для обработки мета-возможностей и сделает всё автоматически, если вам не требуется более тонкий контроль над правами ролей, чем стандартные возможности WordPress.

30 июл. 2016 г. 08:43:57
0
-1

Лучший способ, который я нашел, это установить плагин add-admin-javascript и активировать его, затем перейти в настройки и добавить JavaScript. Напишите этот код в последнем поле:

$('.wrap .wp-heading-inline').remove();
$('.wrap .page-title-action').remove();
$('#wp-admin-bar-new-content').remove();
2 мар. 2018 г. 11:36:59