it-swarm.asia

تغيير ترتيب أقسام قائمة المشرف؟

أشعر بالإحباط بعض الشيء هنا بعد أن أمضيت بضع ساعات في محاولة لإنجاز هذه المهمة البسيطة إلى حد ما دون أي حظ.

في الأساس ، لديّ 5 أنواع من المنشورات المخصصة قمت بإنشائها وكل ما أريد فعله هو عرض كل منها بترتيب معين أسفل "لوحة المعلومات" .

من وثائق WordPress ، يبدو أنه لا يمكنك فعل ذلك لأن أعلى ترتيب قائمة يبدو أنه "5". وفوق L

أظن أن بعض الخبراء الذين قرأوا هذا قد يعرضون لي الطريقة البسيطة التي يمكنني من خلالها طلب قائمة المشرفين بالطريقة التي أريدها بالضبط من خلال استخدام ملف الوظائف وبدون استخدام مكون إضافي (وهو ما أعرف أنه موجود).

يرجى المضي قدمًا ومحاولة إنشاء 5 أنواع منشورات منفصلة وإدراجها في ترتيب محدد مباشرةً أسفل لوحة القيادة ... يبدو أن هذا غير ممكن. ؟؟ ... هل يوجد نوع من أنواع الاختراقات لجعل هذا العمل يقوم به شخص ما؟ يمكن مشاركة معي أو يفضل دون استخدام jQuery؟

31
Binarybit

مرحبًاBinaryBit:

لا عجب أنك محبط بعض الشيء ؛ قائمة المشرف هي واحدة من أكثر التطبيقات منفرجة ومحبطة من خلال WordPress core. بصراحة ، لا أعرف ما كانوا يفكرون فيه عندما صمموه بهذه الطريقة.

(EAMann قامممتازبعمل شرح كيفية عمل قوائم المشرف في WordPress (أتمنى لو تمكنت من قراءة ذلك منذ حوالي 4 أشهر ... :)

ومع ذلك ، بعد أن اكتشفت كيف نجحت ، كنت لا أزال في حيرة للعمل معها دون تكريس ما يكفي من الوقت لإبقاء رأسي مستقيماً أثناء محاولتي القيام بأشياء بسيطة. ولهذا السبب قمت بإنشاء واجهة برمجة تطبيقات قائمة تعمل على تبسيط وتبسيط العمل مع قائمة مسؤول WordPress.

إنها متوافقة بنسبة 100٪ مع الهياكل الحالية لـ WordPress ولا تزال كبيرة في ألفا منذ أن كنت الوحيد الذي استخدمها. أنا متأكد من وجود حالات استخدام لم يتم التعامل معها بعد. لكنني سأقوم بنشر الكود هنا لكي تجربه أنت والآخرين.

يمكنك تنزيل الملف لإسقاطه في دليل السمات الخاص بك هنا: wp-admin-menu-classes.php وما يلي يوضح كيف قد يستدعي الوظائف في ملف functions.php الخاص بموضوعك:

<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts');              // Swap location of Posts Section with Pages Section
  rename_admin_menu_section('Media','Photos & Video');    // Rename Media Section to "Photos & Video"
  delete_admin_menu_section('Links');                     // Get rid of Links Section
  $movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags');  // Save off the Movie Tags Menu
  update_admin_menu_section('Movies',array(               // Rename two Movie Menu Items and Delete the Movie Tags Item
    array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
    array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
    array('delete-item','item'=>'Movie Tags'),
  ));
  copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
  renamed_admin_menu_item('Movies','Add New','Add Actor');  // Rename copied Actor 'Add New' to 'Add Actor
  add_admin_menu_item('Movies',array(                       // (Another way to get a 'Add Actor' Link to a section.)
    'title' => 'Alt Add Actor ',
    'slug' => 'post-new.php?post_type=actor',
  ), array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  delete_admin_menu_section('Actors');                      // Finally just get rid of the actors section
}

ما هو أكثر من ذلك ، هذه الوظائف هي حتى قيد النظر (كقاعدة أساسية) لإدراجها في WordPress 3.1 لذلك إذا كنا محظوظين فقد تصبح هذه وظائف قياسية!

33
MikeSchinkel

فيما يلي عرض سريع لكيفية بناء قائمة مسؤول WordPress - أنا لا أتحدث add_menu_page API ، أعني قائمة WordPress الافتراضية الفعلية.

استدعاء ملف القائمة

من الواضح أنه تم تحميل القائمة بواسطة wp-admin/admin.php. لكن لم يتم تحميله من خلال واجهة برمجة التطبيقات القياسية التي اعتدنا على استخدامها بناءً على وثائق WordPress. بدلاً من ذلك ، يتم تحميل القائمة بأكملها (جميع الخيارات الممكنة ، والقوائم الفرعية ، إلخ) عبر صفيف بسيط تم تعريفه في wp-admin/menu.php.

لذلك لتحميل نظام القائمة ، admin.php فقط requires menu.php ... حول السطر 99 في WordPress 3.0.

تحميل القائمة

يتم تخزين القائمة نفسها في الصفيف العمومي $menu. وفقًا للوثائق المضمّنة ، يحتوي صفيف القائمة على هذه العناصر:

The elements in the array are:
    *     0: Menu item name
    *     1: Minimum level or capability required.
    *     2: The URL of the item's file
    *     3: Class
    *     4: ID
    *     5: Icon for top level menu

لوحة المعلومات ، على سبيل المثال ، هي:

$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );

ينتقل الملف ويحمّل كل عنصر من عناصر القائمة في المصفوفة ويقوم بتحميل جميع عناصر القائمة الفرعية في صفيف يسمى $submenu الذي يتم فهرسته بناءً على عنوان url الخاص بالقائمة الأصل. لذلك فإن عنصر القائمة الفرعية الخاص بـ Dashboard المسمى "Dashboard" هو:

 $submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );

بعد الانتهاء من النظام ، يتم تحميل جميع القوائم (لا يوجد الكثير منها ، لكن النظام ينتقل عبر الفهرس في الوقت المحدد بنسبة 5 أو 10 ... لاحظ أن لوحة المعلومات ، على الرغم من أنها عنصر القائمة الأول ، لا تزال مفهرسة على أنها العنصر "2" (صفيفات PHP تبدأ من الفهرس 0 ... لذلك يمنحك هذا مساحة مناورة).

في هذه المرحلة ، يستدعي النظام wp-admin/includes/menu.php.

يخطو من خلال القائمة

يمر هذا الملف الثالث بكل عنصر من عناصر القائمة ، واستناداً إلى الامتيازات المعينة للمستخدم الحالي ، إما يستخدم القائمة أو يزيلها. أولاً ، يتم تشغيله عبر جميع القوائم الفرعية ويزيل الصفحات التي لا يستطيع المستخدم الوصول إليها. ثم يتدفق عبر الصفحات الرئيسية ويفعل نفس الشيء. ثم يزيل أي فواصل مكررة تبقى من إزالة القوائم.

أخيرًا ، يقوم بفرز القوائم بناءً على ترتيب القائمة المخصص لها.

طلب قوائم مخصصة

الخطاف admin_menu يسمى بعد إعداد القوائم ولكن قبل يتم طلب أي شيء. لذلك من الممكن طلب نظام قائمة WordPress بالكامل دون "اختراق" واجهة برمجة التطبيقات.

بعد إطلاق الإجراء admin_menu ، يتم تحميل صفحاتك المخصصة في النظام. والشيء التالي الذي يحدث هو قيام WordPress بالتحقق من مرشح يسمى custom_menu_order ... يتم إرجاع هذا الفلتر دائمًا false ويخبر WordPress ما إذا كنت تريد استخدام ترتيب مخصص أم لا.

أضف التالي إلى السمة الخاصة بك لتعيين العلامة على true بدلاً من ذلك وتحديد ترتيب القائمة الصريح:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php', 'edit-comments.php');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

حدد الترتيب الذي تريده لجميع القوائم (قمت بتزويد المراجع بملف تحميل القائمة حتى تتمكن من الحصول على قائمة بأسماء الملفات) وهذا يجب أن يعتني به.


تحرير (9/2/2010):

لتحديد ترتيب شاشة تحرير نوع منشور مخصص باستخدام هذه الطريقة ، يلزمك معرفة عنوان URL الخاص بشاشة التعديل. أنا في معظم الحالات ، سيكون http://blog.url/wp-admin/edit.php?post_type=POST_TYPE. يعتمد هذا على كيفية إعداد WordPress على موقعك (إذا كان مثبتًا في الجذر أو في مجلد فرعي) والزرع في نوع المنشور المخصص الذي تستخدمه.

فمثلا...

لنفترض أن لديك نوع نشر مخصصًا لـ "Stack Exchange Questions" وتريد أن يظهر المحرر في نفس القسم مثل لوحة المعلومات أسفل أيقونة لوحة المعلومات مباشرةً. يمكنك استخدام الكود التالي في ملف functions.php الخاص بنسختك:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

لن تتأثر بقية القائمة ، ولكن سيتم نقل صفحة التعديل المخصصة الخاصة بك إلى نفس القسم مثل لوحة القيادة وستظهر مباشرة أسفلها. يمكنك استخدام هذا لنقل أنواع المنشورات المخصصة الخاصة بك إلى أي قسم من قائمة المسؤول ووضعها في أي ترتيب. يمكنك أيضًا نقل عناصر القائمة القياسية بنفس الطريقة.

فقط تأكد من تحديد ترتيب جميع عناصر القائمة في القسم المحدد ، وإلا قد تكون قائمتك عرضة لبعض الغرابة غير المتوقعة.

21
EAMann

أدرك أن هذا مؤشر ترابط قديم ، لكنني أعتقد أنه يجدر التحديث مع حل أسهل بكثير. يرجى ملاحظة أن هذا يعمل مع 3.5 ولم يتم اختباره مع أي إصدار آخر. يمكن وضع الكود التالي في مكون إضافي أو ملف jobs.php.

راجع: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . تم تعديله قليلاً ليتناسب مع احتياجات الملصق الأصلي (على الرغم من أنني آمل أن يجد حلاً الآن ...).

  // Rearrange the admin menu
  function custom_menu_order($menu_ord) {
    if (!$menu_ord) return true;
    return array(
      'index.php', // Dashboard
      'edit.php?post_type=custom_type_one', // Custom type one
      'edit.php?post_type=custom_type_two', // Custom type two
      'edit.php?post_type=custom_type_three', // Custom type three
      'edit.php?post_type=custom_type_four', // Custom type four
      'edit.php?post_type=custom_type_five', // Custom type five
      'separator1', // First separator
      'edit.php?post_type=page', // Pages
      'edit.php', // Posts
      'upload.php', // Media
      'link-manager.php', // Links
      'edit-comments.php', // Comments
      'separator2', // Second separator
      'themes.php', // Appearance
      'plugins.php', // Plugins
      'users.php', // Users
      'tools.php', // Tools
      'options-general.php', // Settings
      'separator-last', // Last separator
    );
  }

  add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order
  add_filter('menu_order', 'custom_menu_order');

لن تتم إزالة أي عناصر في قائمة المسؤول غير مدرجة هنا. سيتم إلحاقها في أسفل القائمة.

18
Matt

لنقل عناصر القائمة ، أحب استخدام المتغير Global $menu.

على سبيل المثال ، إذا أردت نقل قائمة "الصفحات" إلى أسفل القوائم ، فسأستخدم ذلك في functions.php أو مكون إضافي:

function admin_menu_items() {
    global $menu;
    $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages)
    $menu[20]=array();//make original pages menu disappear

}
add_action('admin_menu', 'admin_menu_items');

وإذا أردت تبديل قوائم المشاركات والارتباطات:

function admin_menu_items() {
    global $menu;
    $storemenu = $menu[15];//save links menu into $storemenu
    $menu[15] = $menu[5];//make links menu = posts menu
    $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links   
}
add_action('admin_menu', 'admin_menu_items');

تم استخدام هذه الخدعة بعض الوقت ، فقط تم اختبارها باستخدام WP 3.4.1

2
forlogos

أدرك أنك لا ترغب في استخدام مكون إضافي ، ولكن من أجل البساطة الخالصة ، جرب المكون الإضافي Admin Menu Editor بقلم جانيس إلستس. أعد ترتيب قوائم المشرفين بالطريقة التي تريدها ؛ يمكن أيضا إخفاء عناصر القائمة.

2
Ray Gulick

رائع. شكرا جزيلا. أنا فقط وضعت بعض أسطر الكود في دالاتي

require_once('/extras/wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section
}

بالإضافة إلى وضع wp-admin-menu-classes.php في مجلد السمات الخاص بي ، والآن يتم تبديل زر "المنشورات" مع زر "الصفحات".

آمل أن يصبح هذا جزءًا أساسيًا قريبًا وبطريقة حتى لا نحتاج إلى كتابة القائمة بأكملها داخل إحدى الوظائف لإعادة ترتيب زرين فقط.

في الواقع ، كان من الصعب بعض الشيء الحصول على ترتيب أكثر تحديدًا لـ 4 أزرار. لتغيير الأزرار الأربعة إلى: الصفحات ، النشر ، الوسائط ، الروابط التي أحتاجها لاستخدام الكود التالي:

  swap_admin_menu_sections('Pages','Posts');                
  swap_admin_menu_sections('Media','Links');                 
  swap_admin_menu_sections('Posts','Links');
0
Sebastian