• 0

كيف أضيف مستخدم على ووردبريس بصلاحيات معينة؟

كما هو معلوم يتوفر الأدمن على عدة صلاحيات داخل الموقع، وعلى موقع مبني بووردبريس أحاول إنشاء إضافة plugin تسمح لمدير الموقع بعدة صلاحيات، بالشكل التالي:

function wf_getManagerCaps() {
    return array(
         "add_users" => true,
        "create_users" => true,
        "edit_users" => true,
        "list_users" => true,
        "promote" => true,
        "remove" => true,
        "delete" => true

       
    );
}

add_role("wf_manager", "WF Manager", wf_getManagerCaps());

 

وكوظيفة تسمح بتغيير صلاحيات المستخدم، اعتمدت الكود التالي:

 ببfunction wf_limitAvailableRoles( $roles ){
    $user = wp_get_current_user();
    if (in_array( WF_MANAGER_ROLE_SLUG, $user->roles)) {
        $roles = array(
            array(
                "name" => "wf_manager",
                "capabilities" => wf_getManagerCaps(),
            ),
            array(
                "name" => "wf_employee",
                "capabilities" => wf_getEmployeeCaps(),
            ),
        );
    }

    return $roles;
}
add_filter( 'editable_roles', 'wf_limitAvailableRoles' );

لكن المشكل هو عند إضافة مستخدم جديد يظهر بصلاحيات 'None'، لا أدري أين هو الخطأ؟

تمّ تعديل بواسطة محمد بوسكوري

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

المشكل الأساسي هو عند استخدام الدالة داخل editable_roles.

أهداف السكريبت:

  • السماح بإضافة مدراء الموقع والمستخدمين الجدد.
  • السماح للمدراء بإضافة مشغلين جدد.

وسيكون الحل هو عبارة تصحيح للدالة الأصلية ، التي هي كالآتي:

function wf_limitAvailableRoles( $roles ){
    $user = wp_get_current_user();
    if (in_array( 'wf_operator', $user->roles)) {
        $roles = array(
            array(
                "name" => "wf_manager",
                "capabilities" => wf_getManagerCaps(),
            ),
            array(
                "name" => "wf_employee",
                "capabilities" => wf_getEmployeeCaps(),
            ),
        );
    }

    return $roles;
}
add_filter( 'editable_roles', 'wf_limitAvailableRoles' );

يمكنك الاطلاع على codex لإجراء بعض التعديلات على roles$:

array(
    array(
        "name' => [role name]
        "capabilities" => [capabilities]
    ),

    array(
        "name' => [role name]
        "capabilities" => [capabilities]
    )
);

وهذا ما تحتاج إلى استعماله بالضبط:

array(
    [role_slug] => array(
        "name' => [role name]
        "capabilities" => [capabilities]
    ),

    [role_slug] => array(
        "name' => [role name]
        "capabilities" => [capabilities]
    ),
);

 

تمّ تعديل بواسطة E.Nourddine

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن