2012-09-17 1 views
0

Je lance un site Wordpress multi-auteurs avec des milliers de posts. Pour mettre en évidence les bons messages, je les filtre par des balises spécifiques que seuls les administrateurs peuvent définir. Par exemple featured, front page etc.Limiter les utilisateurs à l'utilisation de tags spécifiques avec une technique qui n'efface pas la balise

Pour éviter que mes auteurs ne sélectionnent eux-mêmes ces tags, j'utilise le script suivant. Si l'utilisateur a sélectionné un tag interdit, il sera supprimé une fois qu'il aura cliqué sur le bouton Publier. Les commentaires sont pour plus de commodité:

add_action('save_post', 'remove_tags_function', 10, 1); //whenever a post is saved, run the below function 

function remove_tags_function($post_id){ 
    if(!current_user_can('manage_options')){ // if the logged in user cannot manage options (only admin can) 
     $post_tags = wp_get_post_terms($post_id, 'post_tag', array('fields'=>'names')); //grab all assigned post tags 
     $pos = array_search('tag-to-be-deleted', $post_tags); //check for the prohibited tag 
     if(false !== $pos) { //if found 
      unset($post_tags[$pos]); //unset the tag 
      wp_set_post_terms ($post_id, $post_tags, 'post_tag'); //override the posts tags with all prior tags, excluding the tag we just unset 
     } 
    }//end if. If the current user CAN manage options, the above lines will be skipped, and the tag will remain 
} 

Il y a un problème majeur avec cette solution. Une fois la publication publiée, un administrateur lui attribue une balise featured. Toutefois, si l'auteur d'origine met à jour son post, le tag disparaît. Comprenez-vous le problème?

De nombreux auteurs aiment effectuer des révisions à leurs publications, en particulier lorsqu'ils reçoivent des commentaires dans les commentaires, et il existe également le type de publications liées aux actualités, qui nécessite une mise à jour fréquente.

Quelle solution pouvez-vous proposer pour résoudre ce scénario? Les administrateurs devront être en mesure de donner la balise sélectionnée, et si l'auteur met à jour son message, le tag doit rester. Quel puzzle ...

Répondre

0

Je proposerais de ne pas utiliser de tags du tout pour vos propriétés admin. En substance, tout ce que vous cherchez à faire est de marquer certains messages avec certains attributs.

Pour cela, je pourrais utiliser une taxonomie personnalisée. Voir l'article lié, en particulier la section "Utilisation des étiquettes pour les taxonomies" pour vous donner quelques idées sur la façon d'ajouter une gestion personnalisée pour vos attributs, qui pourrait être séparée du système de balises.

The Link

+1

Intéressant. Comment fonctionnerait le filtrage? Par exemple, actuellement, je peux facilement filtrer les messages en ajoutant ** & tag = random_tag ** à l'URL. Une approche similaire fonctionnerait-elle si j'utilisais une taxonomie personnalisée? –

+0

@GaryWoods Désolé je n'ai pas été clair dans ma réponse (j'ai ajouté des précisions). Je voulais juste dire ne pas utiliser de tags pour vos propriétés d'administration. Votre système de tag resterait toujours le même. Faites votre "vedette", "première page", etc. en taxonomies. –

+0

juste pour clarifier, comment cela fonctionnerait-il si je faisais ** vedette ** dans une taxonomie personnalisée? Comment puis-je lister tous les articles qui ont été sélectionnés pour être affichés? Cela fonctionnerait-il en ajoutant à l'URL? Par exemple, je filtre actuellement en vedette en ajoutant & tag = vedette à l'URL. –

0

Vous devez distinguer les balises ajoutées par l'utilisateur et les balises ajoutées par l'administrateur et les traiter séparément. Ajoutez une colonne de balise aux balises ou conservez les balises des utilisateurs et des administrateurs dans des tableaux distincts.

+0

Je ne comprends pas ce que vous entendez avec la colonne de drapeau? Si je séparais le tag dans les tables user et admin, cela nécessiterait des modifications intenses aux fichiers de code de Wordpress, quelque chose que j'essaie d'éviter à la lumière d'une meilleure solution. –

+0

Ajoutez une colonne à la table, nommez-la "is_admin_tag", définissez type sur boolean et définissez true si la balise a été ajoutée par admin, puis omettez ces balises lors de la modification par les utilisateurs. – S3Mi

Questions connexes