web-dev-qa-db-fra.com

Est-il possible de créer une révision d'un article UNIQUEMENT avec un nouveau bouton dans la Meta Box?

Bien sûr, il n'y a pas moyen de faire cela, mais est-ce que quelqu'un a une idée sur la façon dont je pourrais faire quelque chose comme ça? Je veux désactiver la révision automatique et UNIQUEMENT une révision créée lorsqu'un clic est fait sur un bouton (probablement un bouton personnalisé placé dans la boîte méta). Serait un moyen très utile de faire plus d'un scénario de contrôle de version avec les publications au lieu de révisions chaque fois que vous corrigez une erreur d'orthographe.

Par exemple, pourrions-nous utiliser ceci et le lier à un clic de bouton?

   /**
 * Saves an already existing post as a post revision.
 *
 * Typically used immediately prior to post updates.
 *
 * @package WordPress
 * @subpackage Post_Revisions
 * @since 2.6.0
 *
 * @uses _wp_put_post_revision()
 *
 * @param int $post_id The ID of the post to save as a revision.
 * @return mixed Null or 0 if error, new revision ID, if success.
 */
function wp_save_post_revision( $post_id ) {
    // We do autosaves manually with wp_create_post_autosave()
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;

    // WP_POST_REVISIONS = 0, false
    if ( ! WP_POST_REVISIONS )
        return;

    if ( !$post = get_post( $post_id, ARRAY_A ) )
        return;

    if ( !post_type_supports($post['post_type'], 'revisions') )
        return;

    $return = _wp_put_post_revision( $post );

    // 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 );
    }

    return $return;
}

J'adorerais entendre ce que vos experts ont à dire!

Merci

UPDATE: On dirait que ce sera la solution: remove_action ('pre_post_update', 'wp_save_post_revision');

Mais j’ai du mal à lier cela à un bouton spécifique. Je ne veux pas désactiver complètement les révisions, et je ne veux pas qu’il s’applique à chaque pression sur un bouton, mais juste momentanément lorsque ce bouton est enfoncé.

Merci pour votre contribution!

4
Ryan

Ceci est pas encore une réponse complète, faute de temps, bien que je vais essayer de revenir plus tard avec un exemple plus complet, mais je voulais juste ajouter quelques notes. Peut-être que quelqu'un d'autre viendra bientôt.

Pour faire avancer les choses ...

Tout d'abord,

Oui, c'est tout à fait possible, vous pouvez créer cette fonctionnalité et dans votre extrait de code, vous verrez quelques-uns des points d'ancrage pertinents avec lesquels vous devez travailler.

add_action('_wp_put_post_revision', 'your_function");

Trouvé dans ../wp-includes/post.php , ainsi que d'autres points d'ancrage pertinents relatifs aux révisions.

Deuxièmement,

Ajouter un Save Revision bouton à côté ou sur le dessus de Publish bouton vous utiliseriez le crochet suivant;

add_action( 'post_submitbox_misc_actions', 'custom_button' );

function custom_button(){
        $html  = '<div id="major-publishing-actions" style="overflow:hidden">';
        $html .= '<div id="publishing-action">';
        $html .= '<input type="submit" accesskey="p" tabindex="5" value="Customize Me!" class="button-primary" id="custom" name="publish">';
        $html .= '</div>';
        $html .= '</div>';
        echo $html;
}

C’est un exemple pratique et le formatage HTML (divs, id's, etc) est là pour préserver une expérience d’interface utilisateur cohérente, mais vous pouvez le modifier à votre guise, en particulier si vous souhaitez une apparence personnalisée, un rembourrage spécial, des marges, etc. .

PS Essayez d’essayer, quel que soit le résultat, d’écrire votre propre fonction s’accrochant à _wp_put_post_revision en conjonction avec le crochet de bouton personnalisé ci-dessus. Collez vos résultats entre-temps.

1
userabuser