it-swarm.asia

إضافة ارتباط التعسفي إلى قائمة المسؤول؟

هل هناك طريقة لإضافة ارتباط تشعبي اعتباطي إلى قائمة مسؤول WordPress (أقصد القائمة الموجودة على اليسار عند تسجيل الدخول إلى لوحة تحكم المشرف)؟ على سبيل المثال ، هل يمكن إضافة رابط إلى Google؟

في حالتي الخاصة ، أرغب في إضافة صفحة دليل نمط لموضوع Wordpress الذي أعمل عليه حتى أتمكن من إظهار للمستخدم كيف يتم تصميم عناصر HTML المختلفة مع السمة ولتوضيح كيفية تصميم أشياء مختلفة بشكل جيد.

هذا هو الكود الذي لدي حتى الآن ( ملاحظة: غير مكتمل ): في jobs.php لقد أضفت عنصر قائمة جديد في المظهر القسم:

add_action('admin_menu', 'create_theme_style_page');

function create_theme_style_page() {
  add_theme_page('Theme Styleguide', 'Theme Styleguide', 'administrator', basename(__FILE__),'build_styleguide_page');
}

function build_styleguide_page() {
 echo "Not sure what goes here to redirect admin to a arbitrary url?";
}

في build_styleguide_page() ، تعطي محاولة إعادة التوجيه باستخدام header() خطأ ( لا يمكن تعديل معلومات الرأس ).

20
Tom

مرحبًا Tom،

إذا فهمت سؤالك بشكل صحيح ، فأنت لست بحاجة إلى معرفة كيفية إضافة رابط إلى القائمة (يبدو أنك تعرف ذلك بالفعل) ولكنك بحاجة إلى معرفة كيفية الحصول على رابطك لإعادة التوجيه بشكل صحيح ، أليس كذلك؟

إعادة التوجيه إلى عنوان URL خارجي من عنصر قائمة مسؤول

إذا كان الأمر كذلك ، فما عليك القيام به هو عدم استخدام وظيفة عنصر القائمة ولكن بدلاً من ذلك "ربط" WordPress مبكرًا بما يكفي بحيث لا يخرج أي شيء باستثناء رؤوس HTTP المحتملة. الخطاف الأقرب عند استدعاء /wp-admin/themes.php يبدو أنه after_setup_theme ويبدو أنه يعمل بشكل جيد.

استخدم "قائمة سبيكة" حتى تتمكن من اختباره في خطاف

ولكن لكي ننجح في العمل ، نحتاج أولاً إلى تعديل مكالمتك على add_theme_page في ربط admin_menuوظيفة create_theme_style_page(). لقد أسقطنا المعلمة الخامسة (الوظيفة التي يجب الاتصال بها لتنفيذ خيار المسؤول) لأننا لسنا في حاجة إليها ، وقمنا بتغيير المعلمة الرابعة (_/"قائمة سبيكة") لتكون themes.php?goto=build-styleguide-page.

على الرغم من أنه كان بإمكاننا اختيار أي شيء تقريبًا حرفيًا للمعلمة الرابعة ، نظرًا لأننا سنعيد توجيه توجيهي إلى نفس الصفحة (themes.php) كخيارات مظهر أخرى للتناسق. جئت أيضًا بشكل تعسفي مع الاسم goto لأن WordPress لا يستخدمه ويبدو أنه من المنطقي لذلك.

add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
  add_theme_page(
    'Theme Styleguide',
    'Theme Styleguide',
    'administrator',
    'themes.php?goto=build-styleguide-page'
  );
}

راجع للشغل ، تخلصنا من وظيفتك build_styleguide_page() لأننا لسنا بحاجة إليها لهذا الحل.

إعادة التوجيه في Earliest Hook لـ themes.php: after_setup_theme

بصفتنا الأخيرة من التعليمات البرمجية ، ننفذ ربطنا after_setup_theme في دالة redirect_from_admin_menu() الخاصة بنا. لدينا اختبار لمعرفة ما إذا كانت الصفحة الحالية هي themes.php ولضمان مرور معلمة URL الخاصة بـ goto على عنوان URL. ثم يختبر قيمة goto باستخدام عبارة switch/case لمعرفة ما إذا كان يحتوي على قيمة 'build-styleguide-page' ؛ إذا كان الأمر كذلك ، فإنه يعيد التوجيه إلى نظرك الافتراضي على سبيل المثال جوجل خلاف ذلك نحن مجرد إعادة توجيه إلى لوحة القيادة الادارية:

add_action('after_setup_theme', 'redirect_from_admin_menu');
function redirect_from_admin_menu($value) {
  global $pagenow;
  if ($pagenow=='themes.php' && !empty($_GET['goto'])) {
    switch ($_GET['goto']) {
      case 'build-styleguide-page':
        wp_redirect("http://www.google.com");
        break;
      default:
        wp_safe_redirect('/wp-admin/');
        break;
    }
    exit;
  }
}

ملاحظات:

  1. لقد اخترت استخدام عبارة switch/case في دالة after_setup_theme hook/redirect_from_admin_menu() بحيث يكون من الأسهل إضافة عمليات إعادة توجيه goto إضافية إذا كنت بحاجة إلى ذلك ؛ فقط أضف المزيد من بيانات الحالة.

  2. الدالات wp_redirect() و wp_safe_redirect() لا تنتهي فعليًا ؛ تحتاج إلى إصدار بيان صريح لإيقاف WordPress وعدم تجاوز إعادة التوجيه.

أتمنى أن يساعدك هذا!

13
MikeSchinkel

إذا قمت بإضافة العنصر الخاص بك إلى القائمة عن طريق إضافته إلى صفيف $submenu مباشرةً ، فستتجنب الحاجة إلى إعادة التوجيه وستكون قادرًا على استخدام عنوان URL كامل خارج الموقع كارتباط القائمة (أقوم بذلك بنفسي).

add_action( 'admin_menu' , 'admin_menu_new_items' );
function admin_menu_new_items() {
    global $submenu;
    $submenu['index.php'][500] = array( 'Menu item name', 'manage_options' , 'http://example.com' ); 
}  

يمثل index.php المفتاح/الرابط الخاص بالقائمة الأصل ، لذلك في المثال أقوم بإضافة عنصر إلى Dashboard القائمة ..

من المؤكد أنها ليست جميلة مثل استخدام وظائف add_{type}_page ، ولكنها تعمل على حل حقيقة أن WordPress يمنع عناوين URL خارج الموقع في روابط قائمة المشرف ..

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

ملاحظة: إذا قررت استخدام الرمز ، فاحرص على عدم تعيين مفتاح قيد الاستخدام (مفتاح مجموعة 500 في رمز المثال).

نصيحة: يمكنك بالفعل استخدام القيم السلبية في مفاتيح القائمة ، لذلك يمكنك إجبار عناصر القائمة على الجلوس قبل أي من عناصر WordPress الأصلية.

21
t31os

لقد حققت نفس الشيء مع هذا:

function add_custom_menu_item(){
    add_menu_page( 'Menu Item Title', 'Page Title', 'manage_options', 'page_slug', 'function', 'dashicons-icon', 1 );
}
add_action( 'admin_menu', 'add_custom_menu_item' );

function custom_menu_item_redirect() {

    $menu_redirect = isset($_GET['page']) ? $_GET['page'] : false;

    if($menu_redirect == 'page_slug' ) {
        wp_safe_redirect( home_url('/my-page') );
        exit();
    }

}
add_action( 'admin_init', 'custom_menu_item_redirect', 1 );

ما تفعله هنا هو إضافة عنصر قائمة وتحديد slug ، ثم على 'admin_init' يمكنك التحقق من وجود سبيكة وإعادة توجيه إلى موقعك المطلوب.

3
Bobz