Disons que nous avons une catégorie avec slug protected_category
et quelques publications. Existe-t-il un moyen de forcer toutes les publications de cette catégorie à être protégées par un mot de passe à l'aide d'un mot de passe par défaut?
UPDATE: J'ai trouvé une solution pour définir un mot de passe par défaut pour toutes les publications dans un type de publication personnalisé:
add_filter( 'default_content', 'set_default_values', 10, 2 );
function set_default_values( $post_content, $post ) {
if ( $post->post_type )
switch ( $post->post_type ) {
case 'protected_post':
$post->post_status = 'protected';
$post->post_password = '123123';
break;
}
return $post_content;
}
Alors, comment puis-je modifier cela pour cibler une catégorie spécifique?
Cela devrait faire ce que vous voulez:
add_filter('save_post', 'wpse_135377_protect_post');
function wpse_135377_protect_post($post_ID) {
if (in_array(
'protected_category',
wp_get_post_categories($post_ID, array('fields' => 'slugs'))
)) {
// we have to remove the function
// as it will be called by `wp_update_post` (=> infinite loop)
remove_filter('save_post', 'wpse_135377_protect_post');
wp_update_post(array(
'ID' => $post_ID,
'post_password' => '123123',
));
// now we add it again
add_filter('save_post', 'wpse_135377_protect_post');
}
} // function wpse_135377_protect_post
Il y avait plusieurs problèmes dans votre base de code:
protected
— Les publications protégées par mot de passe ont également le statut de publication publish
(et elles ont un mot de passe);save_post
(comme suggéré dans le commentaire ci-dessous et la réponse associée);$post
qui est passé dans les fonctions (save_post
ainsi que default_content
) est et non un pointeur (référence) de sorte que tout ce que vous faites à l'objet reste dans la fonction (sauf si vous l'insérez dans la base de données).Bonne protection!