Wrong slug on blog page

时间:2015-12-20 作者:N00b

<?php 
    global $post;
    $post_slug=$post->post_name;
?>
此代码用于<head> 和之前<body> 并且应该得到当前页面的slug。它工作得很好,但是当它在“general”(常规)博客页面上时,它将获得第一篇博客文章的支持。

示例:

博客url:www.my-site.com/blog/ -> 管理区域中的slug设置为blogwww.my-site.com/post-1/ -> 管理区域中的slug设置为post-1代码回显post-1 对于两者。Any ideas?

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

此代码用于<head> 和之前<body> 并且应该得到当前页面的slug。它工作得很好,但是当它在“一般”博客页面上时,它会得到第一篇博客文章的鼻涕虫。

$post 将在页面加载时设置为循环中的第一篇文章。在“页面”页面上,循环中只有一篇文章,这将是您期望的页面数据。在存档页面上,它将是页面上一组帖子中的第一篇帖子。这似乎正在发生。你不能相信$post 明确地像这样——也就是说,不知道它在什么时候被设置为什么。(大多数循环,甚至次要循环,也会改变此变量)

要获取页面数据本身,您需要get_queried_object() 但也要小心,因为它在各种类型的页面上都会有所不同——有时是post对象,有时是user对象,有时是null.

SO网友:jgraup

get_queried_object 检索当前查询的对象。

 $queried_object = get_queried_object();

 var_dump( $queried_object ); 
如果您在一篇文章中,它将返回文章对象如果您在一个页面上,它将返回页面对象如果您在存档页面上,它将返回文章类型对象如果您在类别存档中,它将返回类别对象如果您在作者存档中,它将返回作者对象等

SO网友:Zarko Jovic

global $wp_query;
$post_id = $wp_query->post->ID

$post = get_post( $post_id );
$slug = $post->post_name;

echo $slug;
这应该是最好的解决方案,以防您必须从二次循环中请求它,并且如果您仅使用全局$post变量得到错误的slug。

相关推荐

如何将Page-{slug}.php这样的页面模板文件移到子目录中?

我想移动页面模板文件,如page-{slug}.php 到我的主题中的子目录,WordPress将自动识别它们。如果所述表单的页面模板在子目录中不存在,那么WordPress应该回到默认的模板加载规则。我如何才能做到这一点?Note-1: This 对于页面模板和this 链接提及template-parts/page, 这不是一回事。Note-2: 我有多个page-{slug}.php 像页面模板文件一样,我想将它们移动到子目录中,以获得更整洁的文件组织。