在键盘上按Enter/Return键提交编辑帖子表单时发布帖子

时间:2015-08-02 作者:Andrew

使用键盘上的回车键提交帖子编辑表单时,如何发布帖子?默认情况下,WordPress以草稿状态保存帖子。

为了提供一些背景知识,我有一个Inventory 自定义帖子类型,不使用标题或内容字段,只使用作为文本输入的元字段。简化输入Inventory 帖子,我想在作者点击回车键时发布帖子。

我比较了$_POST 编辑表单的变量以两种方式提交,并使用差异生成以下代码。但这种方法的问题是,保存/发布周围的许多操作挂钩都会被触发两次,如果您的函数与这些操作挂钩,这会很烦人。

/**
 * Publish Inventory items when Enter key pressed
 * @param  integer $post_id Post ID
 * @return void
 */
function kt_publish_inventory_item_on_enter( $post_id ) {
    Global $typenow;

    if ( \'inventory\' == $typenow ) {
        $data = array(\'ID\' => $post_id, \'post_status\' => \'publish\' );

        if ( \'auto-draft\' == $_POST[\'original_post_status\'] && \'draft\' == $_POST[\'post_status\'] ) {
            $update_status = wp_update_post( $data );
        }

    }

}
add_action( \'acf/save_post\', \'kt_publish_inventory_item_on_enter\', 10, 1 );

1 个回复
SO网友:Pmpr

您可以在上添加筛选器wp_insert_post_data:

add_filter( \'wp_insert_post_data\', \'my_force_publish_post\', 10, 2 );

function my_force_publish_post( $data, $postarr ) {
    if ( ! isset($postarr[\'ID\']) || ! $postarr[\'ID\'] ) return $data;
    if ( $postarr[\'post_type\'] !== \'inventory\' ) return $data;

    $old = get_post( $postarr[\'ID\'] ); // the post before update
    if( $old->post_status !== \'draft\' ) {
        // force a post to be set as published
        $data[\'post_status\'] = \'publish\'
    }
    return $data;
}

结束