問題描述

是否可以重新安裝/更改外掛現有的自定義帖子型別的外掛 (不需要簡單地編輯外掛)?

也就是說,如果 Plugin X 建立了一個帶有 slug /unokedtoast 的自定義帖子型別,那麼是否可以將更改 slug 到/bread /?的 functions.php(或類似的東西) 新增一個過濾器?

最佳解決方案

是的,這是可能的,但是如果外掛使用 rewrite => array('slug' => 'post_type')引數來建立自定義的帖子型別,那麼你很可能無法替換這個外掛。

每當建立自定義帖子型別時,都會將 URL 重寫規則寫入資料庫。根據哪個操作觸發建立自定義帖子型別 (例如 init 操作),WordPress 將重新整理重寫規則,並恢復自定義帖子型別的 s s,無論您嘗試進行什麼更改。

也就是說,您可以為自定義帖子型別提供自定義外掛。以下示例假定您具有 movies 的自定義帖子型別,並且您嘗試將/movies/外掛更改為/films/

要完成,這裡是用於定義 movies 自定義帖子型別的基本功能。你引用的外掛應該是這樣的:

function movies_register_post_type() {

    register_post_type(
        'movies',
        array(
            'labels' => array(
                'name' => __('Movies'),
                'singular_name' => __('Movie')
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array(
                'slug' => 'movies'
            )
        )
    );

} // end example_register_post_type
add_action('init', 'movies_register_post_type');

您可以透過根據現有的帖子型別提供自己的自定義規則來修改選項表。

基本上我們會這樣做:

  • 採取現有的一套規則,然後用自己的習慣 s then 寫自己的

  • 給予新的規則比自定義帖子型別的外掛更高的優先順序

您可以這樣做:

function add_custom_rewrite_rule() {

    // First, try to load up the rewrite rules. We do this just in case
    // the default permalink structure is being used.
    if( ($current_rules = get_option('rewrite_rules')) ) {

        // Next, iterate through each custom rule adding a new rule
        // that replaces 'movies' with 'films' and give it a higher
        // priority than the existing rule.
        foreach($current_rules as $key => $val) {
            if(strpos($key, 'movies') !== false) {
                add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top');
            } // end if
        } // end foreach

    } // end if/else

    // ...and we flush the rules
    flush_rewrite_rules();

} // end add_custom_rewrite_rule
add_action('init', 'add_custom_rewrite_rule');

現在,您將有兩種訪問電影的方式:

  • /movies/Back-To-The-Future

  • /films/Back-To-The-Future

請注意,我不建議將 add_custom_rewrite_rule 掛接到 init 操作中,因為它將觸發太頻繁。這只是一個例子。一個更好的應用該功能的地方將是主題啟用,外掛啟用,也許是 save_post 動作等。根據你需要做什麼,你可能只需要一次或幾次觸發。

此時,您可能需要考慮更新自定義帖子型別的固定連結以使用 「/movies/」 。例如,如果您導航到/films/,您將看到所有電影的列表,但是懸停在標題上將顯示/movies/磁碟仍在使用中。

要進一步,您可以在技術上設定一個 301 重定向,以捕獲到/movies/的所有連結,以重定向到他們的/films/對手,但這一切都取決於你正在嘗試做什麼。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。