Есть ли способ отключить возможность добавления нового сообщения в пользовательский тип публикации в WordPress (3.0)? Я просмотрел метки и аргументы, но не могу найти ничего похожего на такую функцию.
WordPress: отключить "Добавить новое" в пользовательском типе сообщения
Ответ 1
Полный кредит Симусу Лихи
Существует мета-функция
create_posts
, которая задокументирована здесь и используется WordPress для проверки перед вставкой различных кнопок и ссылок "Добавить новый". В пользовательском объявлении типа записи добавьтеcapabilities
(не путать сcap
), а затем установите его наfalse
, как показано ниже.register_post_type( 'custom_post_type_name', array( 'capability_type' => 'post', 'capabilities' => array( 'create_posts' => 'do_not_allow', // false < WP 4.5, credit @Ewout ), 'map_meta_cap' => true, // Set to 'false', if users are not allowed to edit/delete existing posts ));
Возможно, вы также захотите установить
map_meta_cap
наtrue
. Без этого вы больше не сможете получить доступ к страницам редактирования сообщений.
Могу ли я спросить, почему вы хотите это сделать?
Сначала я бы предложил изменить возможности для вашего пользовательского типа поста, но я не думаю, что есть такой, который ограничивает тех, кто может добавлять посты, а только тех, кто может их редактировать или публиковать.
Это выглядит немного грязно, но вы можете попробовать сбросить элемент в глобале $submenu
;
function hide_add_new_custom_type()
{
global $submenu;
// replace my_type with the name of your post type
unset($submenu['edit.php?post_type=my_type'][10]);
}
add_action('admin_menu', 'hide_add_new_custom_type');
Ответ 2
Существует мета-функция create_posts
, которая задокументирована здесь и используется WordPress для проверки перед вставкой различных кнопок и ссылок "Добавить новый". В пользовательском объявлении типа записи добавьте capabilities
(не путать с cap
), а затем установите его на false
, как показано ниже.
register_post_type( 'custom_post_type_name', array(
'capability_type' => 'post',
'capabilities' => array(
'create_posts' => false, // Removes support for the "Add New" function ( use 'do_not_allow' instead of false for multisite set ups )
),
'map_meta_cap' => true, // Set to 'false', if users are not allowed to edit/delete existing posts
));
Возможно, вы также захотите установить map_meta_cap
на true
. Без этого вы больше не сможете получить доступ к страницам редактирования сообщений.
Ответ 3
Комбинации вышеупомянутых решений работают для сокрытия ссылок (хотя кто-то может довольно легко ввести URL-адрес напрямую.
упомянутое решение @3pepe3 опирается на get_post_type()
, которое будет работать только в том случае, если в списке уже есть запись. Если сообщений нет, функция не будет ничего возвращать, и будет доступна ссылка "Добавить новый". Альтернативный метод:
function disable_new_posts() {
// Hide sidebar link
global $submenu;
unset($submenu['edit.php?post_type=CUSTOM_POST_TYPE'][10]);
// Hide link on listing page
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');
ОБНОВЛЕНИЕ: для предотвращения прямого доступа, если кто-то вводит URL-адрес в себя: https://wordpress.stackexchange.com/a/58292/6003
Ответ 4
В wordpress и для всех типов сообщений существует возможность create_posts. Эта возможность используется в нескольких основных файлах:
- сор-админ\редактировать форм-advanced.php
- сор-админ\edit.php
- сор-админ\включает\post.php
- сор-админ\menu.php
- сор-админ\после new.php
- сор-админ\пресс-this.php
- сор-включает в себя\админ-bar.php
- сор-включает в себя\класс-сор-XMLRPC-server.php
- сор-включает в себя \post.php
Итак, если вы действительно хотите отключить эту функцию, вы должны сделать это за роль и тип сообщения. Я использую отличный плагин "" Редактор роли пользователя" для управления возможностями для каждой роли.
Но как насчет возможности create_posts? Ну, эта возможность не отображается, а также create_posts равна create_posts, поэтому мы должны исправить это и сопоставить возможности для типа сообщений.
Итак, вы можете добавить этот фрагмент кода в свой файл functions.php, и вы сможете управлять этой возможностью.
function fix_capability_create(){
$post_types = get_post_types( array(),'objects' );
foreach ( $post_types as $post_type ) {
$cap = "create_".$post_type->name;
$post_type->cap->create_posts = $cap;
map_meta_cap( $cap, 1);
}
}
add_action( 'init', 'fix_capability_create',100);
Итак, здесь мы не скрываем или не удаляем элементы меню... здесь мы удаляем возможности для пользователей (включая запросы xmlrpc).
Действие было init, а не admin_init или что-то еще, потому что init с приоритетом 100 предотвращает отображение "добавить новое" на панели администратора, боковой панели и т.д. (во всем интерфейсе wp).
Ответ 5
add_action("load-post-new.php", 'block_post');
function block_post()
{
if($_GET["post_type"] == "custom_type")
wp_redirect("edit.php?post_type=custom_type");
}
Ответ 6
Отключить создание нового сообщения для зарегистрированных пост-типов: (пример для post
и page
)
function disable_create_newpost() {
global $wp_post_types;
$wp_post_types['post']->cap->create_posts = 'do_not_allow';
//$wp_post_types['page']->cap->create_posts = 'do_not_allow';
//$wp_post_types['my-post-type']->cap->create_posts = 'do_not_allow';
}
add_action('init','disable_create_newpost');
Ответ 7
WordPress Networks: Я обнаружил, что ответ Seamus Leahy не работает, если вы вошли в систему как супер администратор сети, это не имеет значения, если пользователь не имеет возможности, сопоставлен или иным образом, когда current_user_can ($ cap) вызывается CMS. Покопавшись в ядро, я обнаружил, что вы можете сделать следующее.
register_post_type( 'custom_post_type_name', array(
'capability_type' => 'post',
'capabilities' => array(
'create_posts' => 'do_not_allow', // Removes support for the "Add New" function, including Super Admin's
),
'map_meta_cap' => true, // Set to false, if users are not allowed to edit/delete existing posts
));
принятый ответ скрывает пункт меню, но страница все еще доступна.
Ответ 8
@Стаффан Эстберг,
Это лучший способ скрыть кнопку "Добавить новую" или "Создать новую" в пользовательских почтовых сообщениях
'capability_type' => 'post',
'capabilities' => array( 'create_posts' => false ),
'map_meta_cap' => true,
Отключить создание нового сообщения в пользовательских типах сообщений как в меню администратора, так и над списком типа сообщения.
Ответ 9
Я нашел этот простой способ для этого. Просто введите этот код в темы function.php
.
function hd_add_buttons() {
global $pagenow;
if (is_admin()) {
if ($_GET['post_type'] == 'custom_post_type_name') {
echo '<style>.add-new-h2{display: none !important;}</style>';
}
}
}
add_action('admin_head', 'hd_add_buttons');
Ответ 10
Поскольку вопрос заключается в том, "как отключить кнопку добавления нового для настраиваемого типа записи", а не "как ограничить пользовательское редактирование настраиваемых типов записей", на мой взгляд, ответ должен состоять в том, чтобы просто скрыть кнопки с помощью css, добавив это к Файл functions.php:
add_action( 'admin_head', function(){
ob_start(); ?>
<style>
#wp-admin-bar-new-content{
display: none;
}
a.page-title-action{
display: none !important;
}
#menu-posts-MY-CUSTOM-POST-TYPE > ul > li:nth-child(3) > a{
display:none;
}
</style>
<?php ob_end_flush();
});