簡體   English   中英

使用多個參數和模板重寫 Wordpress Url - 動態路徑/參數放置

[英]Wordpress Url Rewrite with Multiple Parameters and Templates - Dynamic Path/Parameter Placement

當我們有由參數分隔的令牌時,我們在弄清楚 WP URL 重寫規則時遇到了一些麻煩。 簡而言之,我們希望為用戶頁面和視頻庫提供以下通用格式:

/users/steve/videos/2

...其中“用戶”是顯示用戶詳細信息的 PHP 頁面模板。 所以如果我們去:

/users/steve/

...我們看到史蒂夫的主頁。 如果我們去:

/users/steve/videos/

...我們點擊了視頻庫的頁面模板,我們看到了史蒂夫的視頻列表。 如果我們去:

/users/steve/videos/2

...我們點擊了第三個頁面模板,即視頻播放器頁面,在那里我們看到了視頻 ID 2。

所以我們有三個獨立的頁面模板,我們希望它們之間的子/父關系是用戶頁面 -> 視頻庫頁面 -> 視頻播放器頁面,用於我們的面包屑顯示。

我們想不通的訣竅是“steve”和“2”實際上是插入到url中的參數,中斷了父/子令牌關系。 其次,對於視頻播放器,根本沒有映射到視頻播放器頁面模板的標記。 只是“videos”標記的存在加上額外的數字參數告訴我們它映射到視頻播放器頁面模板。

作為替代方案,我們已經找到了如何讓 /users/videos/steve/2 工作的方法。 我們已將此重寫規則添加到子主題的 functions.php 文件中:

add_rewrite_rule(
    '^users/videos/([^/]*)/([^/]*)/?',
    'index.php?pagename=users/videos&users_filter_name=$matches[1]&user_video_id=$matches[2]',
    'top');

(我們還定義了變量“users_filter_name”和“user_video_id”,我們在模板中成功解析了它們)

但由於我們真正想要的是 /users/steve/videos/2 我們嘗試將規則更新為:

add_rewrite_rule(
    '^users/([^/]*)/videos/([^/]*)/?',
    'index.php?pagename=users/videos&users_filter_name=$matches[1]&user_video_id=$matches[2]',
    'top');

這似乎不起作用(它只是加載了“/users/”頁面),所以我們顯然做錯了。 用這種結構可以實現我們想要的嗎?

謝謝!

/users/steve/videos/2/格式的鏈接結構對Wordpress來說不是問題,其實你寫的代碼都是對的,只是有一點小錯誤。

很可能您在向 query_vars 添加新變量的代碼部分遇到了問題。 也許您在為時已晚的操作中添加了第二個變量。 當 Wordpress 看到一個晦澀的變量時,它的行為通常與您描述的一樣。

嘗試刪除所有代碼並將其復制到functions.php top

add_rewrite_rule(
'^users/([^/]*)/videos/([^/]*)/?',
'index.php?pagename=users/videos&users_filter_name=$matches[1]&user_video_id=$matches[2]',
'top');

add_filter( 'query_vars', function( $vars ){
    $vars[] = 'users_filter_name';
    $vars[] = 'user_video_id';
    return $vars;
} );

如果它不起作用,請嘗試將代碼更改為此

add_rewrite_rule(
'^users/([^/]*)/videos/([^/]*)/?',
'index.php?page_id=54&users_filter_name=$matches[1]&user_video_id=$matches[2]',
'top');

add_filter( 'query_vars', function( $vars ){
    $vars[] = 'users_filter_name';
    $vars[] = 'user_video_id';
    return $vars;
} );

其中 54 = 您的頁面 ID

每次更改后,您必須轉到設置並關閉/打開永久鏈接以重置緩存

我在我的演示中測試了這段代碼,它 100% 有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM