Làm cách nào để chuyển hướng đến trang cài đặt sau khi plugin được kích hoạt?


16

Tôi đã tạo Plugin của riêng tôi. Mọi thứ có vẻ ổn nhưng một điều tôi muốn làm trong plugin đó là chuyển hướng đến trang cài đặt plugin tương ứng khi plugin được kích hoạt.

Ví dụ:
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

Có cách nào để chuyển hướng đến trang tương ứng khi kích hoạt, ví dụ như với register_activation_hook?

Câu trả lời:


17

Có thể sử dụng wp_redirect()chức năng trong móc kích hoạt. Trong ví dụ sau đây myplugin_settingslà một giữ chỗ. Thông thường, điều này chỉ đơn giản là $hook_suffixbạn lấy lại từ $hook_suffix = add_menu_page( /* etc. */ ); và các chức năng tương tự.

MÃ NÀY KHÔNG LÀM VIỆC, ĐỌC BÊN DƯỚI

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

Người giới thiệu:

  1. Đăng ký móc kích hoạt
  2. admin_url ()

BIÊN TẬP

Chuyển hướng bên trong móc kích hoạt dường như được thực hiện trước khi plugin được kích hoạt hiệu quả, có thể do lệnh gọi exit () trước khi kích hoạt được thực thi. Mã này dường như làm việc tốt bằng activated_plugin hoook hành động:

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

Nếu bạn sử dụng mã này bên ngoài tệp plugin chính, bạn sẽ cần phải đánh giá lại __FILE__với đường dẫn của tệp plugin chính.

NGHĨ

Chuyển hướng người dùng sau khi plugin của bạn đã được kích hoạt không phải là một cách tiếp cận rất tốt. Trong Wordpress, bạn có thể kích hoạt bổ sung hàng loạt. Điều gì xảy ra sau đó nếu bạn thực hiện chuyển hướng trong tình huống này? Bạn sẽ phá vỡ kích hoạt một số plugin, có thể không nếu plugin của bạn là lần cuối được kích hoạt, nhưng chắc chắn bạn đang phá vỡ trải nghiệm người dùng.


1
Cách tiếp cận nhiều hơn. +1
kaiser

Bất cứ ai khác gặp sự cố khi sử dụng plugin này khi plugin không kích hoạt và bạn gặp phải lỗi "Bạn không có quyền xem trang này"? Tôi đang móc trang menu của tôi sai? Có vẻ như exit;cuộc gọi đang cắt ngắn kích hoạt.
Andy Adams

Lỗi quyền là do bạn chưa thay đổi URL chuyển hướng từ 'options-general.php?page=myplugin_settings'một thứ khác và hợp lệ. Dù sao, exittrong móc kích hoạt được thực thi trước khi plugin được kích hoạt một cách hiệu quả, vì vậy nó không hoạt động. Tôi đã chỉnh sửa câu trả lời với một mã làm việc mới.
cybmeta

mã đang dẫn đến tiêu đề đã được gửi..tất cả cách khắc phục?
Biệt thự Leditesh VM

7

Bạn sẽ có thể làm điều đó như thế này:

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

CẬP NHẬT

Ngay cả khi đó là một nhận xét nội tuyến, hãy nhớ:

wp_redirect () không tự động thoát và hầu như luôn luôn được theo sau bởi thoát.

Ví dụ cụ thể

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

CẬP NHẬT 29/10/2013

Nó không được đề cập, nhưng xin lưu ý rằng giải pháp của tôi cung cấp khả năng kiểm tra xem có phải là trường hợp hay không thực hiện chuyển hướng đến trang cài đặt plugin. Kiểm tra my_plugin_activatevà nếu điều kiện trong my_plugin_redirect.

Hy vọng nó giúp!


Không nên có một exit()xung quanh wp_redirect()?
kaiser

2
@kaiser, trả lời cập nhật.
iEmanuele

3

Xin chào tôi đã sử dụng chuyển hướng mã bellows sau khi kích hoạt plugin. Bạn có thể sử dụng mã này. Nó hoạt động tốt.

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_ là tiền tố plugin của tôi & "edit.php? post_type = headline & page = news-headline" là trang chuyển hướng. xin vui lòng thay thế những cái này. Bạn có thể xem thêm hướng dẫn trên e2soft.com
csehasib
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.