WordPress让主题激活后跳转到设置页
日期:
标签:WordPress教程
如需帮忙改代码,或者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
受你启发,我在官方文档里找到了几段能实现类似功能的代码
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,可以只在主题激活时运行。
说了这么多,就是想找个人讨论,非常想讨论,快憋死了!
@Sola 你的方法更好哦。不过直接在functions中运行判断代码,这些损失可以忽略不计了吧。
看来你最近憋得慌,找个朋友出去逛逛或聊聊天吧。
@Ludou 我写wp代码时习惯于用hooks组织代码,方便控制顺序和移除。露兜写程序厉害,我想聊的只是编程,别介意。
@sola 看来我误会了,囧!
@Ludou 其实嘛,是我写了一大堆,觉得有点夸张,掩饰一下…不好意思,不过真觉的这代码很有用,比如主题启用时可以设置缩略图尺寸。
博主您好,我想实现直接点击的一个button发起get或者post请求到function.php,由function.php接受请求并响应执行一段特定的代码。查了一些api或者普通的实现方法,可一直没弄明白一个问题就是 funciton.php接受get或者post请求是怎样的,或者说我该怎么请求到function.php
可否给我点拨一二,多谢露兜
@小周博客 响应执行的代码包含wordpress 我尝试写单文件供接受请求并直接调用函数时,提示那些各种wp api无效。
@小周博客 在单文件头包含WordPress的wp-load.php(在WP根目录下)即可,以下代码请注意修改wp-load.php路径:
<?php
// 调用WordPress API
define('WP_USE_THEMES', false);
require_once('wp-load.php');
// 下面就可以使用WordPress的API了
…
@Ludou 多谢。测试成功了,但老觉得繁琐
我换用了add_action('init', 'function');实现。
直接ajax请求过去,直接执行,简单了许多。
@小周博客 好吧,add_action函数在哪里定义?
@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');
这算是比较高级的功能了吧