Есть ли способ отключить возможность добавления нового сообщения в пользовательский тип публикации в WordPress (3.0)? Я просмотрел метки и аргументы, но не могу найти ничего похожего на такую функцию.
Существует мета-возможность
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 ));
Могу ли я спросить, почему вы хотите это сделать?
Я бы сначала предложил изменить возможности для вашего настраиваемого типа сообщений, но я не думаю, что там кто-то ограничивает, кто может добавлять сообщения, но только кто может их редактировать или публиковать.
Он выглядит немного грязным, но вы можете попытаться отключить элемент в $submenu
global;
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');
Забастовкa >
Существует мета-возможность 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
));
Комбинации решений выше работают в сокрытии ссылок (хотя кто-то мог легко ввести URL-адрес напрямую.
Решение, упомянутое @PavelChernov, зависит от 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
В wordpress и для всех типов сообщений существует возможность create_posts. Эта возможность используется в нескольких основных файлах:
Итак, если вы действительно хотите отключить эту функцию, вы должны сделать это за роль и тип сообщения. Я использую отличный плагин "" Редактор роли пользователя" для управления возможностями для каждой роли.
Но как насчет возможности 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).
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
));
принятый ответ скрывает пункт меню, но страница все еще доступна.
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");
}
@Стаффан Эстберг,
Это лучший способ скрыть кнопку "Добавить новую" или "Создать новую" в пользовательских почтовых сообщениях
'capability_type' => 'post',
'capabilities' => array( 'create_posts' => false ),
'map_meta_cap' => true,
Отключить создание нового сообщения в пользовательских типах сообщений как в меню администратора, так и над списком типа сообщения.
Отключить создание нового сообщения для зарегистрированных пост-типов: (пример для 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');
Я нашел этот простой способ для этого. Просто введите этот код в темы 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');