问题描述

我正在尝试在循环之外检索当前 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。