使用Wordpress将草稿帖子更改为挂起时的工作流包括多次单击和按键,尤其是在移动设备上
因此,为了简化我的过程,我想创建一个只有“另存为挂起”按钮的元框。(我有一个插件,可以接收挂起的帖子并将它们发布到时间表中,所以只需一个按钮就可以了)
我的代码
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返回的消息更新帖子,但未设置帖子状态。我的方法似乎也在正常的岗位设置变化中被调用。
我是唯一的用户,我是管理员,简单地更改用户角色是不可行的,因为有时我需要设置实际的发布日期等。此按钮只是为了加快我的工作流程。
我找不到任何人做类似的事情,但希望有人能看到我遗漏了什么?
最合适的回答,由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
. 这用作HTML
name
属性,并在
$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
将按钮添加到原始的“发布”框而不是自定义元框的操作。