Existe-t-il un moyen de désactiver l'option d'ajout d'un nouvel article sous un Custom Post Type dans WordPress (3.0) ? J'ai cherché dans les étiquettes et les arguments mais je n'ai rien trouvé qui ressemble à une telle fonctionnalité.
Réponses
Trop de publicités?Il existe une méta-capacité create_posts
c'est-à-dire documenté ici et est utilisé par WordPress pour vérifier avant d'insérer les différents boutons et liens "Ajouter un nouveau". Dans la déclaration de votre type d'article personnalisé, ajoutez capabilities
(à ne pas confondre avec cap
) et de le régler 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
));
Vous voudrez probablement définir map_meta_cap
a true
également. Sans cela, vous ne pourrez plus accéder aux pages d'édition des articles.
Les combinaisons des solutions ci-dessus permettent de masquer les liens (bien que quelqu'un puisse facilement taper l'URL directement).
En solution mentionnée @3pepe3 s'appuie sur get_post_type()
ce qui ne fonctionnera que s'il y a déjà un message dans la liste. S'il n'y a pas d'articles, la fonction ne renverra rien et le lien "Ajouter un nouvel article" 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 l'accès direct si quelqu'un tape l'URL lui-même : https://wordpress.stackexchange.com/a/58292/6003
Puis-je vous demander pourquoi vous voulez faire cela ?
J'aurais d'abord suggéré de modifier les capacités de votre type d'article personnalisé, mais je ne pense pas qu'il y en ait un qui limite le nombre de personnes qui peuvent le faire. ajouter les messages, mais seulement qui peut les modifier ou les publier les.
Cela semble un peu sale, mais vous pourriez essayer de désactiver l'élément dans le fichier $submenu
globale ;
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');
Réseaux WordPress : J'ai constaté que Réponse de Seamus Leahy ne fonctionne pas si vous êtes connecté en tant que super administrateur du réseau, cela n'a pas d'importance si l'utilisateur n'a pas la capacité, mappée ou non, lorsque current_user_can($cap) est appelé par le CMS. En creusant dans le noyau, j'ai découvert qu'il était possible de 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
));
En réponse acceptée masque l'élément de menu, mais la page reste accessible.
Dans wordpress et pour tous les types d'articles, il existe la capacité create_posts. Cette fonction est utilisée dans plusieurs fichiers centraux :
- wp-admin \edit -formulaire-avancé.php
- wp-admin \edit.php
- wp-admin \includes\post.php
- wp-admin \menu.php
- wp-admin \post -nouveau.php
- wp-admin \press -this.php
- wp-includes \admin -bar.php
- wp-includes \class -wp-xmlrpc-server.php
- wp-includes \post.php
Donc si vous voulez vraiment désactiver cette fonctionnalité, vous devez le faire par rôle et par type de message. J'utilise l'excellent plugin " Editeur de rôle d'utilisateur "pour gérer les capacités par rôle.
Mais qu'en est-il de la capacité create_posts ? Cette capacité n'est pas mappée et create_posts est égal à create_posts. Nous devrions donc corriger cela et mapper la capacité par type de message.
Vous pouvez donc ajouter ce bout de code dans votre fichier functions.php et gérer cette capacité.
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);
Il ne s'agit donc pas ici de cacher ou de supprimer des éléments de menu, mais de supprimer les possibilités offertes aux utilisateurs (y compris les requêtes xmlrpc).
L'action était init et non admin_init ou autre car init à la priorité 100 empêche l'affichage de "add new" sur la barre d'administration, sidebar, etc (dans toute l'interface de wp).
- Réponses précédentes
- Plus de réponses