创建管理元框以将帖子另存为挂起状态

时间:2016-03-26 作者:Mat

使用Wordpress将草稿帖子更改为挂起时的工作流包括多次单击和按键,尤其是在移动设备上

workflow

因此,为了简化我的过程,我想创建一个只有“另存为挂起”按钮的元框。(我有一个插件,可以接收挂起的帖子并将它们发布到时间表中,所以只需一个按钮就可以了)

我的代码

add_action( \'add_meta_boxes\', \'wp_cfc_register_meta_boxes\' );
add_action( \'save_post\', \'wp_cfc_save_meta_box\' );


/**
 * Register meta box(es).
 */
function wp_cfc_register_meta_boxes() {
    add_meta_box( \'wp_cfc_pending_meta\', __( \'Add to Pending Queue\', \'textdomain\' ), \'wp_cfc_display_callback\', \'post\' );

}

/**
 * Meta box display callback.
 * @param WP_Post $post Current post object.
 */
function wp_cfc_display_callback( $post ) {

    wp_nonce_field( \'wp_cfc_pending_meta_box_nonce\', \'meta_box_nonce\' );
    // Display code/markup goes here. Don\'t forget to include nonces!
    ?>
    <div id="minor-publishing-actions">
        <div id="save-action">
            <input name="original_publish" type="hidden" id="original_publish" value=\'pending\'" />
            <?php submit_button( __( \'Save as Pending\' ), \'secondary button-large\', \'Publish\', false ); ?>
        </div>
    </div>
    <?php
}

/**
 * Save meta box content.
 * @param int $post_id Post ID
 */
function wp_cfc_save_meta_box( $post_id ) {

    // make post id is set otherwise we\'d be in trouble
    if(!isset($post_id)) return;

    $cfc_post = array ( \'ID\' => $post_id, \'post_status\' => \'pending\');

    // Bail if we\'re doing an auto save
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;

    // if our nonce isn\'t there, or we can\'t verify it, bail
    if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'wp_cfc_pending_meta_box_nonce\' ) ) return;

    // if our current user can\'t edit this post, bail
    if( !current_user_can( \'edit_post\' ) ) return;

    // check it\'s a post and the update the post setting it to pending
    if( isset( $_POST[\'wp_cfc_save_meta_box\']) ) {
        remove_action(\'save_post\', \'wp_cfc_save_meta_box\'); //if you don\'t unhook the function you\'ll have an infinite loop
            wp_update_post($cfc_post);
        add_action(\'save_post\', \'wp_cfc_save_meta_box\'); //rehook the function
    }

}`
可以按此按钮并按预期显示,根据WordPress返回的消息更新帖子,但未设置帖子状态。我的方法似乎也在正常的岗位设置变化中被调用。

我是唯一的用户,我是管理员,简单地更改用户角色是不可行的,因为有时我需要设置实际的发布日期等。此按钮只是为了加快我的工作流程。

我找不到任何人做类似的事情,但希望有人能看到我遗漏了什么?

1 个回复
最合适的回答,由SO网友:engelen 整理而成

代码不起作用的原因是if-报表检查isset( $_POST[\'wp_cfc_save_meta_box\']) 从不计算为true。生成提交按钮的代码,

<?php submit_button( __( \'Save as Pending\' ), \'secondary button-large\', \'Publish\', false ); ?>
生成以下HTML:

<input type="submit" name="Publish" id="Publish" class="button button-large" value="Save as Pending"  />
WordPress\'submit_button 函数接受多个参数,其中第三个参数是$name. 这用作HTMLname 属性,并在$POST 提交表单时的数组。因此$_POST[\'wp_cfc_save_meta_box\'], $_POST[\'Publish\'] 设置。To tackle the problem, change the $name$ parameter to \'wp_cfc_save_meta_box\'. This yields

<?php submit_button( __( \'Save as Pending\' ), \'secondary button-large\', \'wp_cfc_save_meta_box\', false ); ?>
顺便说一下您可以将其变得更漂亮一点,并利用post_submitbox_misc_actions 将按钮添加到原始的“发布”框而不是自定义元框的操作。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果