Yönetici Menüsüne Rasgele Bir Bağlantı Eklensin mi?


20

WordPress yönetici menüsüne rastgele bir köprü eklemenin bir yolu var mı (yönetici kontrol paneline giriş yaptığınızda soldaki menü demek istiyorum)? Örneğin, Google'a bir bağlantı eklenebilir mi?

Benim özel durumumda, üzerinde çalıştığım bir Wordpress teması için bir stil kılavuzu sayfası eklemek istiyorum, böylece kullanıcıya farklı HTML öğelerinin tema ile nasıl stilize edildiğini gösterebilir ve çeşitli şeyleri güzelce nasıl stilize edeceğimizi gösterebilirim.

Bu şimdiye kadar var kod ( not: eksik ): function.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?";
}

In build_styleguide_page()ile yönlendirme girişiminde header()bir hata veriyor ( başlık bilgilerini değiştirilemiyor ).

Yanıtlar:


13

Merhaba @Tom ,

Sorunuzu doğru bir şekilde anlarsam, menüye nasıl bir bağlantı ekleyeceğinizi bilmenize gerek yok (zaten bunu biliyorsunuz gibi görünüyor), ancak bunun yerine, doğru bir şekilde yönlendirmek için bağlantınızı nasıl alacağınızı öğrenmeniz gerekiyor, değil mi?

Yönetici Menüsü Öğesinden Harici URL'ye Yönlendirme

Eğer öyleyse yapmanız gereken şey menü öğesi işlevini kullanmak değil, bunun yerine WordPress'i muhtemelen HTTP başlıkları dışında hiçbir şey vermeyecek kadar erken "kanca" yapmaktır . Çağıran erken kanca /wp-admin/themes.phpgibi görünen after_setup_themeve iyi işe görünür.

Bir "Menü Slug" kullanın, Böylece Kancada Test Edebilirsiniz

Ama biz çağrı değiştirmek için ilk ihtiyaç işe gitmek için add_theme_pagede admin_menukanca / senin create_theme_style_page()fonksiyonu. Beşinci parametreyi (admin seçeneğini uygulamak için çağrılacak işlev) bıraktık çünkü buna ihtiyacımız yok ve dördüncü parametreyi ( "menü slug" ) olarak değiştirdik themes.php?goto=build-styleguide-page.

Dördüncü parametre için neredeyse tam anlamıyla herhangi bir şey seçmiş olsak da themes.php, tutarlılık için diğer görünüm seçenekleriyle aynı sayfaya ( ) yönlendirdiğim için yönlendireceğiz . Ben de sadece isim ile geldim gotoçünkü WordPress onu 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 ona ihtiyacımız yok.

En Eski Kancaya aşağıdakiler için yönlendirin themes.php:after_setup_theme

Kodumuzun son biti olarak, after_setup_themekancalarımızı redirect_from_admin_menu()işlevimize uyguluyoruz . Geçerli sayfanın olup olmadığını themes.phpve URL parametresinin URL'ye gotoiletildiğinden emin olmak için test ettik . Sonra / ifadesi gotokullanmanın değerini ; öyleyse, belirttiğiniz varsayımlara, örneğin Google'a yönlendirir, aksi takdirde yalnızca yönetici kontrol paneline yönlendiririz:switchcase'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;
  }
}

Notlar:

  1. Gerekirse ek yönlendirmeler eklemek daha kolay olacak şekilde kanca / işlevinde switch/ caseifadesini kullanmayı seçtim ; daha fazla vaka ifadesi eklemeniz yeterlidir.after_setup_themeredirect_from_admin_menu()goto

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

Bu yardımcı olur umarım!


22

Öğenizi $submenudoğrudan diziye ekleyerek menüye eklerseniz , yönlendirmeyi yapmanız ve menü bağlantısı olarak eksiksiz bir site dışı URL kullanabilmeniz gerekir (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üst menünün anahtarını / bağlantısını temsil eder, bu nedenle örnekte temel olarak Gösterge Tablosu menüsüne bir öğe ekliyorum .

Elbette, add_{type}_pageişlevleri kullanmak kadar güzel değil , ancak WordPress'in yönetici menüsü bağlantılarında site dışı URL'leri önlediği gerçeği çözülüyor.

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

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

İPUCU: Menü tuşlarında negatif değerleri gerçekten kullanabilirsiniz, böylece menü öğelerini yerel WordPress öğelerinden önce oturmaya zorlayabilirsiniz.


NOT: Sanırım bu negatif anahtarı dize olarak ayarlamanız gerekecek. '-5've değil -5, başka anahtar geçersiz sayılır (sanırım) .. (ben yanlış değilim, negatif dizeleri olsa çalışır) ..
t31os

Teşekkürler, gerçek işlevlerle yapamayacağınız berbat, ama bu sadece bir bağlantıya sahip olmak için bir kanca / yönlendirme combo eklemek zorunda kalmaktan çok daha iyi.
El Yobo

2
Bu özel cevap, eklenti Post Status Menu Öğeleriyle bana yardımcı oldu (muhtemelen ne yaptığını tahmin edebilirsiniz). Her neyse, diğer eklentilerin hangi menülere bir şeyler ekleyeceğini bilmediğim için, diğer eklentilerle array_push()çarpışmayı önlemek için menü öğelerini eklemek için kullandığımı eklediğimi düşündüm .
mrwweb

Bir çekicilik gibi çalışır ve böyle küçük bir snippet'i kullanmak için bonus nokta.
João

2
+1. Bir anahtar seçip ümit etmek yerine, sadece son anahtarı ve artışı artırın. Örneğin, Araçlar menüsüne bir alt menü öğesi eklerken: global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] = vb.
webaware 29:13

3

Ben de 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ü öğesi eklemek ve slug tanımlamaktır, daha sonra 'admin_init' üzerinde slug'un var olup olmadığını kontrol edip istediğiniz konuma yönlendirirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.