停止WordPress创建空/空条目

时间:2011-03-15 作者:INT

摆弄一个修改量很大的自定义帖子类型。开始做一些测试,看看我是否破坏了一些功能,并意识到wordpress没有检查帖子是否有任何内容的功能。也就是说,如果我按“添加新内容”,然后只按“发布”,它不会说一句话,只会将信息保存在数据库中。

问题是它在管理区域中不可见,只在数据库中可见。将创建一个标题为Auto Draft和post status Auto Draft的条目。

这不是世界上最大的问题,但我仍然希望避免在数据库中创建不必要的条目。

因此,我想知道如何创建某种函数来检查编辑器中是否输入了任何数据,如果为空,则会提示用户在保存/发布帖子之前输入数据。

发布元如下所示:

 <?php
if ( !in_array( $post->post_status, array(\'publish\', \'future\', \'private\') ) || 0 == $post->ID ) {?> 
    <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e(\'Publish\') ?>" />
    <?php submit_button( __( \'Create\' ), \'primary\', \'publish\', false, array( \'tabindex\' => \'5\', \'accesskey\' => \'p\' ) );
} else { ?>
    <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e(\'Save\') ?>" />
    <input name="save" type="submit" class="button-primary" id="publish" tabindex="5" accesskey="p" value="<?php esc_attr_e(\'Save\') ?>" />
<?php } ?>

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

当我需要保存“问题”的解决方案时,我创建了一个Ajax函数来验证字段,并进行了一些小的JQuery攻击:

首先,我们添加JavaScript来捕获提交/发布事件,并使用它在实际提交之前提交我们自己的ajax函数

 add_action(\'wp_print_scripts\',\'my_publish_admin_hook\');

function my_publish_admin_hook(){
if (is_admin()){
        ?>
        <script language="javascript" type="text/javascript">
            jQuery(document).ready(function() {
                jQuery(\'#post\').submit(function() {

                    var form_data = jQuery(\'#post\').serializeArray();
                    form_data = jQuery.param(form_data);
                    var data = {
                        action: \'my_pre_submit_validation\',
                        security: \'<?php echo wp_create_nonce( \'pre_publish_validation\' ); ?>\',
                        form_data: form_data
                    };
                    jQuery.post(ajaxurl, data, function(response) {
                        if (response.indexOf(\'True\') > -1 || response.indexOf(\'true\') > -1 || response = true ||  response) {
                            jQuery(\'#ajax-loading\').hide();
                            jQuery(\'#publish\').removeClass(\'button-primary-disabled\');
                            return true;
                        }else{
                            alert("please correct the following errors: " + response);
                            jQuery(\'#ajax-loading\').hide();
                            jQuery(\'#publish\').removeClass(\'button-primary-disabled\');
                            return false;
                        }
                    });
                    return false;
                });
            });
        </script>
        <?php
    }
}
然后创建函数进行实际验证:

add_action(\'wp_ajax_my_pre_submit_validation\', \'pre_submit_validation\');
function pre_submit_validation(){
    //simple Security check
    check_ajax_referer( \'pre_publish_validation\', \'security\' );

    //do your validation here
    //all of the form fields are in $_POST[\'form_data\'] array
    //and return true to submit: echo \'true\'; die();
    //or your error message: echo \'bal bla bla\'; die();
}
您可以随时对其进行一些更改,以便在客户端进行验证,但我更喜欢在服务器端进行验证。

SO网友:Rarst

意识到wordpress没有检查帖子是否有任何内容的功能。意思是,如果我按下;添加新的“;只需按publish,它不会说一个字,只需将信息保存在数据库中。

这是不正确的。wp_insert_post() 检查帖子是否有内容、标题或摘录。如果所有这些都为空,则返回WP_Error 带有关于空内容的消息。

问题是它在管理区域中不可见,只在数据库中可见。将创建一个标题为Auto Draft和post status Auto Draft的条目。

这不是世界上最大的问题,但我仍然希望避免在数据库中创建不必要的条目。

从快速查看代码中,应自动清理自动草稿。

结束

相关推荐

WP 3.1让Tax_Query在Query_Posts()中工作

我正试图使用以下代码对我的自定义帖子使用多个自定义分类法进行筛选,但我的新代码一直是空的,即循环中没有帖子出现。其工作原理如下:用户从表单中的三个不同下拉列表中选择自定义分类法的术语“fttype”、“ftperiod”和“ftduration”,并将其传递给以下代码:我最初有这段代码(虽然没有分页),但我正在尝试实现的新代码无法使用WP 3.1内置的通过多个自定义分类进行过滤的功能(请参阅下面的新代码)。有人知道我做错了什么吗?这件事已经有一段时间了。。。谢谢osuOLD CODE// Set toda