限制 Wordpress 中现有和新的永久链接 slugs 的大小以进行 SEO

我在 Google 上读到一篇文章,其中提到为了良好的 SEO,最好将 URL 中的 slug 大小限制为 5 个单词。


当我使用 WordPress 时,链接会自动分配给文章标题。要仅用 5 个字重做所有链接,我必须花费数月时间来编辑博客上的所有链接。


可以自动执行此操作吗?有一些函数或代码可以实现这一点。我找到了这段代码并将其添加到我的主题的功能页面中,但没有结果。


看代码:


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);

我在这里找到了代码:https://permalinkmanager.pro/docs/filters-hooks/how-to-limit-the-number-of-words-in-wordpress-permalinks/


如何使用它将 WordPress slug 大小限制为 5 个单词?


阿波罗的战车
浏览 114回答 1
1回答

手掌心

首先,请注意是否值得这样做:影响 SEO 的因素实际上有数百个。您不需要实施所有这些,而且许多总体上不会产生很大的影响。在我看来,这样做很可能不会产生任何显着的效果,而且只会让事情变得更加困难。更重要的是,要对 SEO 产生任何影响, slug 应该包含您的关键字,如果您以编程方式更改它们,则无法确保 slug 包含关键字,因此您甚至可能弊大于利。仅供参考,几个版本前,WP 被更改为对 slugs 实施此限制,然后很快又改回来。这对我来说意味着它可能不是很有用或不太实用。<?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);请注意,这仅适用于新的slugs,您仍然需要重新生成旧的 slugs,或者编写代码来遍历现有的 slugs 来更新它们。更新现有的 slugs您可以将此函数添加到您的functions.php中以获取所有slug,调用上面的函数以生成新的slug,然后在数据库中更新它:function limit_all_existing_slugs(){    // get all posts    $posts = get_posts( array (  'numberposts' => -1 ) );        foreach ( $posts as $post ){        // create the new slug using the pm_trim_native_slug function         $new_slug = pm_trim_native_slug($post->post_name,                                         $post->ID,                                         $post->post_status,                                         $post->post_type,                                         $post->post_parent);        // only do the update if the new slug is different         if ( $post->post_name != $new_slug ){            wp_update_post(                array (                    'ID'        => $post->ID,                    'post_name' => $new_slug                )            );        }    }}请注意,上面的代码是我自己的,未经测试,因此请确保先在测试环境中尝试一下。如何使用此功能要更新所有现有的 slugs,您只需按需调用此函数一次,而不是自动调用(否则每次加载 function.php 时它都会更新 slugs)。您可以通过创建单独的独立页面,在 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>";?>
打开App,查看更多内容
随时随地看视频慕课网APP