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


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

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

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_create_packages() {
	$packages = [ 'Basic Package', 'Premium Package' ];
	foreach ( $packages as $package ) {
		register_post_type( sanitize_key( $package ), [ 'labels' => [ 'name' => $package ] ] );
	}
}

function upl_add_author_support() {
	$post_types = [ 'post', 'page', 'media' ];
	if ( current_user_can( get_option( 'upl_manage_cap' ) ) ) {
		foreach ( $post_types as $post_type ) {
			add_post_type_support( $post_type, 'author' );
		}
	}
}

function upl_convert_post_types( $check, $i, $current_post_type ) {
	$packages_types = [
		'Basic Package' => [ 'post', 'page' ],
		'Premium Package' => [ 'post', 'page', 'media' ]
	];
	foreach ( $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 ) {
	$packages_types = [
		'Basic Package' => [ 'post', 'page' ],
		'Premium Package' => [ 'post', 'page', 'media' ]
	];
	foreach ( $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', 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">
			<tr>
				<th><label for="num_limit"><?php esc_html_e( 'Limit', 'user-posts-limit' ); ?></label></th>
				<td>
					<input type="number" min="0" name="num_limit" value="<?php echo esc_attr( get_user_meta( $user->ID, 'num_limit', true ) ); ?>" class="regular-text" />
					<p class="description"><?php esc_html_e( 'It will override the limit of all the rules that applies on this user', 'user-posts-limit' ); ?></p>
				</td>
			</tr>
		</table>
		<br>
	<?php }
}

function upl_save_num_limit_user_data( $user_id ) {
	if ( current_user_can( get_option( 'upl_manage_cap', 'manage_options' ) ) ) {
		update_user_meta( $user_id, 'num_limit', sanitize_text_field( $_POST['num_limit'] ) );
	}
}

function upl_num_limit_user_table( $columns ) {
	$columns['num_limit'] = __( 'Limit', 'user-posts-limit' );
	return $columns;
}

function upl_num_limit_user_table_row( $row_output, $column_id_attr, $user_id ) {
	return 'num_limit' === $column_id_attr ? get_user_meta( $user_id, 'num_limit', true ) : $row_output;
}

כתיבת תגובה

האימייל לא יוצג באתר.