为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
阿波罗的战车 2023-10-21 20:00:05
我在 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 个单词?
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

首先,请注意是否值得这样做:

影响 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>";

?>


查看完整回答
反对 回复 2023-10-21
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信