Deshabilitar completamente el proceso de guardado posterior

4

Necesito una forma de deshabilitar completamente el proceso de guardado usando un action/filter . Algo que funciona (por ejemplo :) en los ganchos query , posts_clauses o wp_insert_post/save_post/update_post .

Hasta ahora solo he intentado return ''; , lo que me da toneladas de errores por los valores faltantes de las partes de objeto de publicación en la IU de administrador.

Esto debería suceder "en silencio", por lo que no se producen errores cuando php_error/WP_DEBUG y se configuran como TRUE/On .

Por cierto: no estoy preguntando cómo desactivar la función de guardado automático.

    
pregunta kaiser 12.05.2012 - 20:04

2 respuestas

5
function disable_save( $maybe_empty, $postarr ) {
    $maybe_empty = true;

    return $maybe_empty;
}
add_filter( 'wp_insert_post_empty_content', 'disable_save', 999999, 2 );

Debido a que wp_insert_post_empty_content se establece en verdadero, WordPress piensa que no hay título ni contenido y deja de actualizar la publicación.

EDITAR: Una variante aún más corta sería:

add_filter( 'wp_insert_post_empty_content', '__return_true', PHP_INT_MAX -1, 2 );
    
respondido por el Rob Vermeer 12.05.2012 - 23:30
2

La razón por la que recibe avisos para detener las inserciones con el filtro wp_insert_post_empty_content como se menciona en su comentario en la enlace La respuesta es: para post-new.php , el proceso de borrador automático debe obtener un $post->ID a través de get_default_post_to_edit() y wp_insert_post() , y usar esa ID de la devolución de $ post. es decir, las páginas 'Agregar nueva publicación' en realidad crean y obtienen un nuevo 'registro de publicación' cada vez.

Lamentablemente, wp_insert_post () devuelve 0 si detiene el proceso de guardado en lugar de una ID de publicación esperada. En otras palabras, no puede detener 'Borradores automáticos' con el filtro 'wp_insert_post_empty_content'. Y si usas el filtro, lamentablemente debes dejar pasar los borradores automáticos para evitar el Aviso de PHP. Es un error bastante malo.

La única forma que encontré para detener la creación de nuevos registros de borrador automático sin sentido y solucionar este error es extender la clase wpdb con un complemento Drop-in de db.php:

class wpdb_ext extends wpdb
{
  function insert($table, $data, $format = null) {
    if (isset($data['post_status']) && $data['post_status'] === "auto-draft" && ($pa = (int)$data['post_author'])
        && ($id = $this->get_var("SELECT ID FROM $table WHERE post_status = 'auto-draft' AND post_author = $pa LIMIT 1"))){
        //fake insert id and return id of existing auto-draft as base for New post page.
        return $this->insert_id = (int)$id;
    }
    return parent::insert($table, $data, $format = null);//else do actual insert
  }
}
$wpdb = new wpdb_ext(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);//overload wpdb

Esto mantiene solo un borrador automático por autor, y evita los inútiles nuevos registros de borrador (s) inútiles que omiten / omiten los incrementos de ID.

    
respondido por el hexalys 05.04.2014 - 06:52

Lea otras preguntas en las etiquetas