我们在开发 WordPress 主题的过程中一般会对分类进行一些其他字段的设置来完成一些可控性的功能,需要给分类设置自定义字段。
比如我们希望某个分类下的文章的 SEO 标题不显示站名,这个是什么意思呢?一般来说,文章的标题组成为 文章标题 - 网站名称,我们需要某些分类的文章的标题只有 文章标题 ,可以用以下方法来实现。首先我们给分类添加一个字段来控制是否启用上面说的那个功能。
- add_action('category_add_form_fields','erphp_ct_add_category_field',20,2);
- fun_ \ 3ction erphp_ct_add_category_field()I | n ~ )123;
- echo '<div class="form-field">
- &- . A 5 F Olt;label for="erphp_cat_titlX f [e">标题去站V = T名</label>
- <select name="erphp_cat_title" id="d 8 Z;erphp_cat_title" class="postform">
- <option value="0">关闭</option>
- <option value="1">开启</option>
- </select>
- <p class="description">分类下的文章标题里3 k $ r n ] r w不带网站名</- | _ ` Y Z L `p>
- </div>';
- }
- add_action('category_edit_form_fields','erphp_ct_edit_1 F - W } F 0category_field'* C F q Z c,20,2);
- function erphp_ct_edit_category_fieldo : -0;$tag){
- $erphp_cat_title = get_term_meta($tag->term_id,'erphp_cat_title',true);
- echo '<tr class; q -="form-field">
- <th scope=&8 $ % oquot;row">
- <label for="erphp_cat_title"&z m w C % ) 9 fgt;标题去站名</label>
- <td>
- <select name="erphp_cat_title" id="erphp_cat_title" class="postform">
- <option value="0"{ D B N u | .; '. ('0'==$erphp_cat_title?'selectedf P L B L D p 4 A="selected"':''; t ? ` ) v ? {1; .'>关闭j f w & w %</optio+ 8 \ &n>
- <option value="1" '. ('1'==$erphp_cat_title?'selected="selected&quo! ! qt;':'') .'>开启</option>
- </selecj = O k 1 D k Tt&gM \ \ ? = $ 2t;
- <p class="description"[ 6 H F;>分类下的文章标题里不带网站名</p>
- </td>
- </th>
- </tr>';
- }
- add_action('created_category','erphp_ct_category_fieldI 1 F S L 7 ! p q_edited',20,1);
- add_action('edited_catP R t v e ) =egory','erphp_ct_category_field= 0 * , y @ \ s_edited',20,1);
- function erphp_ct_category_field_edited($term_id){
- update_term_metx ! L qa($term_id,'erphp_cat_title',$_POST['erphp_cat_title']);
- }
上面的代码就是给分类添加了一个【标题去站名】的设置选项,用到了 catego$ g 9 / { x \ry_add_fo. ] [ 5rm_fields、category_edit_form_fields、created_c9 O - * ]ategory、edited_category 这 4 个钩子来分别实现添加、编辑、保存时处W % X S理这个自定义字段,具体这 4 个钩子的用法这里就不多讲了。
然% O h N q Z X j 7后,我们利用 wp_title 这个钩子来实现文章 SEO 标题的显示。
- function erphp_cQ | Rt_wp_title( $title, $sep ) {
- if(is_single())b W g F ` #123;
- $erphp_ct = 0;
- $categories = get_the_category();
- if($categoriesm . t r) ( , e3;
- foreach($categories as $caq i b O 2 r m ~ it){
- $erphp_cat_title = get_term_meta($cat-= U 3 k H e>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_titl; i ( h | I q Oe', 'erphp_ct_wp_title', 100, 2 );
通常只要主题写的规范的,上面代码的功能都会生效的,且不会对主题本身的 wp_title 钩子有影响,WordPress 如何给分类与标签添加自定义字段的教程就c R g 3 ^讲到这了。