web-dev-qa-db-fra.com

Forcer tous les articles associés à un type d'article personnalisé à être privés

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 ...

3
NetConstructor.com

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...

7
t31os
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');
3
TheDeadMedic

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; ?>
0
hdavis84