Est-ce que quelqu'un connaît un moyen d'ajouter du code au fichier functions.php qui forcera automatiquement toutes les publications appartenant à un type de publication personnalisé à être "privées" et/ou "protégées par mot de passe" avec un mot de passe défini par défaut?
Je fais spécifiquement référence à la création d'un nouveau message ou à la modification d'un message existant, garantissant ainsi qu'un message appartenant à un type de message personnalisé spécifique ne change jamais ...
Vous pouvez vous connecter à save_post
, wp_insert_post
ou wp_insert_post_data
pour modifier l'objet de publication avant son insertion ou son enregistrement.
En utilisant save_post
ou wp_insert_post
, le rappel aurait besoin de déclarer deux arguments et de recevoir l'objet post en tant que deuxième variable entrante .. (et je vous montrerai pour couvrir les alternatives, l'exemple de TheDeadMedic conviendrait).
Pour définir les valeurs par défaut d'un type de message particulier pour new posts, vous pouvez utiliser un petit hack en vous connectant à default_content
(bien que default_title
fonctionne également), comme dans l'exemple que j'ai donné ici .
Vous avez essentiellement besoin de deux fonctions, une pour modifier les objets post au moment de la sauvegarde/insertion et une autre pour définir les valeurs par défaut des objets post. Voici un exemple des deux fonctions nécessaires (notant à nouveau que vous pouvez échanger mon rappel save_post pour l'exemple déjà donné par TheDeadMedic).
add_action( 'save_post', 'check_type_values', 10, 2 );
function check_type_values( $post_id, $post ) {
if( $post->post_type )
switch( $post->post_type ) {
case 'my_custom_type':
$post->post_status = 'private';
$post->post_password = ( '' == $post->post_password ) ? 'some_default_when_no_password' : $post->post_password;
break;
}
return;
}
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 'my_custom_type':
$post->post_status = 'private';
$post->post_password = 'some_default_password';
break;
}
return $post_content;
}
J'espère que cela pourra aider...
function force_type_private($post)
{
if ($post['post_type'] != 'my_post_type' || $post['post_status'] == 'trash')
return $post;
$post['post_password'] = 'my password';
$post['post_status'] = 'private';
return $post;
}
add_filter('wp_insert_post_data', 'force_type_private');
Ne pourrions-nous pas simplement créer une page de modèle pour le type d'article personnalisé et vérifier si l'utilisateur est connecté et si l'utilisateur a un certain rôle? Prenons par exemple le fait que vous souhaitiez avoir un post-type qui ne devrait être vu que par les administrateurs:
<?php if ( is_user_logged_in() && is_admin() ) : if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; endif; endif; ?>