הגבלת פוסטים למשתמש

איך להגביל את מספר הפוסטים שמשתמשים מסוג 'מחבר' יכולים ליצור?
בהגדרות תוסף בחר 'מחבר' בתפקיד משתמש, 'פוסטים' בסוג הפוסט, ואת ההגבלה הרצויה.

איך לגרום לחוקים המוחלים על סוג פוסט מסוים להגביל פר אתר במקום פר תפקיד משתמש מסוים?
עדכן את סוג הפוסט:

add_filter( 'upl_query', 'upl_limit_total_posts' );
add_filter( 'upl_rule_limit_current_user_role_check', 'upl_convert_user_role', 10, 2 );

function upl_limit_total_posts( $args ) {
	$post_type = 'post';
	if ( $post_type === $args['post_type'] ) {
		unset( $args['author'] );
	}
	return $args;
}

function upl_convert_user_role( $check, $i ) {
	$post_type = 'post';
	return $post_type === get_option( 'upl_posts_type' )[ $i ] && ! is_user_logged_in() ? true : $check;
}

איך לגרום לחוקים המוחלים על סוג פוסט מסוים להגביל לפי מספר הפוסטים הנמצאים בקטגוריות מסוימות בלבד?
עדכן את סוג הפוסט ואת ה-id של הקטגוריות (וודא שהמשתמשים אינם יכולים להעביר פוסט ל- או מקטגוריות אשר לא מוגבלות):

add_filter( 'upl_query', 'upl_specific_category' );
function upl_specific_category( $args ) {
	$post_type = 'post';
	$category_id = [ '4', '2' ];
	if ( $post_type === $args['post_type'] ) {
		$args['cat'] = $category_id;
	}
	return $args;
}

איך לגרום לחוקים המוחלים על סוג פוסט מסוים להגביל פוסטים בסטטוסים מסוימים בלבד?
עדכן את סוג הפוסט ואת הסטטוסים של הפוסטים (וודא שהמשתמשים אינם יכולים להעביר פוסט ל- או מסטטוס אשר לא מוגבל):

add_filter( 'upl_query', 'upl_specific_post_status' );
function upl_specific_post_status( $args ) {
	$post_type = 'post';
	$post_status = [ 'any' ];
	if ( $post_type === $args['post_type'] ) {
		$args['post_status'] = $post_status;
	}
	return $args;
}

איך לשנות את המחזוריות של חוקים המוחלים על סוג פוסט מסוים?
עדכן את סוג הפוסט ואת המחזוריות:

add_filter( 'upl_query', 'upl_modify_cycle' );
function upl_modify_cycle( $args ) {
	$post_type = 'post';
	$cycle = '3 days ago';
	if ( $post_type === $args['post_type'] ) {
		$args['date_query']['after'] = $cycle;
	}
	return $args;
}

איך להציג למשתמשים רק את ההגבלות שחלות עליהם בהתאם לאפשרות 'עדיפות'?

add_filter( 'upl_display_prioritized_rules_enabled', '__return_true' );

איך למנוע מהמשתמשים מלעבור על ההגבלות ע"י פתיחה של מס' חלונות של יצירת פוסטים?

add_filter( 'upl_skip_auto_draft_enabled', '__return_true' );

איך להסתיר את כפתור ה'הוסף חדש' אם נחרגו מגבלות הפוסטים?

add_filter( 'upl_hide_add_new_button_enabled', '__return_true' );

איך לקבוע הגבלות על הכמות הכוללת של מספר סוגי פוסטים יחדיו?
עדכן את שמות החבילות ואת סוגי הפוסטים הכלולים בהן:

add_action( 'init', 'upl_create_packages' );
add_action( 'admin_init', 'upl_add_author_support' );
add_filter( 'upl_rule_limit_current_post_type_check', 'upl_convert_post_types', 10, 3 );
add_filter( 'upl_query', 'upl_apply_packages', 10, 2 );

function upl_get_packages_types() {
	return [
		'Basic Package' => [ 'post', 'page' ],
		'Premium Package' => [ 'post', 'page', 'media' ]
	];
}

function upl_create_packages() {
	foreach ( array_keys( upl_get_packages_types() ) as $package ) {
		register_post_type( sanitize_key( $package ), [ 'labels' => [ 'name' => $package ] ] );
	}
}

function upl_add_author_support() {
	if ( current_user_can( get_option( 'upl_manage_cap' ) ) ) {
		$post_types = [];
		foreach ( upl_get_packages_types() as $package ) {
			$post_types = array_merge( $post_types, $package );
		}
		foreach ( $post_types as $post_type ) {
			add_post_type_support( $post_type, 'author' );
		}
	}
}

function upl_convert_post_types( $check, $i, $current_post_type ) {
	foreach ( upl_get_packages_types() as $package => $types ) {
		if ( sanitize_key( $package ) === get_option( 'upl_posts_type' )[ $i ] && in_array( $current_post_type, $types ) ) {
			return true;
		}
	}
	return $check;
}

function upl_apply_packages( $args, $i ) {
	foreach ( upl_get_packages_types() as $package => $types ) {
		if ( sanitize_key( $package ) === get_option( 'upl_posts_type' )[ $i ] ) {
			$args['post_type'] = $types;
			break;
		}
	}
	return $args;
}

איך לנעול את אפשרות עריכת הפוסטים לתפקיד משתמש מסוים לפי תנאי כלשהו?
עדכן את סוג הפוסט, תפקיד המשתמש והתנאי:

add_filter( 'get_post_metadata', 'upl_lock_posts', 10, 5 );
function upl_lock_posts( $value, $object_id, $meta_key, $single, $meta_type ) {
	$post_type = 'post';
	$role = 'editor';
	$condition = 'active' !== get_user_meta( get_current_user_id(), 'membership_level', true );
	$admin_id = '1';
	return '_edit_lock' === $meta_key && $post_type === get_post_type( $object_id ) && in_array( $role, wp_get_current_user()->roles ) && $condition ? time() . ':' . $admin_id : $value;
}

איך לגרום לחוקים המוחלים על סוג פוסט מסוים להגביל לפי הפוסטים של היוזר הנוכחי במקום לפי הפוסטים של היוזר שהוא הבעלים של הפוסט (מתאים לטפסים בפרונטאנד שיוצרים את הפוסט כאדמין ומשנים זאת רק לאחר מכן)?
עדכן את סוג הפוסט:

add_filter( 'upl_query', 'upl_limit_current_user' );
function upl_limit_current_user( $args ) {
	$post_type = 'post';
	if ( $post_type === $args['post_type'] && ! is_admin() ) {
		$args['author'] = get_current_user_id();
	}
	return $args;
}

איך לאפשר הגבלת פוסטים פר משתמש (יופיע במסך עריכת משתמש)?

add_filter( 'upl_rule_num_limit', 'upl_user_num_limit', 10, 3 );
add_action( 'show_user_profile', 'upl_add_num_limit_user_data' );
add_action( 'edit_user_profile', 'upl_add_num_limit_user_data' );
add_action( 'personal_options_update', 'upl_save_num_limit_user_data' );
add_action( 'edit_user_profile_update', 'upl_save_num_limit_user_data' );
add_filter( 'manage_users_columns', 'upl_num_limit_user_table' );
add_filter( 'manage_users_custom_column', 'upl_num_limit_user_table_row', 10, 3 );

function upl_user_num_limit( $num_limit, $i, $user ) {
	$user_limit = get_user_meta( $user, "num_limit_$i", true );
	return '' !== $user_limit ? $user_limit : $num_limit;
}

function upl_add_num_limit_user_data( $user ) {
	if ( current_user_can( get_option( 'upl_manage_cap', 'manage_options' ) ) ) {
		?>
		<h3><?php esc_html_e( 'User Posts Limit', 'user-posts-limit' ); ?></h3>
		<table class="form-table">
		<?php for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) { ?>
			<tr>
				<th><label for="num_limit_<?php echo $i; ?>"><?php esc_html_e( 'Rule', 'user-posts-limit' ); echo $i + 1 . ' '; esc_html_e( 'Limit', 'user-posts-limit' ); ?></label></th>
				<td>
					<input type="number" min="0" name="num_limit_<?php echo $i; ?>" value="<?php echo esc_attr( get_user_meta( $user->ID, "num_limit_$i", true ) ); ?>" class="regular-text" />
					<p class="description"><?php esc_html_e( 'It will override the configured limit for this user on rule', 'user-posts-limit' ); echo $i + 1; ?></p>
				</td>
			</tr>
		<?php } ?>
		</table>
		<br>
		<?php
	}
}

function upl_save_num_limit_user_data( $user_id ) {
	if ( current_user_can( get_option( 'upl_manage_cap', 'manage_options' ) ) ) {
		for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) {
			update_user_meta( $user_id, "num_limit_$i", sanitize_text_field( $_POST["num_limit_$i"] ) );
		}
	}
}

function upl_num_limit_user_table( $columns ) {
	for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) {
		$columns["num_limit_$i"] = __( 'Rule', 'user-posts-limit' ) . ( $i + 1 ) . ' ' . __( 'Limit', 'user-posts-limit' );
	}
	return $columns;
}

function upl_num_limit_user_table_row( $row_output, $column_id_attr, $user_id ) {
	for ( $i = 0; $i < get_option( 'upl_rules_count' ); $i++ ) {
		if ( "num_limit_$i" === $column_id_attr ) {
			return get_user_meta( $user_id, "num_limit_$i", true );
		}
	}
	return $row_output;
}

איך להציג הודעת הגבלה שונה לפי תפקיד משתמש?
עדכן את ההודעה לכל תפקיד משתמש:

add_filter( 'upl_message', 'upl_message_per_role', 10, 2 );
function upl_message_per_role( $message, $postarr ) {
	$message_per_role = [ // Sort roles from strong to weak, first match will be applied
		'author'		=> 'message1',
		'editor'		=> 'message2',
	];
	foreach ( $message_per_role as $role => $role_message ) {
		if ( user_can( $postarr['post_author'], $role ) ) {
			return $role_message;
		}
	}
	return $message;
}

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *