仅允许创建新的子页

时间:2012-07-26 作者:INT

我正在寻找一种方法,一旦有九个页面是父/根页面,就只允许用户创建新的子页面。当尝试创建新的父页面时,一旦有九个父页面,用户将收到一条错误消息。

编辑:

从评论移至@brasofilo的以下答案:

当我按submit时,它会按应有的方式进行处理,但当页面刷新时,我会收到消息:“页面已更新”,而不是“页面已发布。查看页面”。所以它只保存为草稿,而不是实际发布。

因此,目标是在没有触发新限制的情况下,使post状态的行为与默认post类型的行为相同。

想法?

谢谢

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

基于Bainternet对该问题的回答中的代码:Make Categories and Tags required in admin

请参见代码注释。

add_action( \'admin_head-post-new.php\', \'wpse_59770_publish_admin_hook\' );
add_action( \'admin_head-post.php\', \'wpse_59770_publish_admin_hook\' );
add_action( \'wp_ajax_wpse_59770_pre_submit_validation\', \'wpse_59770_ajax_pre_submit_validation\' );

function wpse_59770_publish_admin_hook()
{
    global $current_screen;
    if( \'page\' != $current_screen->post_type )
        return;

    ?>
    <script language="javascript" type="text/javascript">
        jQuery(document).ready(function() {
            jQuery(\'#publish\').click(function() 
            {
                var form_data = jQuery(\'#parent_id\').val();
                form_data = ( \'\' != form_data ) ? \'1\' : \'0\';
                var data = {
                    action: \'wpse_59770_pre_submit_validation\',
                    security: \'<?php echo wp_create_nonce( \'pre_publish_validation\' ); ?>\',
                    form_data: form_data
                };
                jQuery.post(ajaxurl, data, function(response) 
                {
                    // OK, save page
                    if (response==\'true\') {
                        jQuery(\'#ajax-loading\').hide();
                        jQuery(\'#publish\').removeClass(\'button-primary-disabled\');
                        jQuery(\'#post\').submit();
                    }
                    // Not OK, display alert message
                    else
                    {
                        alert(response);
                        jQuery(\'#ajax-loading\').hide();
                        jQuery(\'#publish\').removeClass(\'button-primary-disabled\');
                        return false;
                    }
                });
                return false;
            });
        });
    </script>
    <?php
}


function wpse_59770_ajax_pre_submit_validation()
{
    //simple Security check
    check_ajax_referer( \'pre_publish_validation\', \'security\' );

    // Parent is set, no further action
    if( \'1\' == $_POST[\'form_data\'] )
    {
        echo \'true\'; 
        die();
    }

    $args = array( \'post_type\' => \'page\', \'post_parent\'=> 0, \'numberposts\' => -1 );
    $parents_total = get_posts( $args );

    // Total parents is less than 9, no further action
    if( count($parents_total) < 9 )
    {
        echo \'true\'; 
        die();
    }
    // No more parents allowed
    else
    {
        $error = "No more Parent Pages allowed";   
        echo $error; 
        die();
    }
}

结束