Bagaimana cara mengarahkan ulang ke halaman pengaturan setelah plugin diaktifkan?

16

Saya membuat Plugin saya sendiri. Semuanya tampak baik-baik saja tetapi satu hal yang ingin saya lakukan dalam plugin itu adalah mengarahkan ulang ke halaman pengaturan plugin yang sesuai ketika plugin diaktifkan.

Sebagai contoh:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

Apakah ada cara untuk mengalihkan ke halaman terkait aktivasi, misalnya dengan register_activation_hook?

Vignesh Pichamani
sumber

Jawaban:

17

Mungkin menggunakan wp_redirect()fungsi di kait aktivasi. Dalam contoh berikut myplugin_settingsadalah placeholder. Biasanya ini hanyalah $hook_suffixAnda kembali dari $hook_suffix = add_menu_page( /* etc. */ ); dan fungsi serupa.

KODE INI TIDAK BEKERJA, BACA DI BAWAH INI

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

Referensi:

  1. Daftarkan kait aktivasi
  2. admin_url ()

EDIT

Pengalihan di dalam kait aktivasi tampaknya dilakukan sebelum plugin diaktifkan secara efektif, mungkin karena panggilan keluar () sebelum aktivasi dijalankan. Kode ini tampaknya bekerja dengan baik menggunakan activated_plugin tindakan hoook:

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

Jika Anda menggunakan kode ini di luar file plugin utama, Anda harus melakukan repalce __FILE__dengan path file plugin utama.

PIKIR

Mengarahkan pengguna setelah plugin Anda diaktifkan bukan pendekatan yang sangat baik. Di Wordpress Anda dapat mengaktifkan plugin secara massal. Apa yang terjadi jika Anda melakukan pengalihan dalam situasi ini? Anda akan merusak aktivasi beberapa plugin, mungkin tidak jika plugin Anda yang terakhir diaktifkan, tetapi yang pasti Anda merusak pengalaman pengguna.

cybmeta
sumber
1
Pendekatan yang jauh lebih waras. +1
kaiser
Adakah orang lain yang mendapatkan masalah menggunakan ini di mana plugin gagal untuk mengaktifkan dan Anda mendapatkan kesalahan "Anda tidak memiliki izin untuk melihat halaman ini"? Apakah saya salah menghubungkan halaman menu saya? Sepertinya exit;panggilan tersebut memotong pendek aktivasi.
Andy Adams
Kesalahan izin adalah karena Anda belum mengubah URL pengalihan dari 'options-general.php?page=myplugin_settings'sesuatu yang berbeda dan valid. Bagaimanapun, exitkait aktivasi diaktifkan sebelum plugin diaktifkan secara efektif, sehingga tidak berfungsi. Saya telah mengedit jawaban dengan kode kerja baru.
cybmeta
kode ini menghasilkan header yang sudah dikirim..bagaimana cara memperbaikinya?
Latheesh VM Villa
7

Anda harus dapat melakukannya seperti ini:

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

MEMPERBARUI

Bahkan jika itu adalah komentar sebaris, ingat:

wp_redirect () tidak keluar secara otomatis dan hampir selalu diikuti oleh exit.

Contoh spesifik

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

PEMBARUAN 10/29/2013

Itu tidak disebutkan, tetapi harap dicatat bahwa solusi saya menawarkan kemampuan untuk memeriksa apakah masalahnya atau tidak untuk melakukan pengalihan ke halaman pengaturan plugin. Periksa my_plugin_activatedan jika kondisi di my_plugin_redirect.

Semoga ini bisa membantu!

iEmanuele
sumber
Bukankah seharusnya ada exit()sekitar wp_redirect()?
kaiser
2
@iser, jawab diperbarui.
iEmanuele
3

Halo saya telah menggunakan kode bellow pengalihan setelah aktivasi plugin. Anda dapat menggunakan kode ini. Ini bekerja dengan baik.

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");
    }
 }
}
csehasib
sumber
nht_ adalah awalan plugin saya & "edit.php? post_type = judul & halaman = judul-berita" adalah halaman pengalihan. tolong gantikan ini. Anda dapat melihat lebih banyak tutorial di e2soft.com
csehasib