it-swarm.asia

Yönetici Menüsüne Keyfi Bağlantı Ekleme?

WordPress yönetici menüsüne rasgele köprü eklemenin bir yolu var mı (yönetici kontrol panelinde oturum açtığınızda soldaki menüden bahsediyorum)? Örneğin, biri Google’a bir bağlantı ekleyebilir mi?

Özel durumum üzerinde, üzerinde çalışmakta olduğum bir Wordpress teması için bir stil kılavuzu sayfası eklemek istiyorum, böylece kullanıcıya farklı HTML öğelerinin tema ile nasıl stillendirildiğini ve çeşitli şeylerin nasıl güzel bir şekilde stillendirileceğini gösterebiliyorum.

Şimdiye kadar sahip olduğum kod ( not: eksik ): In functions.php Görünüm bölümünde yeni bir menü öğesi ekledim:

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()'da header() ile yönlendirmeye çalışmak hata veriyor ( Başlık bilgisi değiştirilemiyor ).

20
Tom

Merhaba @Tom,

Sorunuzu doğru anladıysam, menüye nasıl bir bağlantı ekleyeceğinizi bilmeniz gerekmez (zaten bunu biliyorsunuzdur) ancak bunun yerine bağlantınızın doğru yönlendirilip yönlendirilmeyeceğini öğrenmeniz gerekir, değil mi?

Yönetici Menüsü Öğesinden Harici Bir URL’ye Yeniden Yönlendirme

Eğer öyleyse yapmanız gereken şey, menü öğesi işlevini kullanmamak, bunun yerine "hook" WordPress'e, muhtemelen HTTP başlıkları dışında hiçbir şey vermeyecek kadar erken basmaktır. /wp-admin/themes.php çağrılırken en eski kanca after_setup_theme gibi görünüyor ve iyi çalışıyor gibi görünüyor.

A "Menu Slug" kullanın, böylece bir Kancada Test edebilirsiniz

Ancak işe yaraması için önce çağrınızı add_theme_page hook/create_theme_style_page() işlevinizde admin_menu olarak değiştirmemiz gerekir. Beşinci parametreyi düşürdük (admin seçeneğini uygulamak için kullanılacak fonksiyon) çünkü buna ihtiyacımız yok ve dördüncü parametreyi ( "menu slug" ) themes.php?goto=build-styleguide-page olarak değiştirdik.

Dördüncü parametre için neredeyse tam anlamıyla bir şey seçmiş olsak da, yönlendirme yapacağımıza göre, tutarlılık için diğer görünüm seçenekleriyle aynı sayfaya (themes.php) yönlendirdim. Ayrıca, keyfi olarak goto adını da kullandım çünkü WordPress bunu kullanmıyor ve bunun için mantıklı görünüyor.

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'
  );
}

BTW, build_styleguide_page() işlevinizden kurtulduk, çünkü bu çözüm için buna ihtiyacımız yok.

themes.php için En Eski Kanca'da yönlendir:after_setup_theme

Son kodumuz olarak after_setup_theme kancamızı redirect_from_admin_menu() işlevimizde kullanırız. Geçerli sayfanın themes.php olup olmadığını ve URL'de goto URL parametresinin iletildiğinden emin olmak için test yaptık. Ardından 'build-styleguide-page' değerine sahip olup olmadığını görmek için goto/switch deyimini kullanarak case değerini test eder; öyleyse, belirttiğiniz varsayımlara yönlendirir, ör. Google, aksi takdirde yönetici paneline geri yönlendiririz:

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;
  }
}

Notlar:

  1. after_setup_theme hook/redirect_from_admin_menu() işlevinde switch/case deyimini kullanmayı seçtim, böylece gerekirse ek goto yönlendirmeleri eklemek daha kolay olurdu; sadece daha fazla vaka ifadesi ekleyin.

  2. wp_redirect() ve wp_safe_redirect() işlevleri aslında sonlanmaz; WordPress'in durmasını ve yönlendirmenizi geçersiz kılmamasını sağlamak için bir çıkış deyimi yayınlamanız gerekir.

Bu yardımcı olur umarım!

13
MikeSchinkel

Öğenizi doğrudan $submenu dizisine ekleyerek menüye eklerseniz, yönlendirmeyi yapmanız ve menü bağlantısı olarak tüm site dışı bir URL kullanmanız gerekmez (bunu kendim yaparım).

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, ana menünün tuşunu/bağlantısını gösterir, bu örnekte temel olarak Dashboard menu öğesine bir öğe ekliyorum.

Elbette, add_{type}_page işlevlerini kullanmak kadar güzel değil, ancak WordPress'in yönetici menü bağlantılarında site dışı URL'leri önlediği gerçeği ile ilgili.

Çeşitli sanal ana bilgisayarlarımı menüye eklemek için benzer bir şey kullanıyorum, böylece doğrudan yönetici menüsünden diğer yüklemelere geçebilirim (hepsi bir komut dosyasıyla yapılır, ancak temelde yukarıdaki kodun yüceltilmiş bir sürümünü kullanır).

NOT: Kodu kullanmaya karar verirseniz, kullanımda olan bir anahtar atamamasına dikkat edin (örnek koddaki 500 dizi anahtarı).

İPUCU: Menü tuşlarında negatif değerler kullanabilirsiniz, böylece menü öğelerini yerel WordPress öğelerinin herhangi birinden önce oturmaya zorlayabilirsiniz.

21
t31os

Bununla aynı şeyi başardım:

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 );

Burada yaptığınız şey, menü maddesi ekleyip sümüklüböceği tanımlamanız, daha sonra 'admin_init' üzerinde sümüklü böcek olup olmadığını kontrol edip istediğiniz yere yönlendirmek.

3
Bobz