Existe-t-il un moyen de désactiver l'option permettant d'ajouter un nouveau message sous un type de message personnalisé dans WordPress (3.0)? J'ai examiné les étiquettes et les arguments, mais je ne trouve rien qui puisse ressembler à une telle fonctionnalité.
Il existe une méta fonctionnalité
create_posts
qui est documentée ici et est utilisée par WordPress à vérifier avant d'insérer les différents boutons et liens "Ajouter un nouveau". Dans votre déclaration de type de publication personnalisée, ajoutezcapabilities
(à ne pas confondre aveccap
), puis définissez-le surfalse
comme ci-dessous.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 ));
Vous voudrez probablement également définir
map_meta_cap
surtrue
. Sans cela, vous ne pourrez plus accéder aux pages d'édition des articles.
Puis-je vous demander pourquoi vous voulez faire cela?
J'aurais d'abord suggéré de changer les fonctionnalités de votre type de publication personnalisé, mais je ne pense pas qu'il en existe qui limitent le nombre de personnes pouvant ajouter des publications, mais uniquement qui peut éditer ou les publier .
Cela semble un peu sale, mais vous pouvez essayer de désélectionner l'élément dans le $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');
Il existe une méta fonctionnalité create_posts
qui n'est pas documentée mais qui est utilisée par WordPress pour vérifier avant d'insérer les différents boutons et liens "Ajouter un nouveau". Dans votre déclaration de type de publication personnalisée, ajoutez capabilities
(à ne pas confondre avec cap
), puis définissez-la sur false
comme ci-dessous.
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
));
Les combinaisons des solutions ci-dessus masquent les liens (bien que quelqu'un puisse facilement taper directement l'URL).
La solution mentionnée @PavelChernov repose sur get_post_type()
qui ne fonctionnera que s’il existe déjà une publication dans la liste. S'il n'y a pas de messages, la fonction ne renverra rien et le lien "Ajouter un nouveau" sera disponible. Une méthode alternative:
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');
EDIT: pour empêcher un accès direct si quelqu'un tape l'URL lui-même: https://wordpress.stackexchange.com/a/58292/6003
Dans wordpress et pour tous les types de publication, il existe la possibilité create_posts. Cette fonctionnalité est utilisée dans plusieurs fichiers de base:
Donc, si vous voulez vraiment désactiver ce fichier, vous devez le faire par rôle et par type de message . J'utilise l'excellent plugin " User Role Editor " pour gérer les fonctionnalités par rôle.
Mais qu'en est-il de la capacité create_posts? Eh bien, cette fonctionnalité n’est pas mappée et create_posts est égale à create_posts. Nous devons donc résoudre ce problème et mapper la capacité par type de publication.
Ainsi, vous pouvez ajouter ce morceau de code dans votre functions.php et le gérer.
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);
Donc, ici, nous ne masquons ni ne supprimons les éléments de menu ... nous supprimons ici la capacité pour les utilisateurs (y compris les requêtes xmlrpc).
L'action était init et non admin_init ou quoi que ce soit d'autre car init à la priorité 100 empêche l'affichage de "add new" sur la barre d'administration, la barre latérale, etc. (dans toute l'interface 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");
}
Réseaux WordPress: J'ai trouvé que la réponse de Seamus Leahy ne fonctionne pas Si vous êtes connecté en tant que super administrateur du réseau, peu importe si l'utilisateur n'a pas la capacité, mappée ou autre, lorsque current_user_can ($ cap) est appelé par le CMS. En creusant dans le noyau, j'ai trouvé que vous pouvez faire ce qui suit.
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
));
réponse acceptée masque l'élément de menu, mais la page est toujours accessible.
@ Staffan Estberg,
C’est le meilleur moyen de masquer le bouton Ajouter un nouveau ou Créer un nouveau dans les postypes personnalisés.
'capability_type' => 'post',
'capabilities' => array( 'create_posts' => false ),
'map_meta_cap' => true,
Il désactive la création de nouvelles publications dans des types de publications personnalisées des deux côtés du menu admin et au-dessus de la liste des publications.
Désactive la création d'un nouveau message pour les types de message enregistrés: (exemple pour post
et 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');
register_post_type( 'custom_post_type_name', array(
'capability_type' => 'post',
'capabilities' => array(
'create_posts' => false, // Removes support for the "Add New" function
),
'map_meta_cap' => true, // Set to `false`, if users are not allowed to edit/delete existing posts
));
J'espère que cela vous aidera. Merci beaucoup !
J'ai trouvé ce moyen le plus simple pour cela. Ajoutez simplement ce code dans le function.php
du thème.
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');