custom-post-types – ¿Establecer las publicaciones de un tipo de publicación personalizado para que sean privadas de forma predeterminada?

Pregunta:

Digamos que creé un tipo de publicación personalizada llamada 'Publicaciones privadas' ( $post_type = itsme_private_posts ) y quiero que todas las publicaciones bajo el tipo de publicación personalizada se establezcan en 'Privadas' automáticamente cuando se publiquen, es decir, de forma predeterminada. ¿Cómo lo hago?

Basado en la respuesta de @ brasofilo a una pregunta relacionada en StackOverflow , probé esto:

add_filter( 'wp_insert_post_data', 'itsme_cpt_private', '99', 2 );
function itsme_cpt_private( $data , $postarr ) {
    if( $postarr['post_type'] == 'itsme_private_posts' ) {
        $data['post_status'] = 'private';
    }
    return $data;
}

No funciona, es decir, no hace nada; todo está como estaba antes de agregar la función. Es como si la función no existiera o simplemente no hiciera nada.

Luego, en base a este artículo titulado " Forzar el tipo de publicación personalizada para que sea privada ", probé esto:

add_filter( 'wp_insert_post_data', 'itsme_cpt_private' );
function itsme_cpt_private( $post ) {
    if( $post['post_type'] == 'itsme_private_posts' ) {
        $post['post_status'] = 'private';
    }
    return $post;
}

Funciona, en eso, cuando publico o actualizo una publicación, se vuelve privada. ¡Bien! Pero cuando creo una nueva publicación ('Agregar nueva') y salgo sin hacer nada, crea un borrador 'privado' (automático) y lo guarda. ¡Además, ni siquiera puedo tirar esa cosa a la basura!

Básicamente, no sé cómo hacerlo. Entonces, ¿cómo configuro las publicaciones de un tipo de publicación personalizada para que sean privadas de forma predeterminada?

Respuesta:

El problema con el código en su pregunta es que siempre se intercepta. Pierde completamente la capacidad de no publicar, no es posible realizar borradores. Por qué esto conduce a publicaciones intransferibles es algo que no examiné más. De todos modos, esto no es lo que uno quiere.

Me alegro de que la solución de javascript esté funcionando para usted, pero personalmente tengo dos problemas con ella, primero , puede guardar la publicación como pública, segundo , lo hace más difícil, porque el script siempre establece el botón de opción en privado, para manejar trabajando con borradores. En cierto modo, ahora hay dos soluciones a la respuesta.


1. Obligar a que el tipo de publicación sea privada más indicación visual:

Es por eso que eché otro vistazo a hacerlo con transiciones de estado de publicación y, como dije, se puede hacer con Transiciones de estado de publicación .

Código:

add_action( 'transition_post_status', 'wpse118970_post_status_new', 10, 3 );
function wpse118970_post_status_new( $new_status, $old_status, $post ) { 
    if ( $post->post_type == 'itsme_private_posts' && $new_status == 'publish' && $old_status  != $new_status ) {
        $post->post_status = 'private';
        wp_update_post( $post );
    }
} 

Esto obliga a que las publicaciones publicadas de su tipo de publicación sean privadas. Sin interferir con la capacidad de guardar borradores. Esto por sí solo sería suficiente para resolver el problema de tener un tipo de publicación privada.
Pero, por supuesto, sería bueno tener la naturaleza privada del tipo de publicación representada en el metabox de publicación. Para esto, ajusté un poco el javascript. Principalmente al no configurar la casilla de verificación de forma predeterminada, pero aún cambiando el texto que se muestra, además agregué una nota.

Código:

add_action( 'post_submitbox_misc_actions' , 'wpse118970_change_visibility_metabox' );
function wpse118970_change_visibility_metabox(){
    global $post;
    if ($post->post_type != 'post')
        return;
        $message = __('<strong>Note:</strong> Published posts are always <strong>private</strong>.');
        $post->post_password = '';
        $visibility = 'private';
        $visibility_trans = __('Private');
    ?>
    <style type="text/css">
        .priv_pt_note {
            background-color: lightgreen;
            border: 1px solid green;
            border-radius: 2px;
            margin: 4px;
            padding: 4px;
        }
    </style>
    <script type="text/javascript">
        (function($){
            try {
                $('#post-visibility-display').text('<?php echo $visibility_trans; ?>');
                $('#hidden-post-visibility').val('<?php echo $visibility; ?>');
            } catch(err){}
        }) (jQuery);
    </script>
    <div class="priv_pt_note">
        <?php echo $message; ?>
    </div>
    <?php
}

Fuente: ¿Cómo configurar la visibilidad de las nuevas publicaciones en privado de forma predeterminada?
Nota: En comparación con el código a continuación, eliminé la marca de verificación del botón de opción y, además, agregué un código para el mensaje.

Por supuesto, no necesita javascript para hacer que su tipo de publicación sea privada, pero siempre es bueno tener las cosas indicadas visualmente. Por esa razón, es una buena adición.


2. Hacer privada la opción estándar en el metabox de publicación:

Me quedo con esto porque @its_me aceptó la respuesta como solución. Como dije en el comentario, encontré un código útil, se encarga de configurar la visibilidad en el post_submitbox_misc_actions en privado al conectarse a post_submitbox_misc_actions . Como dije al principio, "tengo dos problemas con él, primero, puedes guardar la publicación como pública, segundo, hace que sea más difícil – porque el guión siempre establece el botón de opción en privado – manejar el trabajo con borradores". Todavía es posible tener borradores y trabajar con ellos, pero no tan intuitivo como antes, pero el estado de publicación privada no se aplica de ninguna manera.

Código:

add_action( 'post_submitbox_misc_actions' , 'wpse118970_change_visibility_metabox_value' );
function wpse118970_change_visibility_metabox_value(){
    global $post;
    if ($post->post_type != 'itsme_private_posts')
        return;
    $post->post_password = '';
    $visibility = 'private';
    $visibility_trans = __('Private');
    ?>
    <script type="text/javascript">
        (function($){
            try {
                $('#post-visibility-display').text('<?php echo $visibility_trans; ?>');
                $('#hidden-post-visibility').val('<?php echo $visibility; ?>');
                $('#visibility-radio-<?php echo $visibility; ?>').attr('checked', true);
            } catch(err){}
        }) (jQuery);
    </script>
    <?php
}

Fuente: ¿Cómo configurar la visibilidad de las nuevas publicaciones en privado de forma predeterminada?
Nota: acorté el código para adaptarlo a las necesidades aquí.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım