本文目录

[隐藏]

1PHP部分

1.1安全第一

1.2定义一些用得上的常量

1.3I18n=国际化支持

1.4添加菜单项

1.5美化下菜单项前面的icon

1.6设置页面/后台的HTML结构

1.7载入ajax的js文件

1.8处理ajax的响应

2javascript文件

3下载完整的示例

这篇文章说下如何为自制的Wordpress主题/插件的设置后台添加ajax支持。

aad=Adding Ajax support in wordpress aDmin (总不能全是A吧)

PHP部分

安全第一

1

2

/*Exit if accessed directly:安全第一,如果是直接载入,就退出.*/

defined( 'ABSPATH' ) or exit;

/*Exit if accessed directly:安全第一,如果是直接载入,就退出.*/ defined( ‘ABSPATH’ ) or exit;

定义一些用得上的常量

其实越少越好!

1

2

/*Define a(some) Constant(s):定义常量(没有复数的中文的优势显示出来了吧)*/

defined('AAD_PLUGIN_URL') or define('AAD_PLUGIN_URL', plugin_dir_url( __FILE__ ));

/*Define a(some) Constant(s):定义常量(没有复数的中文的优势显示出来了吧)*/ defined(‘AAD_PLUGIN_URL’) or define(‘AAD_PLUGIN_URL’, plugin_dir_url( __FILE__ ));

I18n=国际化支持

其实就是做个语言包,让使用者可以自行翻译语言包。

1

2

3

4

5

6

7

8

/*

I18n

*/

function aad_load_textdomain() {

$aad_lang_dir = dirname( plugin_basename( __FILE__ ) ) . '/lang/';

load_plugin_textdomain( 'aad', false, $aad_lang_dir );

}

add_action( 'init', 'aad_load_textdomain' );

/* I18n */ function aad_load_textdomain() { $aad_lang_dir = dirname( plugin_basename( __FILE__ ) ) . ‘/lang/’; load_plugin_textdomain( ‘aad’, false, $aad_lang_dir ); } add_action( ‘init’, ‘aad_load_textdomain’ );

添加菜单项

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

function aad_admin_page() {

/*添加菜单,并指定一个全局Hook给它*/

global $aad_settings;

/*

Add sub menu page to the Settings menu:这个API将会把你想添加的菜单添加到setting(设置)菜单下;

add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);

我们要将自己的菜单添加为顶级菜单,所以,不用这个了。

*/

//$aad_settings = add_options_page(__('Admin Ajax Demo', 'aad'), __('Admin Ajax', 'aad'), 'manage_options', 'admin-ajax-demo', 'aad_render_admin');

/*

add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );

$position可选:

2 Dashboard=替代原有的仪表盘(首页),不合适;

4 Separator=仪表盘(首页)和文章之间分割线的位置;

5 Posts=仪表盘(首页)和文章之间正常的位置,这时候它和仪表盘(首页)的分割线还在

10 Media=替代原有的多媒体的位置;

15 Links=在新版本的Wordpress中,Link功能默认是隐藏的,也就是默认的,你是看不到这个菜单项的,所以这个位置也是可以的;

20 Pages=替代菜单项“页面”,不合适;

25 Comments=替代菜单项“评论”,不合适;

59 Separator=替代评论和外观之间分割线的位置,可以;

60 Appearance=替代菜单项“外观”,不合适;

65 Plugins=替代菜单项“插件”,不合适;

70 Users=替代菜单项“用户”,不合适;

75 Tools=替代菜单项“工具”,不合适;

80 Settings=替代菜单项“设置”,不合适;

99 Separator=替代WP后台菜单最下侧的分割线的位置,合适;

可以更大吗?可以。

*/

/*

使用自制的icon作为菜单项的标志

*/

//$aad_settings = add_menu_page(__('Admin Ajax Demo', 'aad'), __('Admin Ajax', 'aad'), 'manage_options', 'admin-ajax-demo','aad_render_admin', AAD_PLUGIN_URL. 'img/ajax.png', 99);

/*

准备使用wordpress自带的dashicon作为菜单项的标志,所以把$icon_url的值置为false

*/

$aad_settings = add_menu_page(__('Admin Ajax Demo', 'aad'), __('Admin Ajax', 'aad'), 'manage_options', 'admin-ajax-demo','aad_render_admin',false, 99);

}

add_action('admin_menu', 'aad_admin_page');

function aad_admin_page() { /*添加菜单,并指定一个全局Hook给它*/ global $aad_settings; /* Add sub menu page to the Settings menu:这个API将会把你想添加的菜单添加到setting(设置)菜单下; add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function); 我们要将自己的菜单添加为顶级菜单,所以,不用这个了。 */ //$aad_settings = add_options_page(__(‘Admin Ajax Demo’, ‘aad’), __(‘Admin Ajax’, ‘aad’), ‘manage_options’, ‘admin-ajax-demo’, ‘aad_render_admin’); /* add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position ); $position可选: 2 Dashboard=替代原有的仪表盘(首页),不合适; 4 Separator=仪表盘(首页)和文章之间分割线的位置; 5 Posts=仪表盘(首页)和文章之间正常的位置,这时候它和仪表盘(首页)的分割线还在 10 Media=替代原有的多媒体的位置; 15 Links=在新版本的Wordpress中,Link功能默认是隐藏的,也就是默认的,你是看不到这个菜单项的,所以这个位置也是可以的; 20 Pages=替代菜单项“页面”,不合适; 25 Comments=替代菜单项“评论”,不合适; 59 Separator=替代评论和外观之间分割线的位置,可以; 60 Appearance=替代菜单项“外观”,不合适; 65 Plugins=替代菜单项“插件”,不合适; 70 Users=替代菜单项“用户”,不合适; 75 Tools=替代菜单项“工具”,不合适; 80 Settings=替代菜单项“设置”,不合适; 99 Separator=替代WP后台菜单最下侧的分割线的位置,合适; 可以更大吗?可以。 */ /* 使用自制的icon作为菜单项的标志 */ //$aad_settings = add_menu_page(__(‘Admin Ajax Demo’, ‘aad’), __(‘Admin Ajax’, ‘aad’), ‘manage_options’, ‘admin-ajax-demo’,’aad_render_admin’, AAD_PLUGIN_URL. ‘img/ajax.png’, 99); /* 准备使用wordpress自带的dashicon作为菜单项的标志,所以把$icon_url的值置为false */ $aad_settings = add_menu_page(__(‘Admin Ajax Demo’, ‘aad’), __(‘Admin Ajax’, ‘aad’), ‘manage_options’, ‘admin-ajax-demo’,’aad_render_admin’,false, 99); } add_action(‘admin_menu’, ‘aad_admin_page’);

美化下菜单项前面的icon

下面的示例采用插件/主题自带图片的方案仅供参考,建议使用图标字体,下面使用了Wordpress自带的dashicons字体:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function aad_style(){

/*

css内容较少的情况下,使用admin_head这个hook直接输出比较合适;如果css内容较多,使用自制的icon作为菜单项的标志用admin_enqueue_scripts这个Hook载入css文件比较合适.

*/

/*

限制菜单项前面的icon的尺寸

*/

//$output='';

/*

使用Wordpress自带的图标字体dashicons;

更多详情:http://suoling.net/wordpress-dashicons/

*/

$output='';

echo $output;

}

add_action('admin_head','aad_style');

function aad_style(){ /* css内容较少的情况下,使用admin_head这个hook直接输出比较合适;如果css内容较多,使用自制的icon作为菜单项的标志用admin_enqueue_scripts这个Hook载入css文件比较合适. */ /* 限制菜单项前面的icon的尺寸 */ //$output='’; /* 使用Wordpress自带的图标字体dashicons; 更多详情:http://suoling.net/wordpress-dashicons/ */ $output='’; echo $output; } add_action(‘admin_head’,’aad_style’);

设置页面/后台的HTML结构

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

/*

开始处理页面输出

*/

function aad_render_admin() {

?>

<?php _e('Admin Ajax Demo', 'aad'); ?>

}

/* 开始处理页面输出 */ function aad_render_admin() { ?>

<?php _e(‘Admin Ajax Demo’, ‘aad’); ?>

”/> ” class=”waiting” id=”aad_loading” style=”display:none;”/>

<?php }

载入ajax的js文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/*

载入ajax的js文件

*/

function aad_load_scripts($hook) {

global $aad_settings;

/*用上了前面定义的全局菜单Hook,如果不是这个,就返回*/

if( $hook != $aad_settings )

return;

/*载入ajax的js文件,也可以载入其他的javascript和/或css等*/

wp_enqueue_script('aad-ajax', AAD_PLUGIN_URL . 'js/aad-ajax.js', array('jquery'));

/*

创建验证nonce

它会输出类似于:

var aad_vars = {"aad_nonce":"5c18514d34"};

]]>

之类的被注释掉的js到HTML。

*/

wp_localize_script('aad-ajax', 'aad_vars', array(

'aad_nonce' => wp_create_nonce('aad-nonce')

)

);

}

add_action('admin_enqueue_scripts', 'aad_load_scripts');

/* 载入ajax的js文件 */ function aad_load_scripts($hook) { global $aad_settings; /*用上了前面定义的全局菜单Hook,如果不是这个,就返回*/ if( $hook != $aad_settings ) return; /*载入ajax的js文件,也可以载入其他的javascript和/或css等*/ wp_enqueue_script(‘aad-ajax’, AAD_PLUGIN_URL . ‘js/aad-ajax.js’, array(‘jquery’)); /* 创建验证nonce 它会输出类似于: 之类的被注释掉的js到HTML。 */ wp_localize_script(‘aad-ajax’, ‘aad_vars’, array( ‘aad_nonce’ => wp_create_nonce(‘aad-nonce’) ) ); } add_action(‘admin_enqueue_scripts’, ‘aad_load_scripts’);

处理ajax的响应

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/*

处理ajax的返回数据

*/

function aad_process_ajax() {

/*用nonce进行权限验证,以保证安全*/

if( !isset( $_POST['aad_nonce'] ) || !wp_verify_nonce($_POST['aad_nonce'], 'aad-nonce') )

die('Permissions check failed');

/*

输出一些查询数据

*/

$posts = get_posts(array('post_type' => 'post', 'posts_per_page' => 5));

if( $posts ) :

echo '

  • ';

foreach($posts as $post) {

echo '

' . get_the_title($post->ID) . ' - ' . __('View post', 'aad') . '';

}

echo '

';

else :

echo '

' . __('No results found', 'aad') . '

';

endif;

die();

}

add_action('wp_ajax_aad_get_results', 'aad_process_ajax');

/Yeah!All done!

/* 处理ajax的返回数据 */ function aad_process_ajax() { /*用nonce进行权限验证,以保证安全*/ if( !isset( $_POST[‘aad_nonce’] ) || !wp_verify_nonce($_POST[‘aad_nonce’], ‘aad-nonce’) ) die(‘Permissions check failed’); /* 输出一些查询数据 */ $posts = get_posts(array(‘post_type’ => ‘post’, ‘posts_per_page’ => 5)); if( $posts ) : echo ‘

  • ’; foreach($posts as $post) { echo ‘
  • ’ . get_the_title($post->ID) . ‘ – ID)%20.%20′”>’ . __(‘View post’, ‘aad’) . ‘’; } echo ‘

’; else : echo ‘

’ . __(‘No results found’, ‘aad’) . ‘

’; endif; die(); } add_action(‘wp_ajax_aad_get_results’, ‘aad_process_ajax’); /Yeah!All done!

javascript文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

jQuery(document).ready(function($) {

$('#aad-form').submit(function() {

/*提交过程*/

/*让loading图标显示*/

$('#aad_loading').show();

/*让提交按钮不可用*/

$('#aad_submit').attr('disabled', true);

/*响应数据的准备*/

data = {

action: 'aad_get_results',

aad_nonce: aad_vars.aad_nonce

};

/*返回相应数据*/

$.post(ajaxurl, data, function (response) {

/*把返回数据显示在指定ID的节点*/

$('#aad_results').html(response);

/*隐藏loading图标*/

$('#aad_loading').hide();

/*让提交按钮可用*/

$('#aad_submit').attr('disabled', false);

});

return false;

});

}

下载完整的示例

wordpress主题ajax,为自制WordPress主题/插件的后台设置页面添加ajax支持相关推荐

  1. wp admin themes.php,wordpress主题后台制作教程-添加简单的设置选项|wordpress主题定制-阿树工作室...

    前面我们知道了怎样在wordpress后台添加一个设置页面,有了设置页面,我们只需要在这个页面添加上设置表单,然后保存数据即可.这篇教程我们以实例来讲述怎样添加一个设置选项. 同样的我们还是使用默认主 ...

  2. wordpress 邮件_停止在WordPress中使用一次性电子邮件地址

    wordpress 邮件 Spammers are everywhere, they use automated software that crawls the web in search of w ...

  3. WordPress仿抖音短视频主题插件

    WordPress仿抖音短视频主题插件 安装包大小:9.13MB 出品方名称:WordPress组织 已包含服务:短视频上传.短视频标签.自动添加水印.带水印短视频下载.作者主页.点赞.评论.聊天 服 ...

  4. WordPress常用模板函数 修改或自制WordPress主题必备

    对于很多WordPress新手来说,不懂任何代码的情况下去瞎改WordPress主题,得出的效果往往会出现语法错误之类的东西或效果不尽人意.想要修改 WordPress主题模板文件最基本的当然要懂得H ...

  5. 自制WordPress响应式主题-9IPHP 上线了~~

    为什么80%的码农都做不了架构师?>>>    想做一个自己的主题很久了,但一直是刚开始就放弃,这次终于坚持做下来了~~ 虽然说很多代码是搬的别人的,虽然说布局是仿的别人的,但是总之 ...

  6. wordpress主题_如何提高WordPress主题的性能

    wordpress主题 This article is part of a series created in partnership with SiteGround. Thank you for s ...

  7. WordPress轻拟物博客主题niRvana

    WordPress轻拟物主题niRvana,设计上不再趋从于现有的扁平风,我认为是时候从极致的扁平稍微向拟物致敬了,因此采用了轻拟物的风格.niRvana 设计和样式更加新颖,一眼看上去就会被他吸引住 ...

  8. WordPress主题-The7 v9.16.0主题模板

    介绍: WordPress强大多功能主题模板The7 v9.16.0 已激活版本完全兼容大多数插件, The7可以与WPBakery Page Builder(原Visual Composer)和Ul ...

  9. wordpress创建_如何创建WordPress儿童主题

    wordpress创建 I have been blogging for a long time now and I use WordPress in all my blogs. Its easy t ...

最新文章

  1. “5G杀手级应用”Cloud VR 华为如何打响5G第一枪
  2. linux awk命令
  3. SpringBoot 根据传参返回不同的内容
  4. 282021年湖南高考成绩查询,2010年湖南高考成绩查询
  5. JavaScript 模块化编程(一):模块的写法
  6. windows+nginx+tomcat实现集群负载均衡(生产环境必读)
  7. 关于window.showModalDialog()返回值的学习
  8. rac部署过程的任务列表
  9. C++向函数传递数组
  10. python---之super()继承,解决钻石继承难题
  11. 阿里云云计算 21 VPC的概念
  12. Git可视化工具GitKraKen基本使用
  13. python如何删除代码_删除代码(上)
  14. 关键点提取:单目3D检测的点睛之笔
  15. crentso7.4+rpm方式安装MySQL5.7.22报错:安装冲突conflicts
  16. 谷歌关闭中国音乐搜索服务--有点可惜
  17. Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI、IMSI、型号、厂商等
  18. Godaddy域名解析设置
  19. excel 根据某单元格的值设置整行颜色(条件格式)
  20. transformers5--t5模型中encoder与decoder内容不同解读

热门文章

  1. pip intsall 遇到的各种问题
  2. 卡尔曼滤波——16.新的均值和方差
  3. Python可视化:Seaborn(三)
  4. 深入Python字典的内部实现
  5. Oracle 11G 64位发布出现错误
  6. linux下iscsi
  7. [转]如何用VS2005制作Web安装程序
  8. 去除html标签的工具类,Java正则匹配过滤移除html标签以及获取img完整标签工具类...
  9. IDEA 点击进入方法内部_Idea中,听说会了Debug,你就离大佬不远了!
  10. XML DOM---解析xml dom