WordPress: отключить "Добавить новый" на пользовательский тип записи



есть ли способ отключить опцию добавления нового сообщения под пользовательским типом сообщения в WordPress (3.0)? Я просмотрел ярлыки и аргументы, но не могу найти ничего, что напоминало бы такую функцию.

769   9  

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. Эта возможность используется в нескольких основных файлов :

  1. wp-admin\edit-form-advanced.php
  2. wp-admin\edit.php
  3. wp-admin\includes\post.php
  4. wp-admin\menu.php
  5. wp-admin\post-new.php
  6. wp-admin\press-this.php
  7. wp-включает\admin-bar.php
  8. WP-включает в себя класс-РГ-файла xmlrpc-сервера\.php
  9. 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

    Ничего не найдено.