在Kratos主题中自定义Keywords和Description等SEO字段
这篇文章是我的折腾笔记。我的PHP知识基本是0,做网站也是个人爱好,其实就是喜欢折腾,计算机方面的基础知识也就是在大学学了两天的C语言,能理顺简单一点的逻辑。凭自己的折腾精神,也解决了WordPress中的一个小问题,可以设置自定义SEO字段。但是其中的原理还是没怎么搞清楚,简单记录一下吧
发现问题
这个网站是基于WordPress建立的,我把网站主题改成Kratos3.0之后,发现文章的默认SEO关键字(keywords)和描述(description)不怎么理想。
主题的默认关键字是‘网站关键字’+‘分类名称’+‘标签’+‘网站名称’。这个设置配合我的关键字,无法突出每篇文章的主题,我想把它改成自定义字段。
主题的默认描述是截取正文前面一部分内容,但我在必应的站长工具里,用SEO分析工具进行分析,提示我description过长,这里我也希望能够通过自定义来设置。
解决思路
我以前安装过WPJAM-Basic这个插件,后来更换主题后,觉得主题设置和插件的功能里很多重复,再加上这个插件太臃肿了,很多暂时用不上的功能,于是卸载了这个插件。不知道是不是安装这个插件后留下的,我发现编辑文章的时候,可以添加自定义元数据,其中就有’seo_keyword’和’seo_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
| 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)); } }
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
| 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)); } }
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基础的业余爱好者,做到这一步已经很不容易了,其实收获最大的不是解决了多少问题,也不是学到多少知识,而是解决问题之后感受到的这一股成就感!