我们在开发WordPress主题的过程中一般会对分类进行一些其他字段的设置来完成一些可控性的功能,需要给分类设置自定义字段。
比如我们希望某个分类下的文章的SEO标题不显示站名,这个是什么意思呢?一般来说,文章的标题组成为Post title - Sitename,我们需要某些分类的文章的标题只有Post title,可以用模-板-兔写的以下方法来实现。
首先我们给分类添加一个字段来控制是否启用上面说的那个功能。
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']); }
上面的代码就是给分类添加了一个【标题去站名】的设置选项,用到了category_add_form_fields、category_edit_form_fields、created_category、edited_category这4个钩子来分别实现添加、编辑、保存时处理这个自定义字段,具体这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就讲到这了。
0 个评论