#PUBLISH上的AJAX函数只保存为草稿--如何将其发布?

时间:2015-07-09 作者:Morgan Kay

我有一个称为“轮班”的自定义岗位类型(如员工轮班)。发布班次时,我运行一个Ajax函数来检查班次是否没有调度冲突。如果存在计划冲突,将弹出一个对话框,提醒用户冲突并询问他们是否要继续。如果他们选择“取消”,则不会发布帖子。如果他们选择“继续”,则发布帖子。

问题是:如果他们选择“继续”,帖子将保存为草稿,而不是发布。当他们单击“发布”按钮时,我如何发布帖子?

以下是JS(简化了一点,以便您可以看到重要部分):

$(\'#publish\').on(\'click\', function (e) {

    e.preventDefault();

    var url = shiftajax.ajaxurl;
    var shift = $(\'#post_ID\').val();

    var data = {
        \'action\': \'wpaesm_check_for_schedule_conflicts_before_publish\',
        \'shift\': shift,
    };

    $.post(url, data, function (response) {
        if( response.action == \'go\' ) {
            // there aren\'t any scheduling conflicts, so we can publish the post
            $(\'#hidden_post_status\').val(\'publish\'); 
            $(\'#post\').submit();
        } else {
            // there are scheduling conflicts, so ask the user if they want to publish
            if (confirm(response.message)) {
                $(\'#hidden_post_status\').val(\'publish\');
                $(\'#post\').submit();
            } else {
                // do nothing
            }
        }
    });

});
注意线条$(\'#hidden_post_status\').val(\'publish\'); - 这确实会更改ID为“hidden\\u post\\u status”的隐藏字段的值,但不会产生影响。帖子仍保存为草稿。

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

也许这个解决方案会奏效:

var flag_ok = false;

$(\'#publish\').on(\'click\', function (e) {
    if ( ! flag_ok ) {
        e.preventDefault();

        var url = shiftajax.ajaxurl;
        var shift = $(\'#post_ID\').val();

        var data = {
            \'action\': \'wpaesm_check_for_schedule_conflicts_before_publish\',
            \'shift\': shift,
        };

        $.post(url, data, function (response) {
            if( response.action == \'go\' ) {
                // there aren\'t any scheduling conflicts, so we can publish the post
                //$(\'#hidden_post_status\').val(\'publish\'); 
                flag_ok = true;
                $(\'#publish\').trigger(\'click\');
            } else {
                // there are scheduling conflicts, so ask the user if they want to publish
                if (confirm(response.message)) {
                    //$(\'#hidden_post_status\').val(\'publish\');
                    flag_ok = true;
                    $(\'#publish\').trigger(\'click\');
                } else {
                    // do nothing
                }
            }
        });    

    }    

});
这只是快速组合起来的东西,但它说明了一个事实,即您可以在调用preventDefault 方法此外,您不需要处理任何隐藏的表单字段。

Edit 它不起作用的原因submit() 是否有附加到click 事件

结束