Publicar publicación cuando edite el formulario de publicación enviado con enter / return presionado en el teclado

3

¿Cómo se publican las publicaciones cuando el formulario de edición de publicación se envía con la tecla Intro / Retorno en el teclado? Por defecto, WordPress guarda la publicación en estado de borrador.

Para proporcionar algunos antecedentes, tengo un tipo de publicación personalizada Inventory , que no utiliza los campos Título o Contenido, solo campos de metadatos que son entradas de texto. Para simplificar la entrada de Inventory publicaciones, quiero publicar la publicación cuando el autor presione la tecla de entrada / devolución.

He comparado la variable $_POST de los formularios de edición enviados en ambos sentidos y he usado las diferencias para encontrar el código a continuación. Aunque el problema con este método es que muchos enganches de acción alrededor de guardar / publicar se activan dos veces, lo cual es molesto si tiene funciones enganchadas a esas acciones.

/**
 * Publish Inventory items when Enter key pressed
 * @param  integer $post_id Post ID
 * @return void
 */
function kt_publish_inventory_item_on_enter( $post_id ) {
    Global $typenow;

    if ( 'inventory' == $typenow ) {
        $data = array('ID' => $post_id, 'post_status' => 'publish' );

        if ( 'auto-draft' == $_POST['original_post_status'] && 'draft' == $_POST['post_status'] ) {
            $update_status = wp_update_post( $data );
        }

    }

}
add_action( 'acf/save_post', 'kt_publish_inventory_item_on_enter', 10, 1 );
    
pregunta Andrew 02.08.2015 - 15:16

1 respuesta

0

puede agregar un filtro en wp_insert_post_data :

add_filter( 'wp_insert_post_data', 'my_force_publish_post', 10, 2 );

function my_force_publish_post( $data, $postarr ) {
    if ( ! isset($postarr['ID']) || ! $postarr['ID'] ) return $data;
    if ( $postarr['post_type'] !== 'inventory' ) return $data;

    $old = get_post( $postarr['ID'] ); // the post before update
    if( $old->post_status !== 'draft' ) {
        // force a post to be set as published
        $data['post_status'] = 'publish'
    }
    return $data;
}
    
respondido por el Trix 22.01.2016 - 23:51

Lea otras preguntas en las etiquetas