Fix posts with category restriction settings

This commit is contained in:
champsupertramp
2016-07-27 20:43:05 +08:00
parent a82aa0c15f
commit d5cd0931f8
+64
View File
@@ -473,6 +473,70 @@
$args = $ultimatemember->access->get_meta( $um_post_id );
extract( $args );
$categories = get_the_category( $post->ID );
// Check post category restriction
foreach( $categories as $cat ){
$opt = get_option("category_{$cat->term_id}");
if ( isset( $opt['_um_accessible'] ) ) {
switch( $opt['_um_accessible'] ) {
case 0: // Open to everyone
$ultimatemember->access->allow_access = true;
$ultimatemember->access->redirect_handler = false; // open to everyone
break;
case 1: // Logged out users only
if ( is_user_logged_in() )
$ultimatemember->access->redirect_handler = ( isset( $opt['_um_redirect'] ) ) ? $opt['_um_redirect'] : site_url();
if ( !is_user_logged_in() )
$ultimatemember->access->allow_access = true;
break;
case 2: // Logged in users only
if ( ! is_user_logged_in() ){
$ultimatemember->access->redirect_handler = ( isset( $opt['_um_redirect'] ) && ! empty( $opt['_um_redirect'] ) ) ? $opt['_um_redirect'] : um_get_core_page('login');
$ultimatemember->access->allow_access = false;
}
if ( is_user_logged_in() ){
if( isset( $opt['_um_roles'] ) && !empty( $opt['_um_roles'] ) ){
if ( in_array( um_user('role'), $opt['_um_roles'] ) ) {
$ultimatemember->access->allow_access = true;
}else{
$ultimatemember->access->redirect_handler = ( isset( $opt['_um_redirect'] ) && ! empty( $opt['_um_redirect'] ) ) ? $opt['_um_redirect'] : site_url();
$ultimatemember->access->allow_access = false;
}
}else{ // if allowed all roles
$ultimatemember->access->allow_access = true;
}
}
}
} // end if isset( $opt['_um_accessible'] )
// if one of the categories has enabled restriction, apply its settings to the current post
if( $ultimatemember->access->allow_access == false ){
return;
}
} // end foreach
if ( !isset( $args['custom_access_settings'] ) || $args['custom_access_settings'] == 0 ) {
$um_post_id = apply_filters('um_access_control_for_parent_posts', $um_post_id );