🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ mr a
دسترسی کاربران
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۰۲ اردیبهشت ۱۴۰۰

سلام وقت بخیر
بنده درگیر یه پروژه هستم در قسمت دسترسی کاربران به مشکل خوردم

تو این پروژه دو نقش (دبیر کارگروه و مدیر کارگروه) دارم که کارگروه‌های متعددی داره

 

این سایت بصورت مولتی سایت نیست و حدود 25 کارگروه داره که هر کارگروه دو یوزر دارند(دبیر و مدیر) که دسته بندی پست اختصاصی دارند( اخبار کارگروه A، صورت جلسات کاگروه B)



شرح مشکل :

میخوام دبیرکارگروه A امکان پست گذاری ، ویرایش رو داشته باشه ولی برای انتشار باید به تایید مدیر همون کارگروه برسه.
مدیر کارگروه B و.. امکان ویراش و تایید انتشار پست دبیر کارگروه A رو نداشته باشند و فقط این امکان برای مدیر اون کارگروه باشه.

 

خلاصه میخوام کاربر دبیر امکان ایجاد ، ویرایش داشته باشه و کاربر مدیر امکان ایجاد ، ویرایش، انتشار پست خودش و انتشار پست اون کاربر رو فقط داشته باشه. (بجز سوپر ادمین)

 

سلام خدمت شما. برای حل این مشکل می‌تونید نقش‌های مورد نظرتون رو به راحتی در وردپرس اضافه کنید و برای دبیر کار گروه دسترسی انتشار پست رو حذف کنید.

به کد زیر دقت کنید که ما امکان انتشار پست رو برای دبیر حذف کردیم.

function disable_dabir_publish_cap() {
	$dabir = get_role( 'dabir' );
	$dabir->remove_cap( 'publish_posts' );
}
add_action( 'init', 'disable_dabir_publish_cap' );
کیوان علی محمدی ۰۳ اردیبهشت ۱۴۰۰، ۰۸:۳۹

ممنون
 

ولی مشکل اصلی هنوز باقی مونده

- مدیر کارگروه A امکان ویرایش و انتشار پست دبیر بقیه کارگروهB رو داره! (نباید داشته باشه فقط پست دبیر کارگروه خودش)
 

mr a ۰۳ اردیبهشت ۱۴۰۰، ۱۷:۲۲

برای این مورد می‌تونید از فیلتر pregetposts استفاده کنید. با این فیلتر می‌تونید مشخص کنید کوئری مورد نظر که لیست پست‌ها رو دریافت می‌کنه چطوری کار کنه و بر چه اساس نمایش بده پست‌ها رو.

 

function posts_for_current_author($query) {
    global $pagenow;
    if( 'edit.php' != $pagenow || !$query->is_admin )
        return $query;
    if( !current_user_can( 'edit_others_posts' ) ) {
        global $user_ID;
        $query->set('author', $user_ID );
    }
    return $query;
}
add_filter('pre_get_posts', 'posts_for_current_author');

اینم یک نمونه کد برای این مورد.

کیوان علی محمدی ۰۴ اردیبهشت ۱۴۰۰، ۰۶:۳۰

متوجه نشدم! 

لطفا یه توضیح بدید 

 

یعنی تو قسمت «نوشته ها» پیشخوان وردپرس امکان ویرایش پست بقیه کاربران رو با فیلتر محدود کردید!؟

محدود به یوزر خودش یعنی نویسنده و یوزر دیگه (user_ID)

mr a ۰۴ اردیبهشت ۱۴۰۰، ۰۸:۱۸

این نمونه کد پست هایی که در پیش خوان نمایش داده میشه رو فیلتر میکنه برای کاربری که در سیستم لاگین هست. حالا می‌تونید این آیدی کاربری رو برابر با کاربرهای دیگه که نقش خاصی دارن هم قرار بدین.

کیوان علی محمدی ۰۸ اردیبهشت ۱۴۰۰، ۰۶:۱۴