WordPress 設定文章 post_name 與 ID 同步

8,683 3

前言

我一直有個強迫症,看著 WordPress 的文章中有個欄位 post_name 如果不設定的話,就會預設使用標題 title 作為 post_name,導致使用 post_name 作為文章 URL 的時候會出現中文,看著很不協調。

然而我又不想手動去設定 post_name,於是乎想著能不能將 post_name 預設設定成與 ID 相同。

批次替換現有資料

首先將已經發布的文章全部替換掉,直接用 SQL 語句

SQL
UPDATE wp_posts SET post_name = ID;

這裡的 wp_posts 是 WordPress 資料庫中的文章表。

發布文章自動修改

要在 WordPress 中每次發布或更新文章時,預設將 post_name 設定為與 ID 相同,可以透過新增自訂功能來實現此功能。

開啟 WordPress 主題資料夾中的 functions.php 檔案,在檔案的末尾新增以下程式碼:

PHP
function set_postname_as_id( $post_id ) {
    $post = get_post( $post_id );
    $post_name = $post->post_name;
    $post_id = $post->ID;

    if ( $post_name != $post_id ) {
        $args = array(
            'ID' => $post_id,
            'post_name' => $post_id,
        );
        wp_update_post( $args );
    }
}
add_action( 'save_post', 'set_postname_as_id' );

儲存並上傳 functions.php 檔案到您的 WordPress 主題資料夾。

每當發布或更新文章時,WordPress 將檢查文章的 post_name 是否與 ID 相同。如果不同,它將自動更新 post_name 為 ID。請注意,這將影響所有類型的文章,包括頁面和自訂文章類型。如果只想套用於特定類型的文章,可以在 set_postname_as_id 函式內新增適當的條件檢查。

比如我用的是 B2 主題,我想替換所有的文章類型,除了 page 頁面,可以改成下面這樣:

PHP
function set_postname_as_id( $post_id ) {
    // 获取文章对象
    $post = get_post( $post_id );

    // 获取当前文章的 post_name 和 ID
    $post_name = $post->post_name;
    $post_id = $post->ID;

    // 检查文章类型是否为 page,如果是则返回
    if ( $post->post_type == 'page' ) {
        return;
    }

    // 检查 post_name 是否与 ID 不同
    if ( $post_name != $post_id ) {
        // 准备要更新的文章参数
        $args = array(
            'ID' => $post_id,
            'post_name' => $post_id,
        );

        // 更新文章的 post_name 为 ID
        wp_update_post( $args );
    }
}

// 在保存文章时触发自定义功能
add_action( 'save_post', 'set_postname_as_id' );

評論

(3)
  1. 随遇而安
    Chrome 104 Windows 7

    你好,看你的站做的挺不错的,空了联系下我1587894193,想和你商量下广告事宜。

  2. don
    Edge 118 Windows 10

    您好,想注册img的图床,不过似乎无法刷新出验证码

  3. Edge 119 Windows 10

    小俊博客的域名已更改,烦请博主更改一下,谢谢!

發佈評論

© 2026 一紙忘憂. 保留所有權利.

一紙忘憂的個人網站,關於技術探索與日常生活,記錄 Web 開發、後端與 DevOps 實踐,分享軟體工具、數位體驗,以及程式碼之外的見聞與思考。