什么PHP代码可用于检索WordPress主题中的当前页面名称?
到目前为止我看到的所有解决方案( the_title()
, get_page()->post_name
, get_post()
等)都不适用于包含帖子条目的页面 . 他们都将返回最新博客条目的名称 .
换句话说,假设您在WordPress中创建了一个名为“My News”的页面 . 此页面设置为“帖子页面” . 在页面中添加几个帖子 . 现在,可以使用什么API来检索字符串“my-news”而不是最新帖子的名称?
Edit:
我发现以下变量似乎有效 .
$wp_query->queried_object->post_name
这实际上是页面名称(slug)的URL友好版本,这也是我正在寻找的 . 这是使用默认模板(二十)测试的 . 我真的不确定为什么下面给出的两个变量在我的网站上不起作用 . 感谢 print_r()
小贴士 .
现在,为什么这个信息隐藏得如此之深?
19 回答
这对我有用,如果我理解正确,你想在一个有帖子条目的页面上获取页面名称?
这是我的版本:
get_query_var('pagename')只是给了我页面slug . 所以上面替换了所有的破折号,并使每个单词的第一个字母大写 - 所以它实际上可以用作 Headers .
好的,你必须在循环之前获取页面 Headers .
检查参考:http://codex.wordpress.org/Function_Reference/WP_Query#Properties .
做一个
在循环之前查看$ wp_query对象的所有值
我想出了一个更简单的解决方案 .
从wp_title()获取页面名称的返回值,如果为空,则打印主页名称,否则为echo wp_title值 .
请记住使用第一个arg删除分隔,然后将display设置为false以用作变量的输入 . 然后在你的 Headers 等标签之间插入代码 .
为我工作并确保在您希望提取$ title的部分中声明第一个,这可以调整为返回不同的变量 .
sean@loft6.co.uk
这是我最终使用的,截至2018年:
如果你在functions.php中,这也有效 . 这不是最好的方法,因为你必须使用全局数组,但它可以工作 .
1-首先,我们需要添加一个过滤器 . 必须存在比template_include更好的过滤器,但我不知道所有这些过滤器 . 请指出我正确的 .
2-避免直接使用变量
3-现在,您可以在functions.php的任何其他部分使用函数
get_current_page()
.在循环内
这将显示当前页面 Headers . 为了参考http://codex.wordpress.org/Function_Reference/get_the_title
我们只需要使用“post”全局变量 .
这将回显当前页面/帖子 Headers .
希望这有帮助!!!!
WP全局变量
$pagename
应该可供您使用,我刚刚尝试使用您指定的相同设置 .$pagename
在函数get_page_template()
中的文件wp-includes / theme.php中定义,当然在解析页面主题文件之前调用它,因此它可以在模板内的任何页面上使用 .EDIT:
$pagename
var . 我想这是因为如果你不需要页面slug,那么它就不会设置它 .如果您将页面用作静态首页,则不会设置
$pagename
.这是/wp-includes/theme.php中的代码,它使用了无法设置
$pagename
时指出的解决方案:如果你想从functions.php文件中访问当前页面(那么,在循环之前,填充
$post
之前,初始化$wp_query
之前等等)你真的别无选择,只能访问服务器变量自己并从查询字符串中提取请求的页面 .请注意,这是一个"dumb"解决方案 . 它还没有't know, for instance that the page with the slug '即将来临'也是
p=6
. 并且它假定您的永久链接设置设置为pagename
(无论如何它们应该是!) .如果你有一个受控的场景,仍然可以是一个有用的小技巧 . 我正在使用这种情况,我希望将未登录的访问者重定向到“即将推出”的页面;但我必须确保我不会把它们扔进可怕的“重定向循环”中,所以我需要从这条规则中排除“即将推出”的页面:
试试这个:
我获取页面的slug名称的方法
我相信Roots的入门主题有一个很棒的功能,可以获得当前的页面 Headers ,非常黑客,覆盖所有基础,并且可以很容易地与wp_title钩子一起使用
https://github.com/roots/roots/blob/6.5.0/lib/titles.php .
我知道这是旧的,但我遇到了这个,似乎最简单的是使用它 .
我现在在
Wordpress Codec
找到了这个函数:被查询http://codex.wordpress.org/Function_Reference/wp_list_pages
这是
$wp_query->get_queried_object
的包装 . 这篇帖子让我在正确的方向,但似乎它需要这个更新 .一个选项,如果您正在查找实际查询的页面,而不是页面ID或slug,则截取查询:
在您的函数中,您可以访问$ wp对象,您可以获取页面名称或帖子名称:
另一方面,如果你真的需要帖子数据,那么获得它的第一个地方(可以说在这种情况下,最好的)是:
最后,我意识到这可能不是_166504的问题,但如果您正在寻找管理页面名称,请使用全局
$pagenow
.希望这会有所帮助!! ;)
您可以使用全局变量$ post获取当前页面,帖子或自定义帖子类型 .
echo $post->post_title
注意:在函数或类中,您需要在尝试使用$ post之前指定
global $post;
.如果页面上有循环,请确保使用
wp_reset_postdata();
结束每个循环以将$ post设置回显示的默认项目(页面) .请注意,'post_title'变量也可用于任何自定义循环/查询..包括菜单项和媒体附件...... WordPress中的所有内容都是“帖子” .
在循环开始之前显示 Headers :
谢谢