wordpress-function

wordpress 插件开发总结

新增分类字段

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
class Ludou_Tax_Image{  

function __construct(){

// 新建分类页面添加自定义字段输入框
add_action( 'category_add_form_fields', array( $this, 'add_tax_image_field' ) );
// 编辑分类页面添加自定义字段输入框
add_action( 'category_edit_form_fields', array( $this, 'edit_tax_image_field' ) );

// 保存自定义字段数据
add_action( 'edited_category', array( $this, 'save_tax_meta' ), 10, 2 );
add_action( 'create_category', array( $this, 'save_tax_meta' ), 10, 2 );


} // __construct

/**
* 新建分类页面添加自定义字段输入框
*/
public function add_tax_image_field(){
?>
<div class="form-field">
<label for="term_meta[tax_image]">分类封面</label>
<input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="" />
<p class="description">输入分类封面图片URL</p>
</div><!-- /.form-field -->

<!-- TODO: 在这里追加其他自定义字段表单,如: -->

<!--
<div class="form-field">
<label for="term_meta[tax_keywords]">分类关键字</label>
<input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="" />
<p class="description">输入分类关键字</p>
</div>
-->
<?php
} // add_tax_image_field

/**
* 编辑分类页面添加自定义字段输入框
*
* @uses get_option() 从option表中获取option数据
* @uses esc_url() 确保字符串是url
*/
public function edit_tax_image_field( $term ){

// $term_id 是当前分类的id
$term_id = $term->term_id;

// 获取已保存的option
$term_meta = get_option( "ludou_taxonomy_$term_id" );
// option是一个二维数组
$image = $term_meta['tax_image'] ? $term_meta['tax_image'] : '';

/**
* TODO: 在这里追加获取其他自定义字段值,如:
* $keywords = $term_meta['tax_keywords'] ? $term_meta['tax_keywords'] : '';
*/
?>
<tr class="form-field">
<th scope="row">
<label for="term_meta[tax_image]">分类封面</label>
<td>
<input type="text" name="term_meta[tax_image]" id="term_meta[tax_image]" value="<?php echo esc_url( $image ); ?>" />
<p class="description">输入分类封面图片URL</p>
</td>
</th>
</tr><!-- /.form-field -->

<!-- TODO: 在这里追加其他自定义字段表单,如: -->

<!--
<tr class="form-field">
<th scope="row">
<label for="term_meta[tax_keywords]">分类关键字</label>
<td>
<input type="text" name="term_meta[tax_keywords]" id="term_meta[tax_keywords]" value="<?php echo $keywords; ?>" />
<p class="description">输入分类关键字</p>
</td>
</th>
</tr>
-->

<?php
} // edit_tax_image_field

/**
* 保存自定义字段的数据
*
* @uses get_option() 从option表中获取option数据
* @uses update_option() 更新option数据,如果没有就新建option
*/
public function save_tax_meta( $term_id ){

if ( isset( $_POST['term_meta'] ) ) {

// $term_id 是当前分类的id
$t_id = $term_id;
$term_meta = array();

// 获取表单传过来的POST数据,POST数组一定要做过滤
$term_meta['tax_image'] = isset ( $_POST['term_meta']['tax_image'] ) ? esc_url( $_POST['term_meta']['tax_image'] ) : '';

/**
* TODO: 在这里追加获取其他自定义字段表单的值,如:
* $term_meta['tax_keywords'] = isset ( $_POST['term_meta']['tax_keywords'] ) ? $_POST['term_meta']['tax_keywords'] : '';
*/

// 保存option数组
update_option( "ludou_taxonomy_$t_id", $term_meta );

} // if isset( $_POST['term_meta'] )
} // save_tax_meta

} // Ludou_Tax_Image

// $wptt_tax_image = new Ludou_Tax_Image();

// add 新增编辑term_group字段

class Update_Term_Group{

function __construct(){

// 新建分类页面添加自定义字段输入框
add_action( 'category_add_form_fields', array( $this, 'mbt_add_category_field' ) );
// 编辑分类页面添加自定义字段输入框
add_action( 'category_edit_form_fields', array( $this, 'mbt_edit_category_field' ) );

// 保存自定义字段数据
add_action( 'edited_category', array( $this, 'mbt_taxonomy_metadate' ), 10, 1 );
add_action( 'create_category', array( $this, 'mbt_taxonomy_metadate' ), 10, 1 );


} // __construct

function mbt_add_category_field(){
echo '<div class="form-field">
<label for="term_group">term_group</label>
<select name="_term_order" id="term_group" value="">
<option value="0">未设置</option>
<option value="1">作者</option>
</select><br>
<p>term_group的值</p>
</div>';
}

// 分类编辑字段
function mbt_edit_category_field($tag){
echo '<tr class="form-field">
<th scope="row"><label for="term_group">term_group</label></th>
<td>
<select name="_term_order" id="term_group">
<option value="0">未设置</option>
<option value="1" ';
echo ( $tag->term_group == 1 ) ? 'selected' : '';
echo '>作者</option>
</select><br>
<span class="cat-num">'.$tag->name.' 的term_group</span>
</td>
</tr>';
}

// 保存数据
function mbt_taxonomy_metadate($term_id){
global $wpdb;
if( isset( $_POST['_term_order'] ) ) {$wpdb->update( $wpdb->terms,array('term_group' => $_POST['_term_order']),array( 'term_id'=> $term_id));}
}

}

// $update_term_group = new Update_Term_Group();

新增自定义分类

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
//  新增author分类

function author_init() {
// create a new taxonomy
$labels = array(
'name' => '作者',
'singular_name' => 'author',
'search_items' => '搜索' ,
'popular_items' => '热门' ,
'all_items' => '所有' ,
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => '编辑' ,
'update_item' => '更新' ,
'add_new_item' => '添加' ,
'new_item_name' => '作者名称',
'separate_items_with_commas' => '按逗号分开' ,
'add_or_remove_items' => '添加或删除',
'choose_from_most_used' => '从经常使用的类型中选择',
'menu_name' => '作者分类',
);
register_taxonomy(
'author',
'post',
array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'author' ),
)
);
}
add_action( 'init', 'author_init' );

短代码

创建回调函数

当发现短代码的时候,它会被一个称作回调函数的一段代码所代替。所以我们先创建一个函数,从数据库中获取最新的文章。

1
2
3
4
5
6
7
8
9
10
function recent_posts_function() {
query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 1));
if (have_posts()) :
while (have_posts()) : the_post();
$return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>';
endwhile;
endif;
wp_reset_query();
return $return_string;
}

如上所示,我们查询数据库,获取最新的文章,并返回一个带有链接的字符串。值得注意的是,回调函数并不打印任何内容,而是返回一个字符串。

注册短代码

现在,我们告诉Wordpress这个函数是一个短代码:

1
2
3
function register_shortcodes(){
add_shortcode('recent-posts', 'recent_posts_function');
}

当在文章的内容中发现短代码 [recent-posts] 时,将会自动调用 recent_posts_function() 函数,我们需要确保短代码的名字是唯一的,以避免重复。

Hook into WordPress

为了能够执行 recent_posts_function() 函数,我们需要把它绑定在 WordPress 的初始化钩子中。

1
add_action( 'init', 'register_shortcodes');