web-dev-qa-db-ja.com

メタボックス内の新しいボタンのみで投稿のリビジョンを作成する方法はありますか?

これを実行する方法がないことを確認してください。しかし、誰かが私がこのようなことをする方法について何か考えを持っていますか?自動修正をオフにして、ボタンがクリックされたときにのみ修正が作成されるようにします(おそらくカスタムボタンがメタボックスに配置されます)。スペルミスを修正するたびに改訂するのではなく、投稿を使用してより多くのバージョン管理シナリオを実行するための非常に便利な方法です。

たとえば、これを使用してボタンクリックに結び付けることができますか。

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

あなたの専門家が言わなければならないことを聞きたいです!

ありがとう

更新:これは行くべき道であるかのように思われる:remove_action( 'pre_post_update'、 'wp_save_post_revision');

しかし、私はそれを特定のボタンに結び付けるのに苦労しています。私はリビジョンを完全に無効にしたくありません。

ご意見ありがとうございます。

4
Ryan

これはではなくまだ完全な答えではありません、時間の不足のため、私はもっと完全な例で後で戻ってみるつもりですが、私はただ加えたいと思いましたいくつかのメモおそらく他の誰かがすぐに飛び込むでしょう。

ボールを転がすには.

はじめに

はい、これは完全に可能です、あなたはこの機能性を作成することができます、そしてあなたのスニペットであなたはあなたが作業している必要がある関連フックのいくつかを見るでしょう。

add_action('_wp_put_post_revision', 'your_function");

../wp-includes/post.php に、リビジョンに関連する他の関連するフックと共にあります。

次に、

を追加する Save Revision の横または上にあるボタン Publish ボタンあなたは次のフックを使うでしょう。

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

これは実用的な例です。HTMLフォーマット(divs, id's, etc)は何らかの一貫したUIエクスペリエンスを維持するためのものですが、特にカスタムルックアンドフィールまたは特別なパディング、余白などが必要な場合は自由に変更してください。 。

PS。上記のカスタムボタンフックと組み合わせて、結果に関係なく、独自の関数フックを_wp_put_post_revisionに書き込むようにしてみてください。その間に結果を貼り付けてください。

1
userabuser