1 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先,請(qǐng)注意是否值得這樣做:
影響 SEO 的因素實(shí)際上有數(shù)百個(gè)。您不需要實(shí)施所有這些,而且許多總體上不會(huì)產(chǎn)生很大的影響。在我看來(lái),這樣做很可能不會(huì)產(chǎn)生任何顯著的效果,而且只會(huì)讓事情變得更加困難。
更重要的是,要對(duì) SEO 產(chǎn)生任何影響,?slug 應(yīng)該包含您的關(guān)鍵字,如果您以編程方式更改它們,則無(wú)法確保 slug 包含關(guān)鍵字,因此您甚至可能弊大于利。
僅供參考,幾個(gè)版本前,WP 被更改為對(duì) slugs 實(shí)施此限制,然后很快又改回來(lái)。這對(duì)我來(lái)說(shuō)意味著它可能不是很有用或不太實(shí)用。
<?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);
請(qǐng)注意,這僅適用于新的slugs,您仍然需要重新生成舊的 slugs,或者編寫(xiě)代碼來(lái)遍歷現(xiàn)有的 slugs 來(lái)更新它們。
更新現(xiàn)有的 slugs
您可以將此函數(shù)添加到您的functions.php中以獲取所有slug,調(diào)用上面的函數(shù)以生成新的slug,然后在數(shù)據(jù)庫(kù)中更新它:
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
? ? ? ? ? ? ? ? )
? ? ? ? ? ? );
? ? ? ? }
? ? }
}
請(qǐng)注意,上面的代碼是我自己的,未經(jīng)測(cè)試,因此請(qǐng)確保先在測(cè)試環(huán)境中嘗試一下。
如何使用此功能
要更新所有現(xiàn)有的 slugs,您只需按需調(diào)用此函數(shù)一次,而不是自動(dòng)調(diào)用(否則每次加載 function.php 時(shí)它都會(huì)更新 slugs)。您可以通過(guò)創(chuàng)建單獨(dú)的獨(dú)立頁(yè)面,在 WP 外部的外部腳本中執(zhí)行此操作,如下所示:
<?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 回答
- 0 關(guān)注
- 153 瀏覽
添加回答
舉報(bào)