Forzando que todas las publicaciones asociadas con un tipo de publicación personalizada sean privadas

3

¿Alguien sabe de una manera de agregar código al archivo functions.php que forzará automáticamente que todas las publicaciones que pertenecen a un tipo de publicación personalizada sean "privadas" y / o "protegidas por contraseña" con una contraseña predeterminada establecida?

Me refiero específicamente a crear una nueva publicación o editar una publicación existente, asegurando que una publicación que pertenezca a un tipo de publicación personalizada específica nunca cambie ...

    
pregunta NetConstructor.com 06.12.2010 - 22:59

3 respuestas

7

Puedes enlazar con save_post , wp_insert_post o wp_insert_post_data para modificar el objeto de la publicación antes de insertarlo o guardarlo.

Al usar save_post o wp_insert_post , la devolución de llamada tendría que declarar dos argumentos y recibiría el objeto post como la segunda variable entrante ... (y le estoy mostrando que cubra las alternativas, el ejemplo de TheDeadMedic estaría bien para ).

Para establecer valores predeterminados para un tipo de publicación en particular para publicaciones nuevas , puedes usar un pequeño truco conectando a default_content (aunque default_title también funcionaría), como el ejemplo que di aquí .

Básicamente necesita dos funciones, una para modificar los objetos de publicación en el momento de guardar / insertar y otra para establecer los valores de objeto de publicación predeterminados. A continuación, se muestra un ejemplo de las dos funciones necesarias (nuevamente, puede cambiar la devolución de llamada de save_post por el ejemplo). ya dado por 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;
}

Espero que ayude ...

    
respondido por el t31os 06.12.2010 - 23:50
3
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');
    
respondido por el TheDeadMedic 06.12.2010 - 23:05
0

¿No podríamos simplemente hacer una página de plantilla para el tipo de publicación personalizada y verificar si el usuario ha iniciado sesión y verificar si el usuario tiene un determinado rol? Tomemos, por ejemplo, que desea tener un posttipo que solo deben ver los administradores:

<?php if ( is_user_logged_in() && is_admin() ) : if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  <?php the_content(); ?>
<?php endwhile; endif; endif; ?>
    
respondido por el hdavis84 21.01.2013 - 03:34

Lea otras preguntas en las etiquetas