問題描述
我正在嘗試在循環之外檢索當前 wordpress 頁面的塊。頁面的標題與 wp_title ()一起返回,但如何獲得 slug?
<li><a href="/slug-of-current-page/"><?php wp_title("",true); ?></a></li>
最佳解決方案
使用全局變量 $post 。
<?php
global $post;
$post_slug=$post->post_name;
?>
次佳解決方案
根據其他答案,slug 存儲在 post_name 屬性中。雖然可以直接訪問,我更喜歡 (未充分利用)get_post_field()功能,對於他們沒有適當的 API 的訪問 post 屬性。
它需要明確提供的帖子,並不默認為當前的,所以完整的當前帖子將是:
$slug = get_post_field( 'post_name', get_post() );
第三種解決方案
編輯 2016 年 4 月 5 日
挖掘更可靠後,我最後做了 this answer 到以下的帖子,導致這個編輯:(一定要檢查出來)
最可靠的方法,直到日期我可以想出如下:
// Get the queried object and sanitize it
$current_page = sanitize_post( $GLOBALS['wp_the_query']->get_queried_object() );
// Get the page slug
$slug = $current_page->post_name;
這樣,你是 99.9999%的確定你每次都獲得正確的數據。
原始答案
另一個更安全的替代方法是使用 get_queried_object(),它保存當前查詢對象以獲取由 post_name 屬性持有的頁面塊。這可以在您的模板中的任何地方使用。
可以使用 $post,但是由於任何自定義查詢或自定義代碼都可以更改 $post 的值,因此可能不可靠,因此應避免在循環之外。
使用 get_queried_object()獲取當前頁面對象可靠性更高,而且不太可能被修改,除非您使用破壞主查詢對象的惡性 query_posts,否則這些完全取決於您。
您可以使用以上內容
if ( is_page() )
$slug = get_queried_object()->post_name;
第四種方案
給出代碼示例,它看起來像你真正需要的是一個鏈接。在這種情況下,您可以使用 get_permalink(),它可以在循環之外使用。這應該比使用 post slug 更可靠地做你所需要的。
第五種方案
得到 s 子的簡單方法是:
<?php echo basename(get_permalink()); ?>
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。