সেরা উপায়
এই সমস্ত উত্তর এখানে সুরক্ষা সংযোগ রয়েছে।
সর্বোত্তম উপায় হ'ল ক্ষমতা দ্বারা কাস্টম ক্ষমতা এবং পোস্ট পরিচালনা ইত্যাদি।
একটি সহজ উপায়
আর্টেমের সমাধানটি আরও ভাল বলে মনে হচ্ছে কারণ ডাব্লুপি কেবল পোস্ট সম্পাদনা স্ক্রিনে নয় তবে ড্যাশবোর্ড উইজেট, অ্যাজাক্স প্রতিক্রিয়া ইত্যাদির মধ্যে পোস্ট গণনা উল্লেখ করে doesn't
আর্টেমের এর ভিত্তিতে আরও ভাল সমাধানের জন্য।
- ডিফল্ট পোস্ট গণনা ক্যাশে সাফ করুন।
কেন: wp_count_posts
ফলাফল আগে যখন ক্যাশে হয় তখন আগে ক্যাশেড পোস্ট গণনা প্রদান করে।
- কাস্টম পোস্ট গণনার ফলাফল ক্যাশে।
কেন: ক্যাশে কর্মক্ষমতা বাড়ায়।
- হুক 3 য়
$perm
প্যারামিটার সম্মান wp_count_posts
।
কেন: পোস্ট readable
গণিতে পারম ভিত্তিতে ব্যবহারকারীর নিজস্ব ব্যক্তিগত পোস্ট অন্তর্ভুক্ত করা উচিত ।
- উচ্চ অগ্রাধিকার ফিল্টার হিসাবে ফিল্টার প্রয়োগ করুন।
কেন: ফিল্টারগুলি অন্য ফিল্টারগুলির দ্বারা ওভাররাইড করা হতে পারে।
- স্টিকি পোস্ট গণনা অপসারণ (বা সংশোধন)।
কেন: স্টিকি পোস্ট গণনাতে অন্যান্য পোস্ট অন্তর্ভুক্ত থাকে এবং সেগুলি পৃথকভাবে গণনা করা হয় WP_Posts_List_Table
।
- কাস্টম পোস্ট প্রকারের জন্য উপযুক্ত দক্ষতা ব্যবহার করুন
কেন: read_others_posts
ক্ষমতাটি সংশোধন করা যেতে পারে।
আপনি অতিরিক্ত টুইট করতে চাইতে পারেন
post_author
ক্যোয়ারী ভেরিতে সেট করে অন্যের পোস্টের মন্তব্যগুলিকে ফিল্টার করুন WP_Comment_Query
।
wp_count_comments
হুক দ্বারা মন্তব্য গণনা tweaks ।
- অ্যাডমিন স্ক্রিনগুলিতে অ্যাক্সেস আটকাতে হবে যা সীমাবদ্ধ করা উচিত।
নিম্নলিখিতটি wp_post_counts()
ডাব্লুপি 4.8 এর উপর ভিত্তি করে পরিবর্তিত সংস্করণ ।
function clear_cache() {
// deletes the default cache for normal Post. (1)
$cache_key = _count_posts_cache_key( 'post' , 'readable' );
wp_cache_delete( $cache_key, 'counts' );
}
add_action( 'admin_init', 'clear_cache' ); // you might use other hooks.
function fix_count_orders( $counts, $type, $perm ) {
global $wpdb;
if ( ! post_type_exists( $type ) ) {
return new stdClass();
}
$query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s";
$post_type_object = get_post_type_object( $type );
// adds condition to respect `$perm`. (3)
if ( $perm === 'readable' && is_user_logged_in() ) {
if ( ! current_user_can( $post_type_object->cap->read_private_posts ) ) {
$query .= $wpdb->prepare(
" AND (post_status != 'private' OR ( post_author = %d AND post_status = 'private' ))",
get_current_user_id()
);
}
}
// limits only author's own posts. (6)
if ( is_admin() && ! current_user_can ( $post_type_object->cap->edit_others_posts ) ) {
$query .= $wpdb->prepare( ' AND post_author = %d', get_current_user_id() );
}
$query .= ' GROUP BY post_status';
$results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A );
$counts = array_fill_keys( get_post_stati(), 0 );
foreach ( $results as $row ) {
$counts[ $row['post_status'] ] = $row['num_posts'];
}
$counts = (object) $counts;
$cache_key = _count_posts_cache_key( $type, 'readable' );
// caches the result. (2)
// although this is not so efficient because the cache is almost always deleted.
wp_cache_set( $cache_key, $counts, 'counts' );
return $counts;
}
function query_set_only_author( $wp_query ) {
if ( ! is_admin() ) {
return;
}
$allowed_types = [ 'post' ];
$current_type = get_query_var( 'post_type', 'post' );
if ( in_array( $current_type, $allowed_types, true ) ) {
$post_type_object = get_post_type_object( $type );
if (! current_user_can( $post_type_object->cap->edit_others_posts ) ) { // (6)
$wp_query->set( 'author', get_current_user_id() );
add_filter( 'wp_count_posts', 'fix_count_orders', PHP_INT_MAX, 3 ); // (4)
}
}
}
add_action( 'pre_get_posts', 'query_set_only_author', PHP_INT_MAX ); // (4)
function fix_views( $views ) {
// For normal Post.
// USE PROPER CAPABILITY IF YOU WANT TO RISTRICT THE READABILITY FOR CUSTOM POST TYPE (6).
if ( current_user_can( 'edit_others_posts' ) ) {
return;
}
unset( $views[ 'sticky' ] );
return $views;
}
add_filter( 'views_edit-post', 'fix_views', PHP_INT_MAX ); // (5)
জ্ঞাত সমস্যা: স্টিকি পোস্টগুলি যা ব্যবহারকারীর নয় belong স্টিকি পোস্ট ভিউ মুছে ফিক্সড।