插件位置
需要注意的是,由于在WordPress中可以配置wp-content/plugins/目录的位置,所以你必须使用plugin_dir_path()
和plugins_url()
两个函数来获取插件的路径。
WordPress 查询数据库
查询
1
2
3
4
5
6
7
8
|
global
$
wpdb
;
$
fivesdrafts
=
$
wpdb
->
get_results
(
"SELECT ID, post_title FROM $wpdb->posts
WHERE post_status = 'publish' AND post_author = 1"
)
;
foreach
(
$
fivesdrafts
as
$
fivesdraft
)
{
echo
$
fivesdraft
->
ID
.
" "
.
$
fivesdraft
->
post_title
.
"<br>"
;
}
die
(
)
;
|
输出:
WordPress是一个非常强大的内容管理系统,非常适合搭建CMS网站,也非常适合二次开发。
本文就为大家介绍一下,在二次开发中非常重要的一个环节–数据库操作。
wpdb类
为了方便二次开发,WordPress封装了一个非常友好的数据库操作类:wpdb
。
wpdb类封装了所有的数据库操作函数,它是基于开源的数据库操作类ezSQL进行修改的,使其更适合于WordPress,也使其仅适用于mySQL数据库。
同时,WordPress还提供了一个全局变量$wpdb
,并将其实例化为wpdb类的对象。
这样我们就可以直接使用$wpdb来调用所有的数据库操作函数。
注意 使用前 一定要 global $wpdb
;
query函数
这个函数是最基本的操作函数,$query为SQL语句,提交给数据库执行,结果分两种情况:
1). 如果是insert|delete|update|replace
, 返回受影响行数,在insert|replace
这种情况下,该函数会用$this->insert_id
记录下新插入的ID。
2). 如果是“select”,该会用$this->last_result记录下查询到结果集,返回查询到的记录行数。
如果出错,则返回FALSE。
实例:
1
2
3
4
5
6
7
8
9
10
|
<?php
$wpdb
->
query
(
"
UPDATE $wpdb->posts
SET post_parent = 7
WHERE ID = 15 AND post_status = 'static'
"
)
;
?>
|
escape函数
使用反斜线引用数据,也就是使用魔术引号。
实例:
1
2
3
4
5
6
|
<?php
$name
=
$wpdb
->
escape
(
$name
)
;
$email
=
$wpdb
->
escape
(
$email
)
;
$wpdb
->
query
(
"INSERT INTO myusers (id, name, email) VALUES (NULL, '$name', '$email')"
)
;
?>
|
insert函数
这是插入记录函数,第一个参数是表的字段数组,第二个是数据数组,第三个用于规定$data中每个值的数据类型。插入数据返回1,否则为0。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?
$wpdb
->
insert
(
'table'
,
array
(
'column1'
=
>
'value1'
,
'column2'
=
>
123
)
,
array
(
'%s'
,
'%d'
)
)
;
?>
|
update函数
这是更新记录函数,第一个参数是表的字段数组,第二个是数据数组,第三个是条件数组,第四个和第五个分别用于规定$和$where中每个值的数据类型。更新了为1,否则为0。
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
$wpdb
->
update
(
'table'
,
array
(
'column1'
=
>
'value1'
,
// string
'column2'
=
>
'value2'
// integer (number)
)
,
array
(
'ID'
=
>
1
)
,
array
(
'%s'
,
// value1
'%d'
// value2
)
,
array
(
'%d'
)
)
;
?>
|
get_var函数
这个只返回一个值,默认是第0行第0列。如果$query
不为空,首先执行查询,如果$query为空的话,则表示从cache中选出;然后返回第X列第Y行的值。
实例:
1
2
3
4
5
|
<?
$user_count
=
$wpdb
->
get_var
(
$wpdb
->
prepare
(
"SELECT COUNT(*) FROM $wpdb->users;"
)
)
;
echo
"<p>User count is {$user_count}</p>"
;
?>
|
get_row函数
返回一行,$output指定返回的类型,可以是ARRAY_A(关联数组)、ARRAY_N(数字数组)或者OBJECT(对象)。$y指定第几行。
实例:
默认情况下,$output的值为OBJECT,那么用法如下:
1
2
3
4
5
|
<?php
$mylink
=
$wpdb
->
get_row
(
"SELECT * FROM $wpdb->links WHERE link_id = 10"
)
;
echo
$mylink
->
link_id
;
// prints "10"
?>
|
如果$output的值为ARRAY_A,那么用法如下:
1
2
3
4
5
|
<?php
$mylink
=
$wpdb
->
get_row
(
"SELECT * FROM $wpdb->links WHERE link_id = 10"
,
ARRAY_A
)
;
echo
$mylink
[
'link_id'
]
;
// prints "10"
?>
|
如果$output的值为ARRAY_N,那么用法如下:
1
2
3
4
5
|
<?php
$mylink
=
$wpdb
->
get_row
(
"SELECT * FROM $wpdb->links WHERE link_id = 10"
,
ARRAY_N
)
;
echo
$mylink
[
1
]
;
// prints "10"
?>
|
get_col函数
返回一列,$x指定第几列。
实例:
1
2
3
4
5
6
7
|
<?
$names
=
$wpdb
->
get_col
(
"SELECT name, email FROM myusers"
,
0
)
foreach
(
$names
as
$name
)
{
echo
$name
;
}
?>
|
get_results函数
返回查询的结果集,允许以ARRAY_A、ARRAY_N或者OBJECT三种方式返回。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
$fivesdrafts
=
$wpdb
->
get_results
(
"
SELECT ID, post_title
FROM $wpdb->posts
WHERE post_status = 'draft'
AND post_author = 5
"
)
;
foreach
(
$fivesdrafts
as
$fivesdraft
)
{
echo
$fivesdraft
->
post_title
;
}
?>
|
get_col_info函数
返回字段信息。
1
2
3
4
5
|
<?php
$col_name
=
$wpdb
->
get_col_info
(
'name'
,
0
)
;
echo
$col_name
;
?>
|
prepare函数
这是一个可变参数函数,即函数的参数个数不确定。$query为SQL语句,其中可以包含像%s和%d这样的占位符,其它所有非占位符里面的%都要使用%%来代替。由于SQL语句中可能含有像单引号、双引号这样的特殊字符,如果不进行处理就直接提交给数据库,可能会导致错误或者出现安全问题。为此,我们可以通过prepare函数来对SQL语句进行。其实该函数的用法非常简单,就跟C语言中的sprintf()和vsprintf()差不多。
用法:
1
2
|
<?php
$sql
=
$wpdb
->
prepare
(
'query'
[
,
value_parameter
,
value_parameter
.
.
.
]
)
;
?>
|
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?
$metakey
=
"Harriet's Adages"
;
$metavalue
=
"WordPress' base interface is like Sunday Morning: Easy."
;
$wpdb
->
query
(
$wpdb
->
prepare
(
"
INSERT INTO $wpdb->postmeta
( post_id, meta_key, meta_value )
VALUES ( %d, %s, %s )
"
,
10
,
$metakey
,
$metavalue
)
)
;
?>
|
其他
另外还有两个常量:SAVEQUERIES和WP_DEBUG。设置SAVEQUERIES常量为TRUE,可以把在里执行的所有查询及其停止时间保存到$this->queries这个数组中,以后调试的时候可以使用;而设置WP_DEBUG常量为TRUE,则可以输出错误。不过,这两个常量开关默认都没有打开,我们在测试的时候,可以在wp_config.php文件中将其开启。