¿Cómo puedo hacer que la página Agregar nueva publicación tenga Visibilidad configurada como Privada de manera predeterminada?

8

Estoy tratando de crear un complemento que altere la página Agregar nueva publicación para que el campo Visibilidad diga "Privado" de forma predeterminada:

Status: Draft
Visibility: **Private**
Publish immediately

[Publish]

... a diferencia de lo que normalmente supone WordPress:

Status: Draft
Visibility: **Public**
Publish immediately

[Publish]

En este momento, estoy usando el filtro "wp_insert_post_data", y eso me permite cambiar cualquier publicación con un post_status de "auto-draft" a "privado". Si bien esto funciona, hay un efecto secundario no deseado: cambiar post_status a "privado" parece publicar la publicación automáticamente, cambiando el botón en el editor a "Actualizar". Además, si el usuario guarda antes de especificar un título, la publicación se publicará con el título "Auto-Draft".

¿Hay alguna manera de que simplemente cambie Visibilidad a Privado de manera predeterminada, de manera que no se publique automáticamente la publicación, y cambie el botón a "Actualizar"? En Vanilla WordPress, los usuarios pueden cambiar manualmente la visibilidad a Privado, y el botón permanece como Publicar ... Solo necesito lograrlo a través de un complemento. También quiero asegurarme de que el usuario todavía pueda seleccionar "público", si así lo desean.

¡Gracias!

Matt Refghi
fuente

Respuestas:

-1

dado que está desarrollando un complemento, supongo que no desea tocar ningún archivo fuera de wp-content / plugins o ../themes para el caso.

Sin embargo, si ese no es el caso, siga:
Vaya a wp-admin / includes / meta-boxes.php y busque:

$visibility = 'public';
$visibility_trans = __('Public');

Ahora cámbielo a lo obvio:

$visibility = 'private';
$visibility_trans = __('Private');

Nuevamente, esto afecta el archivo meta-boxes.php que está fuera de la carpeta de complementos. No obstante, creo que el enfoque que debe adoptar es crear un nuevo cuadro meta, agregar su configuración de visibilidad personalizada (es decir, privada) y hacer que esta última anule la configuración de visibilidad WP predeterminada .

Mejor
Chris

cr0z3r
fuente
2
Las soluciones que requieren que modifiques los archivos principales siempre se aplacarán cuando realices una actualización. Por lo tanto, realmente no son soluciones.
Drew Gourley
De acuerdo, pero a menos que me equivoque, creo que la parte en negrita se puede lograr a través de un complemento regular. Si ese es el caso, entonces es una solución decente, solo un poco más de trabajo de lo que quería hacer.
Matt Refghi
3

del complemento; utiliza la acción 'post_submitbox_misc_actions' y alguna consulta para atrapar al usuario. Publicar formulario: http://wordpress.org/extend/plugins/private-post-by-default/

function default_post_visibility(){
global $post;

if ( 'publish' == $post->post_status ) {
    $visibility = 'public';
    $visibility_trans = __('Public');
} elseif ( !empty( $post->post_password ) ) {
    $visibility = 'password';
    $visibility_trans = __('Password protected');
} elseif ( $post_type == 'post' && is_sticky( $post->ID ) ) {
    $visibility = 'public';
    $visibility_trans = __('Public, Sticky');
} else {
    $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
}

add_action( 'post_submitbox_misc_actions' , 'default_post_visibility' );

?>
Hearvox
fuente
Esto interrumpe los borradores y publica automáticamente las publicaciones cuando haces "Guardar borrador". ¿Alguna otra solución?
2

La forma correcta de marcar automáticamente una publicación como privada es hacerlo con el filtro wp_insert_post_data. Es muy sencillo:

add_filter( 'wp_insert_post_data', 'mark_post_private' );
function mark_post_private( $data ) {
    if ( 'your_post_type_goes_here' == $data['post_type'] ) {
        $data['post_status'] = 'private';
    }

    return $data;
}
Yaron
fuente
Esto es correcto, pero si desea que la publicación se pueda poner en la papelera, primero debe verificar si ('basura'! = $ Post ['post_status']).
alexg