我们正在开发WordPress 主题在这个过程中,一般会为其他一些字段设置分类来完成一些可控的功能,分类需要设置自定义字段。
例如,我们希望某个分类下的文章的SEO标题不显示站点名称。 这是什么意思? 一般来说,一篇文章的标题是由Post title-Sitename组成,而我们只需要Post title来表示某些分类文章的标题,可以通过下面的template-board-tuple编写的方法来实现。
首先,我们在分类中添加一个字段来控制是否启用上述功能。
add_action('category_add_form_fields','erphp_ct_add_category_field',20,2);
function erphp_ct_add_category_field(){
echo '<div class="form-field">
<label for="erphp_cat_title">标题去站名</label>
<select name="erphp_cat_title" id="erphp_cat_title" class="postform">
<option value="0">关闭</option>
<option value="1">开启</option>
</select>
<p class="description">分类下的文章标题里不带网站名</p>
</div>';
}
add_action('category_edit_form_fields','erphp_ct_edit_category_field',20,2);
function erphp_ct_edit_category_field($tag){
$erphp_cat_title = get_term_meta($tag->term_id,'erphp_cat_title',true);
echo '<tr class="form-field">
<th scope="row">
<label for="erphp_cat_title">标题去站名</label>
<td>
<select name="erphp_cat_title" id="erphp_cat_title" class="postform">
<option value="0" '. ('0'==$erphp_cat_title?'selected="selected"':'') .'>关闭</option>
<option value="1" '. ('1'==$erphp_cat_title?'selected="selected"':'') .'>开启</option>
</select>
<p class="description">分类下的文章标题里不带网站名</p>
</td>
</th>
</tr>';
}
add_action('created_category','erphp_ct_category_field_edited',20,1);
add_action('edited_category','erphp_ct_category_field_edited',20,1);
function erphp_ct_category_field_edited($term_id){
update_term_meta($term_id,'erphp_cat_title',$_POST['erphp_cat_title']);
}
上面的代码是添加一个[title to station name]为category设置option,使用category_add_form_fields、category_edit_form_fields、created_category、edited_category这四个hook来实现这个自定义字段在添加、编辑、保存时的处理。 具体来说,这4个钩子的用法模板兔我不会在这里谈论它。
然后,我们使用 wp_title 钩子来显示文章的 SEO 标题。
function erphp_ct_wp_title( $title, $sep ) {if(is_single()){
$erphp_ct = 0;
$categories = get_the_category();
if($categories) {
foreach($categories as $cat){
$erphp_cat_title = get_term_meta($cat->term_id,'erphp_cat_title',true);
if($erphp_cat_title){
$erphp_ct = 1;
break;
}
}
}
if($erphp_ct){
$title = get_the_title();
}
}
return $title;
}
add_filter( 'wp_title', 'erphp_ct_wp_title', 100, 2 );
一般只要把主题写在规范里,上面代码的功能就会生效,不会影响主题本身的wp_title钩子~
这是关于如何在 WordPress 中向类别和标签添加自定义字段的教程。 MOBANTU 就是这样。