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