9 ответов:
полный кредит Шеймус Леги
есть возможность мета
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глобальные;
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');
есть возможность мета
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. Эта возможность используется в нескольких основных файлов :
- wp-admin\edit-form-advanced.php
- wp-admin\edit.php
- wp-admin\includes\post.php
- wp-admin\menu.php
- wp-admin\post-new.php
- wp-admin\press-this.php
- wp-включает\admin-bar.php
- WP-включает в себя класс-РГ-файла xmlrpc-сервера\.php
- wp-включает\post.php
поэтому, если вы действительно хотите отключить эту функцию, вы должны сделать это для каждой роли и для каждого сообщения тип. Я использую плагин "Редактор Ролей Пользователей " для управления возможностями каждой роли.
но как насчет возможности create_posts? Ну, эта возможность не отображается, а также create_posts равна create_posts, поэтому мы должны исправить это и сопоставить возможность для каждого типа сообщения.
Так что вы можете добавить этот кусок кода в вашей функции.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).
действие было инициализировано, а не admin_init или что-то еще, потому что init с приоритетом 100 предотвращает отображение "добавить новое" на панели администратора, боковой панели и т. д. (Во всем интерфейсе wp).
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"); }
WordPress Сети:
Я нашел это ответ Симуса Лихи не работаетесли вы вошли в систему как суперадминистратор сети, не имеет значения, если у пользователя нет возможности, сопоставленной или иным образом, когда 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 ));
The принято отвечать скрывает пункт меню, но страница по-прежнему доступна.
@ Staffan Estberg,
Это лучший способ скрыть кнопку Добавить новый или создать новый в пользовательских postypes
'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');
Comments