Question

Quelqu'un sait-il d'une façon d'ajouter du code dans le fichier functions.php qui forcera automatiquement tous les messages appartenant à un type de poste personnalisé pour être « privé » et / ou « mot de passe protégé » avec un mot de passe défini par défaut?

Je spécifiquement référence à la création d'un nouveau poste ou la modification d'un poste existant assurant ainsi un poste appartenant à un type de poste personnalisé spécifique ne change jamais ...

Était-ce utile?

La solution

Vous pouvez accrocher save_post, wp_insert_post ou wp_insert_post_data de modifier l'objet de courrier avant qu'il ne soit inséré ou acceptée.

Utilisation save_post ou wp_insert_post le rappel devront déclarer deux args et recevraient l'objet après que la deuxième variable entrant .. (et je vous montre pour couvrir les alternatives, l'exemple de TheDeadMedic serait bien à).

Pour définir des valeurs par défaut pour un type de poste en particulier pour les postes nouveaux vous pouvez utiliser une petite entaille en accrochant sur default_content (bien que default_title travaillerait aussi à), comme dans l'exemple i donné here .

Vous essentiellement besoin de deux fonctions, l'un pour modifier des objets poste au moment de la sauvegarde / insertion et une pour définir des valeurs d'objet de poste par défaut, voici un exemple des deux fonctions nécessaires (en notant à nouveau, 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;
}

L'espoir qui aide ...

Autres conseils

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 pourrait-on juste faire une page de modèle pour le type de poste personnalisé et faire une vérification si l'est l'utilisateur est connecté et vérifier si l'utilisateur est un certain rôle? Permet de prendre par exemple, vous voulez avoir un type de poste qui ne doit être vu par les admins:

<?php if ( is_user_logged_in() && is_admin() ) : if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  <?php the_content(); ?>
<?php endwhile; endif; endif; ?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top