Php 在Wordpress for SEO中限制现有和新permalink段塞的大小
我在谷歌上读到一篇文章,文章说,要想获得良好的搜索引擎优化效果,最好将URL中的slug大小限制在5个单词以内 当我使用WordPress时,链接会自动分配给文章标题。要用5个字重做所有链接,我必须花几个月的时间编辑我博客上的所有链接 是否可以自动执行此操作?有一些函数或代码。我找到了这段代码,并将其添加到我的主题的函数页面,但没有结果 参见代码:Php 在Wordpress for SEO中限制现有和新permalink段塞的大小,php,wordpress,seo,Php,Wordpress,Seo,我在谷歌上读到一篇文章,文章说,要想获得良好的搜索引擎优化效果,最好将URL中的slug大小限制在5个单词以内 当我使用WordPress时,链接会自动分配给文章标题。要用5个字重做所有链接,我必须花几个月的时间编辑我博客上的所有链接 是否可以自动执行此操作?有一些函数或代码。我找到了这段代码,并将其添加到我的主题的函数页面,但没有结果 参见代码: function pm_limit_slugs_length($uri) { $max_words = 5; // If any part
function pm_limit_slugs_length($uri) {
$max_words = 5; // If any part of URI contains more than 5 words, the slug will be limited to first 5 words
$new_title = '';
$slugs = explode('/', $uri);
for($i=0, $count = count($slugs); $i < $count; $i++) {
$slug = $slugs[$i];
$words = explode('-', $slug);
$new_title .= "/";
if(count($words) > $max_words) {
$new_title .= implode("-", array_slice($words, 0, $max_words));
} else {
$new_title .= $slug;
}
}
// Remove trailing slashes
$new_title = trim($new_title, "/");
return $new_title;
}
add_filter('permalink_manager_filter_default_post_uri', 'pm_limit_slugs_length', 99);
add_filter('permalink_manager_filter_default_term_uri', 'pm_limit_slugs_length', 99);
函数pm\u limit\u slug\u length($uri){
$max_words=5;//如果URI的任何部分包含超过5个单词,则slug将限制为前5个单词
$new_title='';
$slug=explode(“/”,$uri);
对于($i=0,$count=count($slug);$i<$count;$i++){
$slug=$slug[$i];
$words=爆炸('-',$slug);
$new_title.=“/”;
如果(计数($words)>$max_单词){
$new_title.=内爆(“-”,数组_切片($words,0,$max_words));
}否则{
$new_title.=$slug;
}
}
//删除尾部斜线
$new_title=修剪($new_title,“/”);
返回$new_title;
}
添加过滤器('permalink_manager_filter_default_post_uri'、'pm_limit_Slug_length',99);
添加过滤器('permalink_manager_filter_default_term_uri'、'pm_limit_Slug_length',99);
我在这里找到了代码:
如何使用它将Wordpress slug大小限制为5个单词?首先,请注意是否值得这样做: 实际上有100多个因素会影响搜索引擎优化。您不需要实现所有这些功能,而且许多功能在总体上不会有很大的影响。在我看来,这样做很可能不会有任何显著的效果,而且只会让事情变得更加困难 更重要的是,要对SEO产生任何影响,slug应该包含你的关键字,如果你以编程方式更改它们,没有办法确保slug包含关键字,因此你可能弊大于利 仅供参考,几个版本之前,WP被更改为对slug实施此限制,然后很快又重新更改。这对我来说可能不是很有用或实用 但是,如果仍要执行此操作,请执行以下操作: 限制新词中的单词 您问题中的代码来自本文,对吗 您使用的第一个示例用于他们的插件。下一个例子(包括在下面)将在没有插件的Wordpress中工作。这可以添加到functions.php中 更新:我已将代码合并到此函数中,以删除少于3个字符的短单词,请参阅下面的更新函数
<?php
/**
* Trim native slugs
*/
function pm_trim_native_slug($slug, $post_ID, $post_status, $post_type, $post_parent) {
global $wpdb;
$max_words = 5; // Limit the number of words to 5; This value can be changed.
$words = explode('-', $slug);
/* UPDATED CODE TO REMOVE SHORT WORDS */
$min_word_length = 2;
foreach ($words as $k => $word) {
if (strlen($word) <= $min_word_length)
unset($words[$k]);
}
/* END OF UPDATED CODE FOR SHORT WORDS */
if(count($words) > $max_words) {
$slug = implode("-", array_slice($words, 0, $max_words));
// Make the slugs unique
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d LIMIT 1";
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $slug, $post_ID));
if($post_name_check) {
$suffix = 2;
do {
$alt_post_name = _truncate_post_slug($slug, 200 - (strlen($suffix) + 1)) . "-$suffix";
$post_name_check = $wpdb->get_var($wpdb->prepare($check_sql, $alt_post_name, $post_type, $post_ID, $post_parent));
$suffix++;
} while ($post_name_check);
$slug = $alt_post_name;
}
}
return $slug;
}
add_filter('wp_unique_post_slug', 'pm_trim_native_slug', 99, 5);
请注意,上面的代码是我自己的,未经测试,因此请确保先在测试环境中试用。
如何使用此功能
要更新所有现有的slug,只需按需调用此函数一次,而不是自动调用(否则每次加载functions.php时它都会更新slug)。您可以在WP之外的外部脚本中通过以下方式创建单独的独立页面来完成此操作:
<?php
include('wp-load.php'); //Include the wp-load.php file
define('WP_USE_THEMES', false); //We don't need the theme files
echo "<p>About to update all slugs...</p>";
limit_all_existing_slugs();
echo "<p>...DONE</p>";
?>
谢谢你的详细回答,非常有帮助。谢谢你的回答,我在一个测试环境中测试了代码,那里只有1篇帖子,链接没有改变。我不知道我是否正确地实现了代码,但我在主题函数中添加了它。很抱歉,第一个代码有效,只有第二个代码无法重新生成现有URL。您在哪里调用了limit\u all\u existing\u slug()
?它不会被自动调用,否则每次都会重新生成所有的slug:)您应该直接调用它,只运行一次。根据您的WP技能,最简单的方法可能是创建一个名为“Slug Update”的新页面模板来调用此函数,然后使用此模板创建一个新的私有页面,并在浏览器中查看它-这将根据需要而不是自动调用此函数。在模板和代码中添加一些调试行,以便您可以跟踪调用的内容,以防出现任何问题。@MohamedAliO.Ameur谢谢:)我总是尝试给出信息性的答案来解释为什么事情可以工作以及如何做,以便用户可以学习如何做事情,而且,这个答案对可能有类似问题但不完全相同的未来用户也很有帮助——解释可以帮助他们根据自己的需求调整它。
<?php
include('wp-load.php'); //Include the wp-load.php file
define('WP_USE_THEMES', false); //We don't need the theme files
echo "<p>About to update all slugs...</p>";
limit_all_existing_slugs();
echo "<p>...DONE</p>";
?>