自动外链工具 在线排版工具 搜索引擎提交入口 wordpress主题推荐 批量打开网址工具 优化PDF资料 【已备案域名】 ★VIP视频在线解析★

HMJ-Blog主题优化:wordpress分类目录实现自定义标题

文章目录
  1. functions.php中添加代码
  2. 创建header-seo.php文件
  3. header.php 中引用
  4. 设置分类目录

wordpress主题分类目录标题一般都比较简单,而作为权重仅次于主页的一个页面,一个简单的标题往往会造成SEO资源的浪费,为此,思享在网上找了一个可以自定义分类目录标题的方法。同时,也弥补了HMJ-Blog主题meta关键词和描述和主页一样的缺陷。

functions.php中添加代码

代码如下:

  1. //分类目录 SEO 优化
  2. add_action('edit_category_form_fields', 'category_function');
  3. function category_function(){
  4. if(isset($_GET['action']) && $_GET['action'] == 'edit') $value = get_option('cat_set_' . $_GET['tag_ID']);
  5. $title = 'cat_title';
  6. $keywords = 'cat_keywords';
  7. //$description = 'cat_description';
  8. ?>
  9. <table class="form-table">
  10. </table>
  11. <h2>自定义SEO信息</h2>
  12. <table class="form-table">
  13. <tbody>
  14. <tr class="form-field">
  15. <th scope="row" valign="top"><label for="<?php echo $title ?>">标题</label></th>
  16. <td>
  17. <input name="<?php echo $title ?>" id="<?php echo $title ?>" type="text" value="<?php echo esc_attr(stripslashes($value['title']));?>">
  18. <p class="description">默认调用分类名称作为Head中Title信息。</p>
  19. </td>
  20. </tr>
  21. <tr class="form-field">
  22. <th scope="row" valign="top"><label for="<?php echo $keywords; ?>">关键词</label></th>
  23. <td>
  24. <input name="<?php echo $keywords; ?>" id="<?php echo $keywords; ?>" type="text" value="<?php echo $value['keywords'];?>">
  25. <p class="description">多个关键词用小写逗号“,”分隔开;默认调用分类名称作为Head中KeyWords信息。</p>
  26. </td>
  27. </tr>
  28. <!--<tr class="form-field">
  29. <th scope="row" valign="top"><label for="<?php echo $description; ?>">描述</label></th>
  30. <td>
  31. <textarea name="<?php echo $description; ?>" id="<?php echo $description; ?>" rows="3" cols="30">
  32. <?php echo stripslashes($value['description']); ?>
  33. </textarea>
  34. <p class="description">若未设置,将显示为“关于‘某某’分类下的所有文章。”作为Head中Description信息。</p>
  35. </td>
  36. </tr>-->
  37. </tbody>
  38. </table>
  39. <?php
  40. }
  41. add_action('edit_category', 'save_category_function');
  42. function save_category_function(){
  43. if(isset($_POST['action']) && isset($_POST['taxonomy']) && $_POST['action'] == 'editedtag' && $_POST['taxonomy'] == 'category'){
  44. update_option(
  45. 'cat_set_' . $_POST['tag_ID'],
  46. array(
  47. 'title' => $_POST['cat_title'],
  48. //'description' => $_POST['cat_description'],
  49. 'keywords' => $_POST['cat_keywords'],
  50. 'template' => $_POST['cat_template'],
  51. 'orderby' => $_POST['cat_orderby'],
  52. 'per_page' => $_POST['cat_per_page'],
  53. )
  54. );
  55. }
  56. };

创建header-seo.php文件

文件代码如下:

  1. <?php
  2. if (is_home()){ //首页SEO
  3. $title =get_bloginfo('description')." - ".get_bloginfo('name');
  4. $description = get_option('swt_description');
  5. $keywords = get_option('swt_keywords');
  6. }elseif (is_category()){ //分类目录SEO
  7. $cat_id = get_query_var('cat');
  8. $val = get_option("cat_set_$cat_id");
  9. //分类目录长标题
  10. if(!Empty($val) && $val['title']!=''){
  11. $title = $val['title'].' - '.get_bloginfo('name');
  12. }else{
  13. $title = single_cat_title('', false).' - '.get_bloginfo('name');
  14. }
  15. //分类目录关键词
  16. if(!Empty($val) && $val['keywords']!=''){
  17. $keywords = $val['keywords'];
  18. }else{
  19. $keywords = single_cat_title('', false);
  20. }
  21. //分类目录描述
  22. $description = category_description();
  23. }elseif (is_tag()){ //标签页
  24. $title = single_cat_title('', false).' - '.get_bloginfo('name');
  25. $description = tag_description();
  26. $keywords = single_tag_title('', false);
  27. }elseif (is_single()){ //文章页
  28. $title = $post->post_title.' - '.get_bloginfo('name');
  29. if ($post->post_excerpt){
  30. $description = $post->post_excerpt;
  31. else {
  32. $description = substr(strip_tags($post->post_content),0,400);
  33. }
  34. $keywords = "";
  35. $tags = wp_get_post_tags($post->ID);
  36. foreach ($tags as $tag ){
  37. $keywords = $keywords . $tag->name . ", ";
  38. }
  39. }
  40. ?>

header.php 中引用

不过值得注意的事,因为所有的页面都是共用一个header.php,所以添加引用代码会出现重复的meta标签。所以,我们需要为分类目录创建一个单独的header.php文件,可以复制中代码,创建一个header-categroy.php(也利于自定义H标签)

删除原meta

  1. <title><?php wp_title( '-', true, 'right' ); ?></title>
  2. <meta name="keywords" content="<?php echo $keywords; ?>" />
  3. <meta name="description" content="<?php echo $description; ?>" />

以及之前的一些主页判断代码,都可以删除

添加meta引用代码

代码如下:

  1. <?php include "header-seo.php"; ?>
  2. <title><?php echo $title; ?></title>
  3. <meta name="keywords" content="<?php echo $keywords ?>" />
  4. <meta name="description" content="<?php echo strip_tags($description); ?>" />

header引用修改

将categroy.php中

  1. <?php get_header(); ?>

修改为

  1. <?php get_header(categroy); ?>

设置分类目录

到这里基本已经完成了,到分类目录进行相应的设置即可

分类目录自定义


20170810更新

网上找到了另外一种方法,也挺简单

标签/分类目录自定义标题

创建如下代码的PHP文件,可以命名为title.php

  1. <?php
  2. //自定义分类标题
  3. class zm_wp_title{
  4.     function __construct(){
  5.     // 分类
  6.         add_action( 'category_add_form_fields', array$this, 'add_tax_title_field' ) );
  7.         add_action( 'category_edit_form_fields', array$this, 'edit_tax_title_field' ) );
  8.         add_action( 'edited_category', array$this, 'save_tax_meta' ), 10, 2 );
  9.         add_action( 'create_category', array$this, 'save_tax_meta' ), 10, 2 );
  10.     // 标签
  11.         add_action( 'post_tag_add_form_fields', array$this, 'add_tax_title_field' ) );
  12.         add_action( 'post_tag_edit_form_fields', array$this, 'edit_tax_title_field' ) );
  13.         add_action( 'edited_post_tag', array$this, 'save_tax_meta' ), 10, 2 );
  14.         add_action( 'create_post_tag', array$this, 'save_tax_meta' ), 10, 2 );
  15.     }
  16.     public function add_tax_title_field(){
  17. ?>
  18.         <div class="form-field term-title-wrap">
  19.             <label for="term_meta[tax_zm_title]">自定义标题</label>
  20.             <input type="text" name="term_meta[tax_zm_title]" id="term_meta[tax_zm_title]" value="" />
  21.             <p class="description">搜索引擎优化自定义标题,不填写即为默认标题</p>
  22.         </div>
  23. <?php
  24.     } // add_tax_title_field
  25.     public function edit_tax_title_field( $term ){
  26.         $term_id = $term->term_id;
  27.         $term_meta = get_option( "zm_taxonomy_$term_id" );
  28.         $zm_title = $term_meta['tax_zm_title'] ? $term_meta['tax_zm_title'] : '';
  29. ?>
  30.         <tr class="form-field term-title-wrap">
  31.             <th scope="row">
  32.                 <label for="term_meta[tax_zm_title]">自定义标题</label>
  33.                 <td>
  34.                     <input type="text" name="term_meta[tax_zm_title]" id="term_meta[tax_zm_title]" value="<?php echo $zm_title; ?>" />
  35.                     <p class="description">搜索引擎优化自定义标题,不填写即为默认标题</p>
  36.                 </td>
  37.             </th>
  38.         </tr>
  39. <?php
  40.     } // edit_tax_title_field
  41.     public function save_tax_meta( $term_id ){
  42.         if ( isset( $_POST['term_meta'] ) ) {
  43.             $t_id = $term_id;
  44.             $term_meta = array();
  45.             $term_meta['tax_zm_title'] = isset ( $_POST['term_meta']['tax_zm_title'] ) ? $_POST['term_meta']['tax_zm_title'] : '';
  46.             update_option( "zm_taxonomy_$t_id"$term_meta );
  47.         } // if isset( $_POST['term_meta'] )
  48.     } // save_tax_meta
  49. // zm_wp_title
  50. $wptt_tax_title = new zm_wp_title();
  51. function the_zm_title() {
  52.     $category = get_the_category();
  53.     $term_id = $category[0]->cat_ID;
  54.     $term_meta = get_option( "zm_taxonomy_$term_id" );
  55.     $tax_zm_title = $term_meta['tax_zm_title'] ? $term_meta['tax_zm_title'] : '';
  56.     echo $tax_zm_title;
  57. }
  58. function get_current_tag_id() {
  59.     $current_tag = single_tag_title('', false);
  60.     $tags = get_tags();
  61.     foreach($tags as $tag) {
  62.         if($tag->name == $current_tagreturn $tag->term_id;
  63.     }
  64. }
  65. function zm_tag_title() {
  66.     $term_id = get_current_tag_id();
  67.     $term_meta = get_option( "zm_taxonomy_$term_id" );
  68.     $zm_tag_title = $term_meta['tax_zm_title'] ? $term_meta['tax_zm_title'] : '';
  69.     echo $zm_tag_title;
  70. }
  71. ?>

把 title.php 文件引入到主题函数functions.php中

  1. //自定义标题
  2. require get_template_directory() . '/title.php';

完成上面的步骤之后,基本上后台就已经出现了分类、标签自定义标题填写框,接下来需要做的就是前台的调用。

把下面的代码放到自定义 Title 中 ,这个需要根据主题情况。

分类标题:

  1. <?php if ( is_category() ) { ?><title><?php $title = the_zm_title(); echo ($title) ? ''.$title.'' : single_cat_title(); ?> - <?php bloginfo('name'); ?></title><?php } ?>

标签标题:

  1. <?php if ( is_tag() ) { ?><title><?php  $title = zm_tag_title(); echo ($title) ? ''.$title.'' : single_tag_title("", true); ?> - <?php bloginfo('name'); ?></title><?php } ?>

非常简单,就是判断自定义标题有没有输入,如果没有的话,即显示原标题,如果有自定义标题,则显示自定义标题。

来源:本文由思享SEO博客原创撰写,欢迎分享本文,转载请保留出处和链接!

4条评论

  • avatar
    求助  回复

    2种方法都有问题,第一种,后台设置后,前台能显示,但是后台输入框是空白的
    第二种,引用PHP后,后台正常,但是前台网站出问题,只能读取到title上就是空白的了

    • avatar
      思享  回复

      @求助 第一张方法后台输入框是空白的,但是前台是生效的,也就是如果你不经常该标题,可以用。第二种我用倒是没问题,只是需要在分类下有文章才生效,另外可以参考一下wordpress分类目录添加自定义head内容 其实是一个意思
      本人也是代码渣 所以爱莫能助

      • avatar
        求助  回复

        @思享 你用的第一还是第二中方法呀?

        • avatar
          思享  回复

          @求助 我这个主题就有自定义分类标题的功能 其他主题 主要是用第二中 第一种麻烦些 更新分类容易把标题丢掉

          • avatar
            求助  

            @思享 嘿嘿嘿,模板能分享吗?

          • avatar
            思享  

            @求助 这个主题是付费的,授权域名才能用 而且现在我觉得这个主题图片太多了 网页加载起来有点慢

          • avatar
            求助  

            @思享 哦哦,好吧,那我还是就用这个免费主题吧

昵称*

邮箱*

网址