首页 > WordPress > 开发笔记 > 用字段为BIT主题增加全站TDK功能

用字段为BIT主题增加全站TDK功能

一个老不正经 2022/01/07 804围观

TDK功能,在很多人眼中就是SEO功能,其实只是SEO功能的一部分,只是为了让title更符合匹配文章,更有利于搜索引擎的排名,而文章标题不同于这个title,文章标题要更符合客户体验;所以就需要TDK功能,在制作BIT主题中,同样也需要增加TDK功能。下面一起来看看。


分类TDK功能

首先要给分类增加字段,分类本身自带描述功能,这个调用即可,主要加TITLE还有关键词的功能

//这里是标题字段,
function add_category_field(){
echo '<div class="form-field">
<label for="cat-title">分类标题</label>
<input name="cat-title" id="cat-title" type="text" value="" size="40">
<p>用于SEO自定义标题</p>
</div>';
//这里是关键词的字段
echo '<div class="form-field">
<label for="cat-words">分类关键字</label>
<input name="cat-words" id="cat-words" type="text" value="" size="40">
<p>用于SEO自定义关键字</p>
</div>';
}
add_action('category_add_form_fields','add_category_field',10,2);

接下来需要能编辑

// 分类编辑字段
function edit_category_field($tag){
echo '<tr class="form-field">
<th scope="row"><label for="cat-title">分类标题</label></th>
<td>
<input name="cat-title" id="cat-title" type="text" value="';
echo get_option('cat-title-'.$tag->term_id).'" size="40"/><br>
<span class="cat-title">用于'.$tag->name.'分类SEO自定义标题</span>
</td>
</tr>';

echo '<tr class="form-field">
<th scope="row"><label for="cat-words">分类关键字</label></th>
<td>
<input name="cat-words" id="cat-words" type="text" value="';
echo get_option('cat-words-'.$tag->term_id).'" size="40"/><br>
<span class="cat-words">用于'.$tag->name.'分类SEO自定义关键字</span>
</td>
</tr>';
}
add_action('category_edit_form_fields','edit_category_field',10,2);
// 保存数据
function taxonomy_metadate($term_id){
if(isset($_POST['cat-title']) && isset($_POST['cat-words'])){
//判断权限--可改
if(!current_user_can('manage_categories')){
return $term_id;
}
// 标题
$title_key = 'cat-title-'.$term_id; // key
$title_value = $_POST['cat-title']; // value

// 关键字
$words_key = 'cat-words-'.$term_id;
$words_value = $_POST['cat-words'];

// 更新选项值
update_option( $title_key, $title_value );
update_option( $words_key, $words_value );
}
}

add_action('created_category','taxonomy_metadate',10,1);
add_action('edited_category','taxonomy_metadate',10,1);

调用分类的title

?php if ( is_category() ) { ?>//判断分类页
<?php $term_id = get_query_var('cat'); ?><?php } ?>//
<?php $term_id = get_query_var('cat'); if ( of_get_option( 'cat-title-'.$term_id )) : ?>//调用字段并且控制
<?php if ( is_category() ) { ?><title><?php echo get_option( 'cat-title-'.$term_id ); ?><?php if (get_query_var('paged')) { echo ' - 第'; echo get_query_var('paged'); echo '页';}?></title><?php } ?>
<?php else: ?>
<?php if ( is_category() ) { ?><title><?php single_cat_title(); ?><?php if (get_query_var('paged')) { echo ' - 第'; echo get_query_var('paged'); echo '页';}?> <?php echo of_get_option('connector'); ?> <?php bloginfo('name'); ?></title><?php } ?>
如果没有在字段输入内容,将显示后面的。

调用关键词和描述,算了不写注释了,自己测试。

<?php if ( is_category() ) { ?>//判断分类
<meta name="description" content="<?php echo category_description(); ?>" />//直接调用描述,因为分类本身存在描述,所以不需要重新写。
<?php if ( get_option( 'cat-words-'.$term_id )) : ?>
<meta name="keywords" content="<?php echo get_option( 'cat-words-'.$term_id ); ?>" />//输出字段
<?php else: ?>
<meta name="keywords" content="<?php single_cat_title(); ?>" />//如果没有将输出single_cat_title()
<?php endif; ?>
<?php } ?>

文章TDK功能

首先创建字段

$seo_post_meta_boxes =
array(
"custom_title" => array(
"name" => "custom_title",
"std" => "",
"title" => "SEO自定义文章标题",
"type"=>"text"),

"description" => array(
"name" => "description",
"std" => "",
"title" => "SEO文章描述,留空则自动截取首段一定字数作为文章描述",
"type"=>"textarea"),

"keywords" => array(
"name" => "keywords",
"std" => "",
"title" => "SEO文章关键词,多个关键词用半角逗号隔开",
"type"=>"text"),
);

哪些是标题哪些是描述就不用说了吧,上面有文字

// 面板内容
function seo_post_meta_boxes() {
global $post, $seo_post_meta_boxes;
//获取保存
foreach ($seo_post_meta_boxes as $meta_box) {
$meta_box_value = get_post_meta($post->ID, $meta_box['name'] . '', true);
if ($meta_box_value != "")
//将默认值替换为已保存的值
$meta_box['std'] = $meta_box_value;
echo '<input type="hidden" name="' . $meta_box['name'] . '_noncename" id="' . $meta_box['name'] . '_noncename" value="' . wp_create_nonce(plugin_basename(__FILE__)) . '" />';
//选择类型输出不同的html代码
switch ($meta_box['type']) {
case 'title':
echo '<h4>' . $meta_box['title'] . '</h4>';
break;
case 'text':
echo '<h4>' . $meta_box['title'] . '</h4>';
echo '<span class="form-field"><input type="text" size="40" name="' . $meta_box['name'] . '" value="' . $meta_box['std'] . '" /></span><br />';
break;
case 'textarea':
echo '<h4>' . $meta_box['title'] . '</h4>';
echo '<textarea id="seo-excerpt" cols="40" rows="2" name="' . $meta_box['name'] . '">' . $meta_box['std'] . '</textarea><br />';
break;
}
}
}
// 创建面板
function seo_post_meta_box() {
global $theme_name;
if (function_exists('add_meta_box')) {
add_meta_box('seo_post_meta_box', 'SEO设置', 'seo_post_meta_boxes', 'post', 'normal', 'high');
}
}
// 保存数据
function save_seo_post_postdata($post_id) {
global $post, $seo_post_meta_boxes;
foreach ($seo_post_meta_boxes as $meta_box) {
if (!wp_verify_nonce($_POST[$meta_box['name'] . '_noncename'], plugin_basename(__FILE__))) {
return $post_id;
}
if ('page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id)) return $post_id;
} else {
if (!current_user_can('edit_post', $post_id)) return $post_id;
}
$data = $_POST[$meta_box['name'] . ''];
if (get_post_meta($post_id, $meta_box['name'] . '') == "") add_post_meta($post_id, $meta_box['name'] . '', $data, true);
elseif ($data != get_post_meta($post_id, $meta_box['name'] . '', true)) update_post_meta($post_id, $meta_box['name'] . '', $data);
elseif ($data == "") delete_post_meta($post_id, $meta_box['name'] . '', get_post_meta($post_id, $meta_box['name'] . '', true));
}
}
// 触发
add_action('admin_menu', 'seo_post_meta_box');
add_action('save_post', 'save_seo_post_postdata');

调用title

<?php if ( is_single() ) { ?><title><?php if ( get_post_meta($post->ID, 'custom_title', true) ) { ?><?php echo trim(get_post_meta($post->ID, 'custom_title', true)); ?><?php if (get_query_var('page')) { echo ' - 第'; echo get_query_var('page'); echo '页';}?><?php } else { ?><?php echo trim(the_title('')); ?><?php if (get_query_var('page')) { echo ' - 第'; echo get_query_var('page'); echo '页';}?> <?php echo of_get_option('connector'); ?> <?php bloginfo('name'); ?><?php } ?></title><?php } ?>

调用关键词和描述

<?php if ( is_single() ) { ?>
<?php if ( get_post_meta($post->ID, 'description', true) ) : ?>
<meta name="description" content="<?php $description = get_post_meta($post->ID, 'description', true);{echo $description;}?>" />
<?php else: ?>
<meta name="description" content="<?php echo trim($description); ?>" />
<?php endif; ?>
<?php if ( get_post_meta($post->ID, 'keywords', true) ) : ?>
<meta name="keywords" content="<?php $keywords = get_post_meta($post->ID, 'keywords', true);{echo $keywords;}?>" />
<?php else: ?>
<meta name="keywords" content="<?php echo trim($keywords,','); ?>" />
<?php endif; ?>
<?php } ?>

页面TDK功能

创建字段

// 页面相关自定义栏目
$new_meta_page_boxes =
array(
"custom_title" => array(
"name" => "custom_title",
"std" => "",
"title" => "SEO自定义页面标题",
"type"=>"text"),

"description" => array(
"name" => "description",
"std" => "",
"title" => "文章描述,留空则自动截取首段一定字数作为文章描述",
"type"=>"textarea"),

"keywords" => array(
"name" => "keywords",
"std" => "",
"title" => "文章关键词,多个关键词用半角逗号隔开",
"type"=>"text"),
);

// 面板内容
function new_meta_page_boxes() {
global $post, $new_meta_page_boxes;
//获取保存
foreach ($new_meta_page_boxes as $meta_box) {
$meta_box_value = get_post_meta($post->ID, $meta_box['name'] . '', true);
if ($meta_box_value != "")
//将默认值替换为已保存的值
$meta_box['std'] = $meta_box_value;
echo '<input type="hidden" name="' . $meta_box['name'] . '_noncename" id="' . $meta_box['name'] . '_noncename" value="' . wp_create_nonce(plugin_basename(__FILE__)) . '" />';
//选择类型输出不同的html代码
switch ($meta_box['type']) {
case 'title':
echo '<h4>' . $meta_box['title'] . '</h4>';
break;
case 'text':
echo '<h4>' . $meta_box['title'] . '</h4>';
echo '<span class="form-field"><input type="text" size="40" name="' . $meta_box['name'] . '" value="' . $meta_box['std'] . '" /></span><br />';
break;
case 'textarea':
echo '<h4>' . $meta_box['title'] . '</h4>';
echo '<textarea id="seo-excerpt" cols="40" rows="2" name="' . $meta_box['name'] . '">' . $meta_box['std'] . '</textarea><br />';
break;
}
}
}

function create_meta_page_box() {
global $theme_name;
if (function_exists('add_meta_box')) {
add_meta_box('new-meta-boxes', '页面SEO设置', 'new_meta_page_boxes', 'page', 'normal', 'high');
}
}
function save_page_postdata($post_id) {
global $post, $new_meta_page_boxes;
foreach ($new_meta_page_boxes as $meta_box) {
if (!wp_verify_nonce($_POST[$meta_box['name'] . '_noncename'], plugin_basename(__FILE__))) {
return $post_id;
}
if ('page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id)) return $post_id;
} else {
if (!current_user_can('edit_post', $post_id)) return $post_id;
}
$data = $_POST[$meta_box['name'] . ''];
if (get_post_meta($post_id, $meta_box['name'] . '') == "") add_post_meta($post_id, $meta_box['name'] . '', $data, true);
elseif ($data != get_post_meta($post_id, $meta_box['name'] . '', true)) update_post_meta($post_id, $meta_box['name'] . '', $data);
elseif ($data == "") delete_post_meta($post_id, $meta_box['name'] . '', get_post_meta($post_id, $meta_box['name'] . '', true));
}
}
add_action('admin_menu', 'create_meta_page_box');
add_action('save_post', 'save_page_postdata');

调用title

<?php if ( is_page() && !is_front_page() ) { ?><title><?php if ( get_post_meta($post->ID, 'custom_title', true) ) { ?><?php echo trim(get_post_meta($post->ID, 'custom_title', true)); ?><?php } else { ?><?php echo trim(the_title('',0)); ?><?php } ?><?php echo of_get_option('connector'); ?> <?php bloginfo('name'); ?></title><?php } ?>

调用关键词和描述

<?php if ( is_page() ) { ?>
<meta name="description" content="<?php $description = get_post_meta($post->ID, 'description', true);{echo $description;}?>" />
<meta name="keywords" content="<?php $keywords = get_post_meta($post->ID, 'keywords', true);{echo $keywords;}?>" />
<?php } ?>

TAGTDK功能

wp的标签需要单独加分类标题,说白了就是多了一个分类归档
// 标签添加字段
function add_tags_field(){
echo '<div class="form-field">
<label for="tag-title">分类标题</label>
<input name="tag-title" id="tag-title" type="text" value="" size="40">
<p>用于SEO自定义标题</p>
</div>';

echo '<div class="form-field">
<label for="tag-words">分类关键字</label>
<input name="tag-words" id="tag-words" type="text" value="" size="40">
<p>用于SEO自定义关键字</p>
</div>';
}
add_action('post_tag_add_form_fields','add_tags_field',10,2);

// 标签编辑字段
function edit_tags_field($tag){
echo '<tr class="form-field">
<th scope="row"><label for="tag-title">分类标题</label></th>
<td>
<input name="tag-title" id="tag-title" type="text" value="';
echo get_option('tag-title-'.$tag->term_id).'" size="40"/><br>
<span class="cat-title">用于'.$tag->name.'分类SEO自定义标题</span>
</td>
</tr>';

echo '<tr class="form-field">
<th scope="row"><label for="tag-words">分类关键字</label></th>
<td>
<input name="tag-words" id="tag-words" type="text" value="';
echo get_option('tag-words-'.$tag->term_id).'" size="40"/><br>
<span class="tag-words">用于'.$tag->name.'分类SEO自定义关键字</span>
</td>
</tr>';
}
add_action('post_tag_edit_form_fields','edit_tags_field',10,2);
// 保存数据
function taxonomy_metadate1($term_id){
if(isset($_POST['tag-title']) && isset($_POST['tag-words'])){
//判断权限--可改
if(!current_user_can('manage_categories')){
return $term_id;
}
// 标题
$title_key = 'tag-title-'.$term_id; // key
$title_value = $_POST['tag-title']; // value

// 关键字
$words_key = 'tag-words-'.$term_id;
$words_value = $_POST['tag-words'];

// 更新选项值
update_option( $title_key, $title_value );
update_option( $words_key, $words_value );
}
}

add_action('created_post_tag','taxonomy_metadate1',10,1);
add_action('edited_post_tag','taxonomy_metadate1',10,1);

调用TAG标题

<?php if ( is_tag() ) { ?><?php $term_id = get_query_var('tag_id'); ?><?php } ?>
<?php if ( of_get_option( 'tag-words-'.$term_id )) : ?>
<?php if ( is_tag() ) { ?><title><?php echo get_option( 'tag-title-'.$term_id ); ?><?php if (get_query_var('paged')) { echo ' - 第'; echo get_query_var('paged'); echo '页';}?> <?php echo of_get_option('connector'); ?> <?php bloginfo('name'); ?></title><?php } ?>
<?php else: ?>
<?php if (function_exists('is_tag')) { if ( is_tag() ) { ?><title><?php single_tag_title("", true); ?><?php if (get_query_var('paged')) { echo ' - 第'; echo get_query_var('paged'); echo '页';}?> <?php echo of_get_option('connector'); ?> <?php bloginfo('name'); ?></title><?php } ?><?php } ?>
<?php endif; ?>

调用TAG关键词和描述

<?php if ( is_tag() ) { ?>
<meta name="description" content="<?php echo trim(strip_tags(tag_description())); ?>" />
<?php if ( get_option( 'tag-words-'.$term_id )) : ?>
<meta name="keywords" content="<?php echo get_option( 'tag-words-'.$term_id ); ?>" />
<?php else: ?>
<meta name="keywords" content="<?php echo single_tag_title(); ?>" />
<?php endif; ?>
<?php } ?>

首页TDK功能

一点优化首页的TDK是后端控制的,单独做了一个控制面板,一般默认的在常规里面设置,然后调用,

<?php //首页
if ( is_home() ) { ?>
<title><?php bloginfo('name'); ?> <?php echo of_get_option('connector'); ?> <?php bloginfo('description'); ?><?php if (get_query_var('paged')) { echo ' - 第'; echo get_query_var('paged'); echo '页';}?></title>
<?php } ?>

控制板块就不写了,这里的关键词和描述就不公开了,拿到我主题的,可以自己看