Désactiver complètement le processus de sauvegarde

4

J'ai besoin d'un moyen de désactiver complètement le processus de sauvegarde en utilisant un action/filter . Quelque chose qui fonctionne (par exemple :) dans les hooks query , posts_clauses ou wp_insert_post/save_post/update_post .

Jusqu'à présent, j'ai seulement essayé de return ''; , ce qui me donne une tonne d'erreurs pour les valeurs manquantes des parties d'article post dans l'interface utilisateur d'administration.

Cela devrait se faire "en silence", donc aucune erreur ne sera générée lorsque php_error/WP_DEBUG et autres sont définis sur TRUE/On .

Btw: Je suis pas pour savoir comment désactiver la fonctionnalité d'enregistrement automatique.

    
posée kaiser 12.05.2012 - 20:04

2 réponses

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

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

Etant donné que wp_insert_post_empty_content est défini sur true, WordPress pense qu'il n'y a pas de titre ni de contenu et arrête la mise à jour de la publication.

EDIT: Une variante encore plus courte serait:

add_filter( 'wp_insert_post_empty_content', '__return_true', PHP_INT_MAX -1, 2 );
    
réponse donnée Rob Vermeer 12.05.2012 - 23:30
2

La raison pour laquelle vous recevez des avis d'arrêt des insertions avec le filtre wp_insert_post_empty_content mentionné dans votre commentaire à l'adresse enlace La réponse est la suivante: pour post-new.php , le processus de rédaction automatique doit obtenir un $post->ID par le biais de get_default_post_to_edit() et wp_insert_post() , et utiliser cet identifiant à partir de la déclaration $ post. c'est-à-dire que les pages "Ajouter un nouveau message" créent et obtiennent à chaque fois un nouvel "enregistrement de message".

Malheureusement, wp_insert_post () renvoie 0 si vous arrêtez le processus de sauvegarde au lieu d’un identifiant de publication attendu. En d'autres termes, vous ne pouvez pas arrêter les "brouillons automatiques" avec le filtre "wp_insert_post_empty_content". Et si vous utilisez le filtre, vous devez malheureusement laisser passer "les brouillons automatiques pour éviter l'avis PHP. C'est un très mauvais bug.

La seule façon qui me reste de cesser de créer inutilement de nouveaux enregistrements de brouillon automatique et de contourner ce bogue consiste à étendre la classe wpdb avec un plugin db.php Drop-in:

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

Ceci ne conserve qu'un seul brouillon automatique par auteur et évite les nouveaux enregistrements inutiles de brouillons automatiques qui gaspillent / sautent les incréments d'identité pour rien.

    
réponse donnée hexalys 05.04.2014 - 06:52

Lire d'autres questions sur les étiquettes