这篇文章是我的折腾笔记。我的PHP知识基本是0,做网站也是个人爱好,其实就是喜欢折腾,计算机方面的基础知识也就是在大学学了两天的C语言,能理顺简单一点的逻辑。凭自己的折腾精神,也解决了WordPress中的一个小问题,可以设置自定义SEO字段。但是其中的原理还是没怎么搞清楚,简单记录一下吧

发现问题

这个网站是基于WordPress建立的,我把网站主题改成Kratos3.0之后,发现文章的默认SEO关键字(keywords)和描述(description)不怎么理想。

主题的默认关键字是‘网站关键字’+‘分类名称’+‘标签’+‘网站名称’。这个设置配合我的关键字,无法突出每篇文章的主题,我想把它改成自定义字段。

主题的默认描述是截取正文前面一部分内容,但我在必应的站长工具里,用SEO分析工具进行分析,提示我description过长,这里我也希望能够通过自定义来设置。

解决思路

我以前安装过WPJAM-Basic这个插件,后来更换主题后,觉得主题设置和插件的功能里很多重复,再加上这个插件太臃肿了,很多暂时用不上的功能,于是卸载了这个插件。不知道是不是安装这个插件后留下的,我发现编辑文章的时候,可以添加自定义元数据,其中就有’seo_keyword’和’seo_description’这两个字段,于是就想从这两个字段上来做文章。

自定义description字段

查看了一下主题文件中的header.php,发现keywords和description是这样定义的:

1
2
<meta name="keywords" content="<?php keywords(); ?>">
<meta name="description" itemprop="description" content="<?php description(); ?>">

那么,只需要找到’keywords()’和’description()’这两个函数,然后修改一下,就能解决问题了。

解决方法

搜索了一下主题文件,’keywords()’和’description()’这两个函数位于inc/theme-setting.php文件里。原始的定义为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Keywords 配置
function keywords()
{
if (is_home() is_front_page()) {
echo kratos_option('seo_keywords');
} elseif (is_category()) {
echo kratos_option('seo_keywords') . ',';
single_cat_title();
} elseif (is_single()) {
echo trim(wp_title('', false)) . ',';
echo kratos_option('seo_keywords') . ',';
if (has_tag()) {
foreach (get_the_tags() as $tag) {
echo $tag->name . ',';
}
}
foreach (get_the_category() as $category) {
echo $category->cat_name . ',';
}
} elseif (is_search()) {
echo kratos_option('seo_keywords') . ',';
the_search_query();
} else {
echo kratos_option('seo_keywords') . ',';
echo trim(wp_title('', false));
}
}

// Description 配置
function description()
{
if (is_home() is_front_page()) {
echo trim(kratos_option('seo_description'));
} elseif (is_category()) {
$description = strip_tags(category_description());
echo trim($description);
} elseif (is_single()) {
if (get_the_excerpt()) {
echo get_the_excerpt();
} else {
global $post;
$description = trim(str_replace(array("\r\n", "\r", "\n", " ", " "), " ", str_replace("\"", "'", strip_tags($post->post_content))));
echo mb_substr($description, 0, 220, 'utf-8');
}
} elseif (is_search()) {
echo '「';
the_search_query();
echo '」共找到 ';
global $wp_query;
echo $wp_query->found_posts;
echo ' 个记录';
} elseif (is_tag()) {
$description = strip_tags(tag_description());
echo trim($description);
} else {
$description = strip_tags(term_description());
echo trim($description);
}
}

按照Kratos主题官方文档的建议,我没有在原始文件中直接对该函数进行修改,避免主题升级后所有修改失效,而是在custom/custom.php文件中重新增加了两个自定义函数’my_keywords()’和’my_description()’。

然后打开WPJAM-Basic插件的源代码,找到了’seo_keyword’和’seo_description’这两个字段的调用方法:

1
2
$seo_keywords = get_post_meta($post_id, 'seo_keywords', true);
$seo_description = get_post_meta($post_id, 'seo_description', true);

由于目前我只找到设置文章自定义元数据的地方,所以,我只敢修改if(is_single())判断语句中的代码。根据一番尝试,最后在custom.php文件中添加的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Keywords 配置
function my_keywords() {
if (is_home() is_front_page()) {
echo kratos_option('seo_keywords');
} elseif (is_category()) {
echo kratos_option('seo_keywords') . ',';
single_cat_title();
} elseif (is_single()) {
$post_id = get_the_ID();
$meta_keywords = get_post_meta($post_id, 'seo_keywords', true);
echo $meta_keywords;
} elseif (is_search()) {
echo kratos_option('seo_keywords') . ',';
the_search_query();
} else {
echo kratos_option('seo_keywords') . ',';
echo trim(wp_title('', false));
}
}

// Description 配置
function my_description()
{
if (is_home() is_front_page()) {
echo trim(kratos_option('seo_description'));
} elseif (is_category()) {
$description = strip_tags(category_description());
echo trim($description);
} elseif (is_single()) {
$post_id = get_the_ID();
if (get_post_meta($post_id, 'seo_description', true) != "") {
$meta_description = get_post_meta($post_id, 'seo_description', true);
echo $meta_description;
} else {
global $post;
$description = trim(str_replace(array("\r\n", "\r", "\n", " ", " "), " ", str_replace("\"", "'", strip_tags($post->post_content))));
echo mb_substr($description, 0, 150, 'utf-8');
}
} elseif (is_search()) {
echo '「';
the_search_query();
echo '」共找到 ';
global $wp_query;
echo $wp_query->found_posts;
echo ' 个记录';
} elseif (is_tag()) {
$description = strip_tags(tag_description());
echo trim($description);
} else {
$description = strip_tags(term_description());
echo trim($description);
}
}

然后将header.php文件中的keywords和description调用修改为:

1
2
<meta name="keywords" content="<?php my_keywords(); ?>">
<meta name="description" itemprop="description" content="<?php my_description(); ?>">

这样,我在编辑文章时,在底部添加’seo_keyword’和’seo_description’这两个自定义字段,文章页面就可以按我自己的设置来显示keyword和description了。至于自定义的字段SEO效果怎么样,那就随缘吧!还没研究得那么透彻。

而在主题升级时,我仅需备份的是custom文件夹和header.php文件,就可以保留所有的自定义设置。

像我这样没有一点编程和PHP基础的业余爱好者,做到这一步已经很不容易了,其实收获最大的不是解决了多少问题,也不是学到多少知识,而是解决问题之后感受到的这一股成就感!


本站由 澄哥 使用 Stellar 主题创建。


本页点击量本站点击量次。
您是本站的第个小伙伴
本站已稳定运行