web-dev-qa-db-fra.com

Nombre maximal de versions de publication prises en charge

Nous exploitons un site de nouvelles basé sur WP 3.5.1. Certains éditeurs se plaignent du fait que l'éditeur WYSIWYG de la page de modification de publication ne fonctionne pas correctement pour certaines publications. Les boutons d'édition ne sont pas affichés.

Dans certains cas, nous devons mettre à jour un message plusieurs fois (plus de 500 fois).
Peut-il en être la cause?
Qu'adviendra-t-il de ces publications si je règle WP_POST_REVISIONS à 10?
Les anciennes versions seront-elles supprimées automatiquement ou resteront-elles?

1
mustafa

Vous devez définir WP_POST_REVISIONS sur un nombre fixe. Si vous ne le faites pas, WordPress conservera un nombre illimité de révisions. Voir la fonction wp_revisions_to_keep():

function wp_revisions_to_keep( $post ) {
    $num = WP_POST_REVISIONS;

    if ( true === $num )
        $num = -1;
    else
        $num = intval( $num );

    if ( ! post_type_supports( $post->post_type, 'revisions' ) )
        $num = 0;

    return (int) apply_filters( 'wp_revisions_to_keep', $num, $post );
}

D'autre part ... si vous avez besoin d'un nombre de modifications aussi important, vous devez consulter à nouveau le flux de travail d'édition . Il y a sûrement moyen de réduire ce nombre.

1
fuxia

Adresser:

Qu'adviendra-t-il de ces publications si je définis WP_POST_REVISIONS sur 10? Les anciennes versions seront-elles supprimées automatiquement ou resteront-elles?

Vous avez cette action:

add_action( 'pre_post_update', 'wp_save_post_revision' );

défini par défaut dans /wp-includes/default-filters.php.

Si vous cochez la source de wp_save_post_revision(), vous constaterez qu'il supprimera les dernières révisions du message en cours:

$delete = count($revisions) - WP_POST_REVISIONS;

avec wp_delete_post_revision() lorsque le hook pre_post_update est activé pour un $post_id donné, sauf lorsqu’il effectue une sauvegarde automatique.

Voici la partie pertinente de la source de wp_save_post_revision():

// WP_POST_REVISIONS = true (default), -1
if ( !is_numeric( WP_POST_REVISIONS ) || WP_POST_REVISIONS < 0 )
        return $return;

// all revisions and (possibly) one autosave
$revisions = wp_get_post_revisions( $post_id, array( 'order' => 'ASC' ) );

// WP_POST_REVISIONS = (int) (# of autosaves to save)
$delete = count($revisions) - WP_POST_REVISIONS;

if ( $delete < 1 )
        return $return;

$revisions = array_slice( $revisions, 0, $delete );

for ( $i = 0; isset($revisions[$i]); $i++ ) {
        if ( false !== strpos( $revisions[$i]->post_name, 'autosave' ) )
                continue;
        wp_delete_post_revision( $revisions[$i]->ID );
}
1
birgire