問題描述

我正在嘗試在循環之外檢索當前 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。