Eklenti etkinleştirildikten sonra ayarlar sayfasına nasıl yeniden yönlendirilir?


16

Eklentiyi kendim oluşturdum. Her şey yolunda görünüyor ama bu eklentide yapmak istediğim bir şey, eklenti etkinleştirildiğinde ilgili eklenti ayarları sayfasına yönlendiriliyor.

Örneğin:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

Etkinleştirme ile ilgili sayfaya, örneğin ile yönlendirmenin bir yolu var mı register_activation_hook?

Yanıtlar:


17

Belki wp_redirect()de aktivasyon kancasındaki fonksiyonu kullanıyor olabilirsiniz . Aşağıdaki örnekte myplugin_settingsbir yer tutucu bulunmaktadır. Normalde bu sadece $hook_suffixgeri dönüş $hook_suffix = add_menu_page( /* etc. */ ); ve benzer fonksiyonlar.

BU KOD ÇALIŞMIYOR, AŞAĞIDAKİ OKUYUN

register_activation_hook(__FILE__, 'cyb_activation');
function cyb_activation()
{
    // Don't forget to exit() because wp_redirect doesn't exit automatically
    exit( wp_redirect( admin_url( 'options-general.php?page=myplugin_settings' ) ) );
}

Referanslar:

  1. Kayıt etkinleştirme kancası
  2. ADMIN_URL ()

DÜZENLE

Etkinleştirme kancasının içindeki yönlendirme, eklenti etkin bir şekilde etkinleştirilmeden önce, belki de etkinleştirme yürütülmeden önce exit () çağrısından dolayı gerçekleştirilmiş gibi görünmektedir. Bu kod activated_plugin eylem kanca kullanarak iyi çalışıyor gibi görünüyor :

function cyb_activation_redirect( $plugin ) {
    if( $plugin == plugin_basename( __FILE__ ) ) {
        exit( wp_redirect( admin_url( 'options-general.php' ) ) );
    }
}
add_action( 'activated_plugin', 'cyb_activation_redirect' );

Bu kodu ana eklenti dosyasının dışında kullanırsanız, ana eklenti dosyasının __FILE__yolunu yeniden doldurmanız gerekir .

DÜŞÜNCE

Eklentiniz etkinleştirildikten sonra kullanıcıyı yeniden yönlendirmek çok iyi bir yaklaşım değildir. Wordpress'te eklentileri toplu olarak etkinleştirebilirsiniz. Bu durumda bir yönlendirme gerçekleştirirseniz ne olur? Bazı eklentilerin aktivasyonunu kıracaksınız, belki de eklentiniz son etkinleştirildiyse değil, ancak kesinlikle kullanıcı deneyimini bozuyorsunuz.


1
Daha akılcı bir yaklaşım. +1
kaiser

Eklentinin etkinleştirilemediği ve bunun yerine "Bu sayfayı görüntüleme izniniz yok" hatası aldığınız başka bir kullanıcı bunu kullanıyorsa? Menü sayfamı yanlış mı takıyorum? exit;Arama aktivasyonu kısa kesiyor gibi görünüyor .
Andy Adams

İzin hatası, yönlendirme URL'sini 'options-general.php?page=myplugin_settings'farklı ve geçerli bir şeye değiştirmemenizdir . Her neyse, exitetkinleştirme kancasındaki eklenti etkin bir şekilde etkinleştirilmeden önce yürütülür, bu yüzden çalışmaz. Cevabı yeni bir çalışma koduyla düzenledim.
cybmeta

kod zaten gönderilen başlık ile sonuçlanır .. düzeltmek için herhangi bir yol?
Latheesh VM Villa

7

Bunu şu şekilde yapabilmelisiniz:

register_activation_hook(__FILE__, 'my_plugin_activate');
add_action('admin_init', 'my_plugin_redirect');

function my_plugin_activate() {
    add_option('my_plugin_do_activation_redirect', true);
}
// Solution 1
function my_plugin_redirect() {
    if (get_option('my_plugin_do_activation_redirect', false)) {
        delete_option('my_plugin_do_activation_redirect');
         wp_redirect("options-general.php?page=rotator");
         //wp_redirect() does not exit automatically and should almost always be followed by exit.
         exit;
    }
}

// OR

//Solution 2 (@kaiser suggestion)
function my_plugin_redirect() {
    if (get_option('my_plugin_do_activation_redirect', false)) {
        delete_option('my_plugin_do_activation_redirect');
         exit( wp_redirect("options-general.php?page=rotator") );
    }
}

GÜNCELLEME

Satır içi bir yorum olsa bile unutmayın:

wp_redirect () otomatik olarak çıkmaz ve hemen hemen her zaman çıkışı takip eder.

Özel örnek

<?php
    wp_redirect( $location, $status );
    exit;
?>

GÜNCELLEME 10/29/2013

Bahsetmedim, ancak lütfen çözümümün eklenti ayarları sayfasına bir yönlendirme yapıp yapmadığını kontrol etme yeteneği sunduğunu unutmayın. my_plugin_activateVe koşullarını kontrol edin my_plugin_redirect.

Umarım yardımcı olur!


exit()Etrafında bir olmamalı wp_redirect()?
Kaiser

2
@kaiser, cevap güncellendi.
iEmanuele

3

Merhaba ben eklenti aktivasyon sonra körük kod yönlendirme kullandık. Bu kodu kullanabilirsiniz. Güzel çalışıyor.

register_activation_hook(__FILE__, 'nht_plugin_activate');
add_action('admin_init', 'nht_plugin_redirect');

function nht_plugin_activate() {
add_option('nht_plugin_do_activation_redirect', true);
}

function nht_plugin_redirect() {
if (get_option('nht_plugin_do_activation_redirect', false)) {
    delete_option('nht_plugin_do_activation_redirect');
    if(!isset($_GET['activate-multi']))
    {
        wp_redirect("edit.php?post_type=headline&page=news-headline");
    }
 }
}

nht_ benim eklenti ön ekimdir & "edit.php? post_type = headline & page = news-headline" yönlendirme sayfasıdır. lütfen bunları değiştirin. E2soft.com
csehasib
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.