اذهب إلى المحتوى

السؤال

نشر (معدل)

كما هو معلوم يتوفر الأدمن على عدة صلاحيات داخل الموقع، وعلى موقع مبني بووردبريس أحاول إنشاء إضافة 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'، لا أدري أين هو الخطأ؟

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

Recommended Posts

  • 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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...