WordPress让主题激活后跳转到设置页

日期: 标签:WordPress教程 12 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我

     对于很多WordPress主题作者来说,往往会添加一个主题的设置页面,主题启用后还要做一些配置才能正常使用。有些作者喜欢把设置页面的链接放到后台的外观菜单下,而有些作者喜欢把设置页面的链接放到设置菜单下,这就给用户造成一些困惑,不知道去哪打开主题设置页面,或许有些用户还不知道有主题设置这回事呢,要知道用户都是很懒的。

主题启用跳转

     所以最好的办法是,在外观 - 主题 中点击启用主题后,立马跳转到主题设置页,让用户知道还要设置一些参数。我们只需在主题的functions.php中加入以下PHP代码即可:

global $pagenow;
if ( is_admin() && isset( $_GET['activated'] ) && $pagenow == 'themes.php' ) {
   // admin.php?page=theme-settings-slug 改成你的主题设置页面网址
   wp_redirect( admin_url( 'admin.php?page=theme-settings-slug' ) );
   exit;
}

     另外,Sola同学提供了两个更好的方法,同样也只需放到functions.php中。
     方法一:

add_action( 'load-themes.php', 'Init_theme' );
function Init_theme(){
  global $pagenow;

  if ( 'themes.php' == $pagenow && isset( $_GET['activated'] ) ) {
    // options-general.php 改成你的主题设置页面网址
    wp_redirect( admin_url( 'options-general.php' ) );
    exit;
  }
}

     方法二:

add_action('after_switch_theme', 'Init_theme');
function Init_theme($oldthemename){
  global $pagenow;

  if ( 'themes.php' == $pagenow && isset( $_GET['activated'] ) ) {
    // options-general.php 改成你的主题设置页面网址
    wp_redirect( admin_url( 'options-general.php' ) );
    exit;
  }
}

插件启用跳转

     另外我们可以应用到自己写的插件中,让插件启用后跳转到插件设置页面:

global $pagenow;
if ( is_admin() && isset( $_GET['activated'] ) && $pagenow == 'plugins.php' ) {
   // options-general.php?page=plugin-page-slug 改成你的插件设置页面网址
   wp_redirect( admin_url( 'options-general.php?page=plugin-page-slug' ) );
   exit;
}

参考文章

     How To Redirect To Theme Settings Page After Activation
     Plugin API/Action Reference/load-themes.php
     Plugin API/Action Reference/after switch theme

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/wordpress-redirect-after-activation.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

12 条留言

点此留言
  1. Sola

    受你启发,我在官方文档里找到了几段能实现类似功能的代码
    1. 用load-themes.php action
    http://codex.wordpress.org/Plugin_API/Action_Reference/load-themes.php

    2. 用after_switch_theme action

    之所以会找别的代码,是因为我习惯于把代码组织到函数里,再挂到某个hook上,这段代码似乎是直接放到主题的funcitons.php的body中,也就是每次运行后台都要执行一次判断,用wordpress提供的激活主题的hooks,可以只在主题激活时运行。

    说了这么多,就是想找个人讨论,非常想讨论,快憋死了!

  2. Ludou

    @Sola 你的方法更好哦。不过直接在functions中运行判断代码,这些损失可以忽略不计了吧。

    看来你最近憋得慌,找个朋友出去逛逛或聊聊天吧。

  3. sola

    @Ludou 我写wp代码时习惯于用hooks组织代码,方便控制顺序和移除。露兜写程序厉害,我想聊的只是编程,别介意。

  4. Ludou

    @sola 看来我误会了,囧!

  5. sola

    @Ludou 其实嘛,是我写了一大堆,觉得有点夸张,掩饰一下…不好意思,不过真觉的这代码很有用,比如主题启用时可以设置缩略图尺寸。

  6. 小周博客

    博主您好,我想实现直接点击的一个button发起get或者post请求到function.php,由function.php接受请求并响应执行一段特定的代码。查了一些api或者普通的实现方法,可一直没弄明白一个问题就是 funciton.php接受get或者post请求是怎样的,或者说我该怎么请求到function.php
    可否给我点拨一二,多谢露兜

  7. 小周博客

    @小周博客 响应执行的代码包含wordpress 我尝试写单文件供接受请求并直接调用函数时,提示那些各种wp api无效。

  8. Ludou

    @小周博客 在单文件头包含WordPress的wp-load.php(在WP根目录下)即可,以下代码请注意修改wp-load.php路径:
    <?php

    // 调用WordPress API
    define('WP_USE_THEMES', false);
    require_once('wp-load.php');

    // 下面就可以使用WordPress的API了

  9. 小周博客

    @Ludou 多谢。测试成功了,但老觉得繁琐
    我换用了add_action('init', 'function');实现。
    直接ajax请求过去,直接执行,简单了许多。

  10. Ludou

    @小周博客 好吧,add_action函数在哪里定义?

  11. 小周博客

    @Ludou 抱歉,我描述有误。
    我是在主题的function.php中定义了一个函数,用wp的钩子hook在init上。然后里面写$_GET[]等等
    是从zww.me看来的。
    function theme_file_url(){
    if( isset($_GET['action'])&& $_GET['action'] == 'theme_file_url' ){
    nocache_headers(); //(FIX for IE)
    echo get_bloginfo('template_directory');
    die();
    }
    }
    add_action('init', 'theme_file_url');

  12. Louis Han

    这算是比较高级的功能了吧

发表留言