有没有办法只用Meta Box中的一个新按钮来创建帖子的修订版?

时间:2012-10-17 作者:Ryan

很肯定没有办法做到这一点,但有人对我如何做到这一点有什么想法吗?我想关闭自动预览,只在单击按钮时创建修订(可能是元框中的自定义按钮)。这将是一种非常有用的方法,可以在每次修复拼写错误时使用帖子而不是修订来执行更多版本控制方案。

例如,我们可以使用它并将其绑定到按钮点击上吗?

   /**
 * 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;
}
很想听听专家们的意见!

谢谢

更新:似乎应该这样做:删除操作(“pre\\u post\\u UPDATE”、“wp\\u save\\u post\\u revision”);

但我很难将其与特定按钮联系起来。。我不想完全禁用修订,也不想每次按下任何按钮时都应用它,只是在按下此按钮时瞬间应用。

感谢您的投入!

1 个回复
SO网友:Adam

这是not 不过,由于时间不够,我还是要给出一个完整的答案,虽然稍后我会尝试返回一个更完整的示例,但我只想添加几个注释。可能很快就会有其他人加入进来。

让球滚起来。。。

首先,是的,这是完全可能的,您可以创建此功能,并在代码片段中看到需要使用的一些相关挂钩。

add_action(\'_wp_put_post_revision\', \'your_function");
在中找到../wp-includes/post.php 以及与修订相关的其他挂钩。

其次,要在发布按钮旁边或顶部添加一个保存修订按钮,可以使用以下挂钩;

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 与上面的自定义按钮挂钩结合使用。同时粘贴结果。

结束

相关推荐

Schedule Sticky Posts

我想通过修改主循环来显示最近发布的两篇粘性帖子。以下循环的简单事件。然而,如果我计划在将来发布一篇粘性文章,循环就会失败——只显示一篇粘性文章。这就好像它可以看到有一个新的粘性帖子,但由于它被安排好了,所以不会显示出来。然后循环认为它已经显示了我请求的两篇帖子。有什么想法吗?/* Get all sticky posts */ $sticky = get_option( \'sticky_posts\' ); /* Sort the stickies with t