I’m looking for a way to only allow users to create new subpages once there are nine pages that are parents/root pages. Once there are nine parent pages when trying to create a new parent the users will get an error message.
Edit:
Moved from the comments to @brasofilo s answer below:
when I press submit it processes as it should but when the page refreshes I get the message: “Page updated” rather than “Page published. View page”. So it’s only saved as a draft, not actually published.
So the goal is to have the post status behave like it would for a default post type, when the new limit isn’t triggering.
Ideas?
Thanks
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Code based in Bainternet’s answer to this question: Make Categories and Tags required in admin
See code comments.
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();
}
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0