HMJ-Blog主题优化:wordpress分类目录实现自定义标题
来源:网络分享
编辑:引流技巧
时间:2025-05-14

wordpress主题分类目录标题一般都比较简单,而作为权重仅次于主页的一个页面,一个简单的标题往往会造成SEO资源的浪费,为此,思享在网上找了一个可以自定义分类目录标题的方法。同时,也弥补了HMJ-Blog主题meta关键词和描述和主页一样的缺陷。
functions.php中添加代码
代码如下:
//分类目录 SEO 优化 add_action('edit_category_form_fields', 'category_function'); function category_function(){ if(isset($_GET['action']) && $_GET['action'] == 'edit') $value = get_option('cat_set_' . $_GET['tag_ID']); $title = 'cat_title'; $keywords = 'cat_keywords'; //$description = 'cat_description'; ?> <table class="form-table"> </table> <h2>自定义SEO信息</h2> <table class="form-table"> <tbody> <tr class="form-field"> <th scope="row" valign="top"><label for="<?php echo $title ?>">标题</label></th> <td> <input name="<?php echo $title ?>" id="<?php echo $title ?>" type="text" value="<?php echo esc_attr(stripslashes($value['title']));?>"> <p class="description">默认调用分类名称作为Head中Title信息。</p> </td> </tr> <tr class="form-field"> <th scope="row" valign="top"><label for="<?php echo $keywords; ?>">关键词</label></th> <td> <input name="<?php echo $keywords; ?>" id="<?php echo $keywords; ?>" type="text" value="<?php echo $value['keywords'];?>"> <p class="description">多个关键词用小写逗号“,”分隔开;默认调用分类名称作为Head中KeyWords信息。</p> </td> </tr> <!--<tr class="form-field"> <th scope="row" valign="top"><label for="<?php echo $description; ?>">描述</label></th> <td> <textarea name="<?php echo $description; ?>" id="<?php echo $description; ?>" rows="3" cols="30"> <?php echo stripslashes($value['description']); ?> </textarea> <p class="description">若未设置,将显示为“关于‘某某’分类下的所有文章。”作为Head中Description信息。</p> </td> </tr>--> </tbody> </table> <?php } add_action('edit_category', 'save_category_function'); function save_category_function(){ if(isset($_POST['action']) && isset($_POST['taxonomy']) && $_POST['action'] == 'editedtag' && $_POST['taxonomy'] == 'category'){ update_option( 'cat_set_' . $_POST['tag_ID'], array( 'title' => $_POST['cat_title'], //'description' => $_POST['cat_description'], 'keywords' => $_POST['cat_keywords'], 'template' => $_POST['cat_template'], 'orderby' => $_POST['cat_orderby'], 'per_page' => $_POST['cat_per_page'], ) ); } };创建header-seo.php文件
文件代码如下:
<?php if (is_home()){ //首页SEO $title =get_bloginfo('description')." - ".get_bloginfo('name'); $description = get_option('swt_description'); $keywords = get_option('swt_keywords'); }elseif (is_category()){ //分类目录SEO $cat_id = get_query_var('cat'); $val = get_option("cat_set_$cat_id"); //分类目录长标题 if(!Empty($val) && $val['title']!=''){ $title = $val['title'].' - '.get_bloginfo('name'); }else{ $title = single_cat_title('', false).' - '.get_bloginfo('name'); } //分类目录关键词 if(!Empty($val) && $val['keywords']!=''){ $keywords = $val['keywords']; }else{ $keywords = single_cat_title('', false); } //分类目录描述 $description = category_description(); }elseif (is_tag()){ //标签页 $title = single_cat_title('', false).' - '.get_bloginfo('name'); $description = tag_description(); $keywords = single_tag_title('', false); }elseif (is_single()){ //文章页 $title = $post->post_title.' - '.get_bloginfo('name'); if ($post->post_excerpt){ $description = $post->post_excerpt; } else { $description = substr(strip_tags($post->post_content),0,400); } $keywords = ""; $tags = wp_get_post_tags($post->ID); foreach ($tags as $tag ){ $keywords = $keywords . $tag->name . ", "; } } ?>header.php 中引用
不过值得注意的事,因为所有的页面都是共用一个header.php,所以添加引用代码会出现重复的meta标签。所以,我们需要为分类目录创建一个单独的header.php文件,可以复制中代码,创建一个header-categroy.php(也利于自定义H标签)
删除原meta
<title><?php wp_title( '-', true, 'right' ); ?></title> <meta name="keywords" content="<?php echo $keywords; ?>" /> <meta name="description" content="<?php echo $description; ?>" />以及之前的一些主页判断代码,都可以删除
添加meta引用代码
代码如下:
<?php include "header-seo.php"; ?> <title><?php echo $title; ?></title> <meta name="keywords" content="<?php echo $keywords ?>" /> <meta name="description" content="<?php echo strip_tags($description); ?>" />header引用修改
将categroy.php中
<?php get_header(); ?>修改为
<?php get_header(categroy); ?>设置分类目录
到这里基本已经完成了,到分类目录进行相应的设置即可
20170810更新
网上找到了另外一种方法,也挺简单
标签/分类目录自定义标题
创建如下代码的PHP文件,可以命名为title.php
<?php //自定义分类标题 class zm_wp_title{ function __construct(){ // 分类 add_action( 'category_add_form_fields', array( $this, 'add_tax_title_field' ) ); add_action( 'category_edit_form_fields', array( $this, 'edit_tax_title_field' ) ); add_action( 'edited_category', array( $this, 'save_tax_meta' ), 10, 2 ); add_action( 'create_category', array( $this, 'save_tax_meta' ), 10, 2 ); // 标签 add_action( 'post_tag_add_form_fields', array( $this, 'add_tax_title_field' ) ); add_action( 'post_tag_edit_form_fields', array( $this, 'edit_tax_title_field' ) ); add_action( 'edited_post_tag', array( $this, 'save_tax_meta' ), 10, 2 ); add_action( 'create_post_tag', array( $this, 'save_tax_meta' ), 10, 2 ); } public function add_tax_title_field(){ ?> <div class="form-field term-title-wrap"> <label for="term_meta[tax_zm_title]">自定义标题</label> <input type="text" name="term_meta[tax_zm_title]" id="term_meta[tax_zm_title]" value="" /> <p class="description">搜索引擎优化自定义标题,不填写即为默认标题</p> </div> <?php } // add_tax_title_field public function edit_tax_title_field( $term ){ $term_id = $term->term_id; $term_meta = get_option( "zm_taxonomy_$term_id" ); $zm_title = $term_meta['tax_zm_title'] ? $term_meta['tax_zm_title'] : ''; ?> <tr class="form-field term-title-wrap"> <th scope="row"> <label for="term_meta[tax_zm_title]">自定义标题</label> <td> <input type="text" name="term_meta[tax_zm_title]" id="term_meta[tax_zm_title]" value="<?php echo $zm_title; ?>" /> <p class="description">搜索引擎优化自定义标题,不填写即为默认标题</p> </td> </th> </tr> <?php } // edit_tax_title_field public function save_tax_meta( $term_id ){ if ( isset( $_POST['term_meta'] ) ) { $t_id = $term_id; $term_meta = array(); $term_meta['tax_zm_title'] = isset ( $_POST['term_meta']['tax_zm_title'] ) ? $_POST['term_meta']['tax_zm_title'] : ''; update_option( "zm_taxonomy_$t_id", $term_meta ); } // if isset( $_POST['term_meta'] ) } // save_tax_meta } // zm_wp_title $wptt_tax_title = new zm_wp_title(); function the_zm_title() { $category = get_the_category(); $term_id = $category[0]->cat_ID; $term_meta = get_option( "zm_taxonomy_$term_id" ); $tax_zm_title = $term_meta['tax_zm_title'] ? $term_meta['tax_zm_title'] : ''; echo $tax_zm_title; } function get_current_tag_id() { $current_tag = single_tag_title('', false); $tags = get_tags(); foreach($tags as $tag) { if($tag->name == $current_tag) return $tag->term_id; } } function zm_tag_title() { $term_id = get_current_tag_id(); $term_meta = get_option( "zm_taxonomy_$term_id" ); $zm_tag_title = $term_meta['tax_zm_title'] ? $term_meta['tax_zm_title'] : ''; echo $zm_tag_title; } ?>更新:如果分类拥有子分类$term_id = $category[0]->cat_ID;将无法准确获取当前分类的ID 获取的是自分类的ID,可以改用get_query_var('cat')获取分类ID
把 title.php 文件引入到主题函数functions.php中
//自定义标题 require get_template_directory() . '/title.php';完成上面的步骤之后,基本上后台就已经出现了分类、标签自定义标题填写框,接下来需要做的就是前台的调用。
把下面的代码放到自定义 Title 中 ,这个需要根据主题情况。
分类标题:
<?php if ( is_category() ) { ?><title><?php $title = the_zm_title(); echo ($title) ? ''.$title.'' : single_cat_title(); ?> - <?php bloginfo('name'); ?></title><?php } ?>标签标题:
<?php if ( is_tag() ) { ?><title><?php $title = zm_tag_title(); echo ($title) ? ''.$title.'' : single_tag_title("", true); ?> - <?php bloginfo('name'); ?></title><?php } ?>非常简单,就是判断自定义标题有没有输入,如果没有的话,即显示原标题,如果有自定义标题,则显示自定义标题。


相关文章:
相关推荐:
栏目分类

最新文章

热门文章
