問題描述

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