จะเปลี่ยนเส้นทางไปยังหน้าการตั้งค่าเมื่อเปิดใช้งานปลั๊กอินได้อย่างไร


16

ฉันสร้างปลั๊กอินของฉันเอง ทุกอย่างดูเหมือนจะโอเค แต่สิ่งหนึ่งที่ฉันต้องการทำในปลั๊กอินนั้นคือการเปลี่ยนเส้นทางไปยังหน้าการตั้งค่าปลั๊กอินที่เกี่ยวข้องเมื่อมีการเปิดใช้งานปลั๊กอิน

ตัวอย่างเช่น:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

มีวิธีการเปลี่ยนเส้นทางไปยังหน้าที่เกี่ยวข้องในการเปิดใช้งานเช่นด้วยregister_activation_hook?

คำตอบ:


17

อาจใช้wp_redirect()ฟังก์ชันในฮุคการเปิดใช้งาน ในตัวอย่างต่อไปนี้myplugin_settingsเป็นตัวยึดตำแหน่ง โดยปกติแล้วสิ่งนี้คือสิ่งที่$hook_suffixคุณได้รับจาก$hook_suffix = add_menu_page( /* etc. */ ); ฟังก์ชันที่คล้ายกัน

รหัสนี้ไม่ทำงานอ่านด้านล่าง

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

อ้างอิง:

  1. ลงทะเบียนฮุกการเปิดใช้งาน
  2. ADMIN_URL ()

แก้ไข

ดูเหมือนว่าการเปลี่ยนเส้นทางภายใน hook การเปิดใช้งานก่อนที่จะมีการเปิดใช้งานปลั๊กอินอย่างมีประสิทธิภาพอาจเป็นเพราะการเรียก exit () ก่อนการเปิดใช้งานจะดำเนินการ รหัสนี้ดูเหมือนว่าจะทำงานได้ดีโดยใช้ activook hoook actived:

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

หากคุณใช้รหัสนี้นอกไฟล์ปลั๊กอินหลักคุณจะต้องทำการเปลี่ยน__FILE__เส้นทางของไฟล์ปลั๊กอินหลัก

คิด

การเปลี่ยนเส้นทางผู้ใช้หลังจากปลั๊กอินของคุณถูกเปิดใช้งานไม่ใช่วิธีที่ดีมาก ใน Wordpress คุณสามารถเปิดใช้งานปลั๊กอินจำนวนมากได้ จะเกิดอะไรขึ้นหากคุณทำการเปลี่ยนเส้นทางในสถานการณ์นี้ คุณจะหยุดการเปิดใช้งานปลั๊กอินบางส่วนไม่ได้หากปลั๊กอินของคุณถูกเปิดใช้งานล่าสุด แต่แน่นอนว่าคุณกำลังทำลายประสบการณ์การใช้งานของผู้ใช้


1
วิธีการ saner มาก +1
ไกเซอร์

ใครก็ตามที่ได้รับปัญหาโดยใช้ปลั๊กอินนี้ไม่สามารถเปิดใช้งานและคุณได้รับข้อผิดพลาด "คุณไม่ได้รับอนุญาตให้ดูหน้านี้" แทน? ฉันขอผิดหน้าเมนูของฉันหรือไม่ ดูเหมือนว่าการexit;โทรจะตัดการเปิดใช้งานสั้น ๆ
Andy Adams

ข้อผิดพลาดของการอนุญาตเป็นเพราะคุณไม่ได้เปลี่ยน URL การเปลี่ยนเส้นทางจาก'options-general.php?page=myplugin_settings'เป็นสิ่งที่แตกต่างและถูกต้อง อย่างไรก็ตามexitในเบ็ดการเปิดใช้งานจะถูกดำเนินการก่อนที่จะเปิดใช้งานปลั๊กอินอย่างมีประสิทธิภาพจึงไม่ทำงาน ฉันได้แก้ไขคำตอบด้วยรหัสการทำงานใหม่
cybmeta

รหัสส่งผลให้ส่วนหัวส่งไปแล้ว .. มีวิธีแก้ไขไหม?
Latheesh VM Villa

7

คุณควรทำสิ่งนี้ได้:

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

UPDATE

แม้ว่าจะเป็นความคิดเห็นแบบอินไลน์โปรดจำไว้ว่า:

wp_redirect ()ไม่ออกโดยอัตโนมัติและควรตามด้วยออกเกือบทุกครั้ง

ตัวอย่างที่เฉพาะเจาะจง

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

อัพเดท 10/29/2013

ไม่ได้กล่าวถึง แต่โปรดทราบว่าโซลูชันของฉันมีความสามารถในการตรวจสอบว่าเป็นกรณีหรือไม่ที่จะเปลี่ยนเส้นทางไปยังหน้าการตั้งค่าปลั๊กอิน ตรวจสอบและถ้าเงื่อนไขในmy_plugin_activatemy_plugin_redirect

หวังว่ามันจะช่วย!


ไม่ควรมีเป็นexit()รอบwp_redirect()?
ไกเซอร์

2
@kaiser ตอบรับการอัปเดต
iEmanuele

3

สวัสดีฉันได้ใช้การเปลี่ยนเส้นทางรหัสปอดหลังจากเปิดใช้งานปลั๊กอิน คุณสามารถใช้รหัสนี้ มันทำงานได้ดี

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_ คือคำนำหน้าปลั๊กอินของฉัน & "edit.php? post_type = หัวเรื่อง & page = news-headline" เป็นหน้าเปลี่ยนเส้นทาง โปรดแทนที่สิ่งเหล่านี้ คุณสามารถดูบทช่วยสอนเพิ่มเติมได้ที่e2soft.com
csehasib
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.