{"id":2452,"date":"2012-06-25T07:53:46","date_gmt":"2012-06-25T05:53:46","guid":{"rendered":"https:\/\/www.creativejuiz.fr\/blog\/?p=2452"},"modified":"2013-06-29T23:02:31","modified_gmt":"2013-06-29T21:02:31","slug":"wordpress-rendre-automatiquement-prive-post-appartenant-categorie","status":"publish","type":"post","link":"https:\/\/www.creativejuiz.fr\/blog\/tutoriels\/wordpress-rendre-automatiquement-prive-post-appartenant-categorie","title":{"rendered":"WordPress &#8211; Rendre automatiquement priv\u00e9 un post appartenant \u00e0 une cat\u00e9gorie pr\u00e9cise"},"content":{"rendered":"<p>D\u00e9sol\u00e9 pour le titre \u00e0 rallonge, je n&rsquo;ai pas trouv\u00e9 plus court. J&rsquo;ai eu besoin pour un client de rendre priv\u00e9 un post lorsqu&rsquo;il \u00e9tait publi\u00e9 dans certaines cat\u00e9gories. L&rsquo;id\u00e9e initiale \u00e9tant de lui simplifier la t\u00e2che et d&rsquo;\u00e9viter les erreurs de publication.<!--more--><\/p>\n<h2>Le hook<\/h2>\n<p>WordPress pr\u00e9voit un hook qui permet d&rsquo;intervenir au moment o\u00f9 un post est publi\u00e9 : <code>publish_post<\/code>.<br \/>\nLes param\u00e8tres de ce hook permettent d&rsquo;obtenir des informations sur le post publi\u00e9.<br \/>\nIl est possible d&rsquo;utiliser ces informations pour effectuer une mise \u00e0 jour du status du post en fonction de conditions pr\u00e9cises.<\/p>\n<h2>La fonction<\/h2>\n<p>Imaginez le sc\u00e9nario suivant :<br \/>\nL&rsquo;utilisateur doit voir son Custom Post Type \u00ab\u00a0meeting\u00a0\u00bb plac\u00e9 automatiquement en priv\u00e9 lorsqu&rsquo;il coche la cat\u00e9gorie \u00ab\u00a0direction\u00a0\u00bb (identifiant 3) ou la cat\u00e9gorie \u00ab\u00a0membres\u00a0\u00bb (identifiant 16). (je vous laisse imaginer le contexte, c&rsquo;est juste pour illustrer)<\/p>\n<p>Ce qu&rsquo;il faut que l&rsquo;on fasse :<\/p>\n<ol>\n<li>V\u00e9rifier si on publie un <abbr title=\"Custom Post Type\">CPT<\/abbr> \u00ab\u00a0meeting\u00a0\u00bb et si celui-ci n&rsquo;est pas d\u00e9j\u00e0 priv\u00e9,<\/li>\n<li>R\u00e9cup\u00e9rer la cat\u00e9gorie du post,<\/li>\n<li>V\u00e9rifier si le post appartient \u00e0 une des cat\u00e9gories \u00ab\u00a0priv\u00e9es\u00a0\u00bb,<\/li>\n<li>Cr\u00e9er un tableau des informations \u00e0 mettre \u00e0 jour,<\/li>\n<li>Mettre le post \u00e0 jour<\/li>\n<\/ol>\n<p>Ce qui nous donne un code plut\u00f4t court :<\/p>\n<pre class=\"code\"><code class=\"php no-controls\">if ( !function_exists('juiz_auto_cat_to_private') ) {\r\n    function juiz_auto_cat_to_private($data) {\r\n&nbsp;\r\n        \/\/ si notre post est de type \"meeting\"\r\n        if ( $data['post_type'] == \"meeting\" ) {\r\n            \/\/ on r\u00e9cup\u00e8re la cat\u00e9gorie du post\r\n            $categories = get_the_category( $_POST['post_ID'] );\r\n&nbsp;\r\n            \/\/ on liste les cat\u00e9gories \"priv\u00e9es\" (3 et 6 \u00e9tant les identifiants)\r\n            $auto_private_cat = array(3, 16);\r\n&nbsp;\r\n            \/\/ si la cat\u00e9gorie s\u00e9lectionn\u00e9e est \"priv\u00e9e\"\r\n            if( in_array( $categories[0]->cat_ID, $auto_private_cat ) ) {\r\n                \/\/ on met \u00e0 jour le statut\r\n                $data['post_status'] = 'private';\r\n            }\r\n        }\r\n&nbsp;\r\n\t\/\/ on retourne les donn\u00e9es pour finir l'enregistrement\r\n\treturn $data;\r\n}\r\nadd_filter('wp_insert_post_data','juiz_auto_cat_to_private');<\/code><\/pre>\n<p>Ce code est \u00e0 placer dans le fichier <code>functions.php<\/code> de votre th\u00e8me, ou dans un fichier de plugin si vous savez comment proc\u00e9der \ud83d\ude09<\/p>\n<p>Merci \u00e0 Jonathan de <a href=\"http:\/\/geekpress.fr\/\">GeekPress<\/a> pour ses conseils d&rsquo;optimisation \ud83d\ude09<br \/>\n<strong>Mise \u00e0 jour :<\/strong> Seconde optimisation du code gr\u00e2ce \u00e0 <a href=\"http:\/\/geekpress.fr\/\">GeekPress<\/a> et l\u2019\u0153il de Lynx de <a href=\"http:\/\/boiteaweb.fr\">Boite\u00c0Web<\/a><\/p>\n<p>Merci !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9sol\u00e9 pour le titre \u00e0 rallonge, je n&rsquo;ai pas trouv\u00e9 plus court. J&rsquo;ai eu besoin pour un client de rendre priv\u00e9 un post lorsqu&rsquo;il \u00e9tait publi\u00e9 dans certaines cat\u00e9gories. L&rsquo;id\u00e9e initiale \u00e9tant de lui simplifier la t\u00e2che et d&rsquo;\u00e9viter les erreurs de publication.<\/p>\n","protected":false},"author":4,"featured_media":2691,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bluesky_dont_syndicate":"","_bluesky_syndication_accounts":"","_bluesky_syndication_text":"","footnotes":""},"categories":[9,13],"tags":[228,474,434,457,475,684],"coauthors":[],"class_list":["post-2452","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriels","category-wordpress","tag-astuce","tag-categorie","tag-hook","tag-private","tag-prive","tag-wordpress"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/comments?post=2452"}],"version-history":[{"count":0,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/posts\/2452\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media\/2691"}],"wp:attachment":[{"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/media?parent=2452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/categories?post=2452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/tags?post=2452"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.creativejuiz.fr\/blog\/wp-json\/wp\/v2\/coauthors?post=2452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}