我们在开发 wordpress 主题的过程中一般会对分类进行一些其他字段的设置来完成一些可控性的功能,需要给分类设置自定义字段。今天为大家讲讲WordPress主题开发给分类栏目及标签添加自定义字段教程。
一般来说,文章的标题组成为 文章标题 – 网站名称,我们需要某些分类的文章的标题只有 文章标题 ,可以用以下方法来实现。首先我们给分类添加一个字段来控制是否启用上面说的那个功能。
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 钩子有影响。