當(dāng)前位置:首頁(yè)>WordPress建站>基礎(chǔ)教程>WordPress 自動(dòng)使用文章ID作為別名(slug)

WordPress 自動(dòng)使用文章ID作為別名(slug)

最近有朋友一直在問:我使用固定鏈接結(jié)構(gòu)是 %post_id% (ID),但是 WP User Frontend 這個(gè)前端用戶中心插件要求必須設(shè)置為 %postname% (slug)才能使用,我不想改變以前的文章鏈接地址,該怎么辦?

本文就是解決這個(gè)問題的,讓 WordPress 自動(dòng)使用文章ID作為別名(slug),也就是說,即使你設(shè)置為 %postname% 結(jié)構(gòu),仍舊可以自動(dòng)生成 ID 結(jié)構(gòu)的鏈接。或許你會(huì)說,修改固定鏈接結(jié)構(gòu)后,原來的那些文章的鏈接變化了,怎么辦?不用擔(dān)心,照樣可以解決!進(jìn)入正題!

為了安全起見,請(qǐng)先備份網(wǎng)站的數(shù)據(jù)庫(kù),然后再按照下文操作!

更改固定鏈接結(jié)構(gòu)

假設(shè)你原來的固定鏈接結(jié)構(gòu)設(shè)置為 /%post_id%,現(xiàn)在你可以將它改為 /%postname% ,這時(shí)候你會(huì)發(fā)現(xiàn),新建文章和老文章都使用文章標(biāo)題作為別名

批量修改老文章的別名為ID

將下面的代碼添加到網(wǎng)站根目錄的 wp-config.php 的最底部,保存后訪問一次網(wǎng)站首頁(yè)(你將看到瀏覽器一直都在努力打開網(wǎng)頁(yè),不要急,耐心等待,直到網(wǎng)頁(yè)真正打開,所需時(shí)間看文章數(shù)和網(wǎng)絡(luò)情況而定)。網(wǎng)頁(yè)打開后,刪除剛剛添加到 wp-config.php 的代碼!

/**
 * 批量更改舊文章的別名為ID
 * 使用方法:將代碼添加到網(wǎng)站根目錄的 wp-config.php 的最底部,訪問一次網(wǎng)站首頁(yè),等頁(yè)面打開后,再刪除這些代碼
 * http://www.ydqwiac.cn/wordpress-using-post-id-as-slug.html
 */
// 添加一個(gè)變量來包容文章標(biāo)題數(shù)組,防止重復(fù)操作
$slug_done = array();
// 查詢所有文章
$posts = $wpdb->get_results( "
	SELECT
	`ID`,
	`post_title`
	FROM
	`" . $wpdb->posts . "`
	WHERE
	`post_type` = 'post'
	" );
// 輸出文章
foreach( $posts AS $single ) {
	$this_slug = $single->ID;
	$slug_done[] = $this_slug;
    //  使用文章ID替換文章原來的別名
	$wpdb->query( "
		UPDATE
		`" . $wpdb->posts . "`
		SET
		`post_name` = '" . $this_slug . "'
		WHERE
		`ID` = '" . $single->ID . "'
		LIMIT 1
		" );
}

新文章自動(dòng)使用ID作為別名

將下面的代碼添加到主題的 functions.php ,新建的文章都會(huì)自動(dòng)使用ID作為別名

/**
 * 新文章自動(dòng)使用ID作為別名
 * 作用:即使你設(shè)置固定連接結(jié)構(gòu)為 %postname% ,仍舊自動(dòng)生成 ID 結(jié)構(gòu)的鏈接
 * http://www.ydqwiac.cn/wordpress-using-post-id-as-slug.html
 */
add_action( 'save_post', 'using_id_as_slug', 10, 2 );
function using_id_as_slug($post_id, $post){
	global $post_type;
	if($post_type=='post'){ //只對(duì)文章生效
		// 如果是文章的版本,不生效
		if (wp_is_post_revision($post_id))
			return false;
		// 取消掛載該函數(shù),防止無限循環(huán)
		remove_action('save_post', 'using_id_as_slug' );
		// 使用文章ID作為文章的別名
		wp_update_post(array('ID' => $post_id, 'post_name' => $post_id ));
		// 重新掛載該函數(shù)
		add_action('save_post', 'using_id_as_slug' );
	}
}

2013-10-19更新:添加文章類型判斷,只對(duì)文章(post)生效,不會(huì)影響頁(yè)面等其他類型

參考資料:

http://www.ryankessen.com/50/how-to-mass-change-article-slug-urls-in-wordpress/

http://wordpress.stackexchange.com/questions/51363/

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
基礎(chǔ)教程

讓 WordPress 只搜索文章的標(biāo)題

2013-9-18 9:42:18

基礎(chǔ)教程

WordPress 添加自定義文章類型的存檔頁(yè)面到菜單

2013-9-26 7:52:00

15 條回復(fù) A文章作者 M管理員
  1. leon

    你好,我看了這篇文章,很不錯(cuò)。如果是自定義文章類型呢?我實(shí)驗(yàn)了下把那段函數(shù)if($post_type==’post’)換成
    if($post_type==’mytype’),發(fā)現(xiàn)無法添加新文章在自定義類型中。請(qǐng)教哪里還需要改動(dòng)一下嗎?

    • 網(wǎng)站編輯

      不好意思,沒時(shí)間測(cè)試了

  2. 哈嘍沃德

    可以把標(biāo)簽別名改為ID么 這樣就不用翻譯了 拼音了

  3. z4127

    如何更改最后一段代碼,在發(fā)表文章時(shí)用所有已發(fā)布的文章數(shù)量加1做別名,這樣就可以連續(xù)了,還有最后一段代碼在編輯文章后別名會(huì)變成當(dāng)前id
    謝謝

  4. jewel

    我原本是使用默認(rèn)的連接“http://localhost/wordpress/?p=123”,如果改為 /%postname% 的話,就出現(xiàn)連接錯(cuò)誤,服務(wù)器找不到的問題,請(qǐng)問怎么解決

  5. 駱小駝

    ?? ?? ??

    如果大家有使用 Advanced Custom Fields (超級(jí)字段)插件的話

    將if($post_type==’post’){

    修改為
    if(is_admin()&$post_type==’page’||is_admin()&$post_type==’acf’){}else{

    不然是無法保存字段的,我今天修改字段名時(shí),保存后,我驚恐的發(fā)現(xiàn),之前設(shè)置字段數(shù)據(jù)全部清空了。

    好險(xiǎn)阿里云有備份。

    我的使用的 Advanced Custom Fields 4.3.8 版本, wordpress是3.9.2

  6. 左邊

    理解了半天沒有看到。如果我現(xiàn)在1545.html結(jié)尾的,是先修成為wp._hayyp.html,再改回ID?神啊。我要崩潰了。

  7. xiaxiansheng

    按照你說的這個(gè)都做了,后臺(tái)是postname,現(xiàn)在在后臺(tái)發(fā)文章都是postid,但是用了你現(xiàn)在的這個(gè)后臺(tái)插件,在前臺(tái)發(fā)布文章就只能顯示postname,感覺怪怪的。。

    • 網(wǎng)站編輯

      通過WPUF插件前臺(tái)發(fā)布的文章默認(rèn)就是必須使用 postname,上面的代碼只是應(yīng)用于后臺(tái)而已。如果你是管理員,在后臺(tái)發(fā)布文章吧。如果是稿件,你總得審核一下,編輯一下在發(fā)布吧。

  8. 那如果填寫了Slug,那么又怎么辦?能不能自動(dòng)檢測(cè),有就用Slug,沒就用ID?

    • if ( !empty($post_name) || wp_is_post_revision($post_id) )

  9. 如何網(wǎng)站升級(jí),需不需要重新操作一次?

  10. 哈~這篇文章很用心呢~

?
個(gè)人中心
購(gòu)物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

温宿县| 黄大仙区| 洪江市| 舟山市| 黄梅县| 白山市| 博罗县| 黔西| 沅陵县| 花垣县| 宣汉县| 东丰县| 常山县| 于都县| 枣庄市| 泗水县| 芦溪县| 神农架林区| 马关县| 犍为县| 文昌市| 湖州市| 永年县| 昌都县| 博兴县| 景东| 盐边县| 简阳市| 兴山县| 喀喇沁旗| 和硕县| 资阳市| 杂多县| 永州市| 涞源县| 射洪县| 陵川县| 遂平县| 内丘县| 京山县| 通海县|