wordpress插件开发

本文最后更新于:9 天前

插件路径

在wp-content/plugins下创建一个目录/主文件

文件头

在创建好的test.php下,写入文件头

1
2
3
4
5
6
7
8
9
<?php
/*
Plugin Name: 插件名称
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: 插件的简单描述
Version: 插件版本号, 例如: 1.0
Author: 插件作者
Author URI: http://URI_Of_The_Plugin_Author作者地址
*/

这部分将让wordpress识别插件,并在后台显示

规范

  • 都加入自己的前缀(如pot_),防止和现存函数冲突

常用函数

activate/deactivate

activate()函数在一个插件启用的时候触发

1
2
3
4
5
6
7
8
9
10
11
<?php

register_activation_hook( __FILE__, 'boj_install');
function boj_install() {
if( version_compare( get_bloginfo( 'version' ), '3.1', '<' ) ) {

deactivate_plugins( basename( __FILE__ )); //禁用插件
}
}

?>

deactivate函数在插件被禁用的时候触发(注意禁用!=卸载)

1
2
3
4
5
6
7
8
9
10
11
12
13
//<?php register_deactivation_hook( $file, $function );

<?php

register_deactivation_hook( __FILE__, 'boj_myplugin_uninstall' );

function boj_myplugin_unstall() {

// 执行内容

}

?>

钩子函数

add

1
2
3
<?php
add_action( $tag, $function, $priority, $accepted_args );
?>

参数说明:

  • $tag – 你的函数执行时代动作钩子的名称。
  • $function – WordPress 要调用的函数名。
  • $priority – 一个表示动作调用顺序的整数,默认是10。数字越小,这个函数越早被调用。
  • $accepted_args – 动作钩子要传递给你的函数的参数个数。默认只有一个参数。

当调用这个函数之后,会调用到wp自己实现的do_action($tag)钩子,如当调用do_action(‘wp_head’),调用这个钩子的时候就会把数据插入到前台文章的<head>标签中

1
2
3
4
5
6
7
function my_custom_action(){
echo '666';
}

test();

add_action('wp_head',"my_custom_action",0);//这里设置了优先级为0

除了wp_head,还有一些钩子,如wp_footer

remove

用法同add相同

1
2
3
<?php
remove_action( $tag, $function_to_remove, $priority, $accepted_args );
?>

参数类似于 do_action()。要成功的从一个钩子中删除一个动作, $tag, $function_to_remove, 和 $priority 必须完全的复合 do_action() 中使用的参数。否则动作不会被溢出,同时 remove_action() 返回 flase

has_action

用来判断某个钩子是否包含一些动作

1
2
3
<?php
has_action( $tag, $function_to_check );
?>

HTTP请求

wp_remote_get()

1
2
3
4
5
6
7
8
9
10
11
$response = wp_remote_get('https://example.com/api/data');

if (is_wp_error($response)) {
// 处理错误
$error_message = $response->get_error_message();
echo "Something went wrong: $error_message";
} else {
// 处理响应
$body = wp_remote_retrieve_body($response);
echo $body;
}

wp_remote_post()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
```php
$response = wp_remote_post('https://example.com/api/update', array(
'body' => array(
'key1' => 'value1',
'key2' => 'value2',
)
));

if (is_wp_error($response)) {
// 处理错误
$error_message = $response->get_error_message();
echo "Something went wrong: $error_message";
} else {
// 处理响应
$body = wp_remote_retrieve_body($response);
echo $body;
}
  • wp_remote_retrieve_body(): 用于从响应中提取正文内容
  • wp_remote_retrieve_headers(): 用于提取响应头
  • wp_remote_retrieve_response_code(): 获取响应的 HTTP 状态码
  • wp_remote_retrieve_response_message(): 获取响应的 HTTP 状态信息

wp_remote_request()

更加灵活的方式

1
2
3
4
5
$response = wp_remote_request('https://example.com/api/data', array(
'method' => 'PUT',
'body' => array('key' => 'value'),
));
// 处理响应或错误

WP_Http 类

更加底层

1
2
3
4
5
6
$http = new WP_Http();
$response = $http->request('https://example.com/api/data', array(
'method' => 'POST',
'body' => array('key' => 'value'),
));
// 处理响应或错误

例子:

1
2
3
4
5
6
function http_test(){
$http = new WP_Http();
$res = $http->request("http://47.**。***.97:7890");
}

add_action("init","http_test");//init在wordpress加载初始化的时候执行

UA里面会带上自己的url还有版本信息

参考文章