个性化阅读
专注于IT技术分析

如何在WordPress中获取当前页面名称?

哪些PHP代码可用于检索WordPress主题中的当前页面名称?

到目前为止, 我所看到的所有解决方案(the_title(), get_page()-> post_name, get_post()等)都不适用于包含帖子条目的页面。他们都将返回最新博客条目的名称。

换句话说, 假设你在WordPress中创建了一个名为”我的新闻”的页面。该页面被设置为”发布页面”。在页面上添加几个帖子。现在, 可以使用什么API来检索字符串” my-news”而不是最新帖子的名称?


我发现以下似乎有效的变量。

$wp_query->queried_object->post_name

这实际上是页面名称(子标签)的URL友好版本, 这也是我一直在寻找的内容。已使用默认模板(二十十)进行了测试。我真的不确定为什么下面给出的两个变量在我的网站上不起作用。感谢keatch提供的print_r()技巧。

现在, 为什么这些信息隐藏得如此深入?


#1


WordPress全局变量$ pagename应该对你可用。我刚尝试使用你指定的相同设置。

$ pagename在文件wp-includes / theme.php中的get_page_template()函数中定义, 该函数当然是在解析页面主题文件之前调用的, 因此可以在页面模板内的任何位置使用。

尽管似乎没有记录在案, 但仅在使用永久链接的情况下才设置$ pagename var。我猜这是因为如果你不使用它们, WordPress不需要页面插件, 因此它不会进行设置。

如果将页面用作静态首页, 则不会设置$ pagename。

  • 这是/wp-includes/theme.php中的代码, 该代码使用你在无法设置$ pagename时指出的解决方案:

    $ pagename = get_query_var(‘pagename’); if(!$ pagename && $ id> 0){//如果将静态页面设置为首页, 则不会设置$ pagename。从查询的对象$ post = $ wp_query-> get_queried_object();中检索它。 $ pagename = $ post-> post_name; }


#2


我获取页面的子弹名称的方法:

$slug = basename(get_permalink());

#3


好的, 你必须在循环之前获取页面标题。

$page_title = $wp_query->post->post_title;

检查参考:http://codex.wordpress.org/Function_Reference/WP_Query#Properties。

做一个

print_r($wp_query)

在循环之前查看$ wp_query对象的所有值。


#4


<?php wp_title(''); ?>

这对我有用。

如果我理解正确, 则希望在具有帖子条目的页面上获取页面名称。


#5


如果你要从functions.php文件中访问当前页面(因此, 在循环之前, 填充$ post之前, 初始化$ wp_query之前, 等等), 你实际上别无选择, 只能访问服务器变量本身并从查询字符串中提取请求的页面。

$page_slug = trim( $_SERVER["REQUEST_URI"] , '/' )

请注意, 这是一个”愚蠢”的解决方案。它不知道, 例如, 标有”即将到来”的页面也是p = 6。并且假定你的永久链接设置设置为pagename(无论如何它们都应该是!)。

但是, 如果你具有受控的方案, 可能会是一个有用的小技巧。我在希望将未登录的访问者重定向到”即将推出”页面的情况下使用此功能;但我必须确保没有将它们扔到可怕的”重定向循环”中, 因此我需要从此规则中排除”即将推出”页面:

global $pagenow;
if (
        ! is_admin() &&
        'wp-login.php' != $pagenow &&
        'coming-soon' != trim( $_SERVER["REQUEST_URI"] , '/' ) &&
        ! is_user_logged_in()
){
   wp_safe_redirect( 'coming-soon' );
}

#6


你可以使用全局变量$ post获取当前页面, 帖子或自定义帖子类型:

echo $post->post_title

注意:在函数或类中, 你需要指定全局$ post;在尝试使用$ post之前。

如果页面上有循环, 请确保以wp_reset_postdata();结尾每个循环。将$ post设置回显示的默认项目(页面)。

请注意, ” post_title”变量也可用于任何自定义循环/查询…包括菜单项和媒体附件… WordPress中的所有内容均为” post”。


#7


我相信Roots入门主题具有出色的功能来获取当前页面标题。它很容易被黑客入侵, 涵盖所有基础, 并且可以很容易地与wp_title挂钩一起使用。

/**
 * Page titles
 */
function roots_title() {
  if (is_home()) {
    if (get_option('page_for_posts', true)) {
      echo get_the_title(get_option('page_for_posts', true));
    } else {
      _e('Latest Posts', 'roots');
    }
  } elseif (is_archive()) {
    $term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
    if ($term) {
      echo $term->name;
    } elseif (is_post_type_archive()) {
      echo get_queried_object()->labels->name;
    } elseif (is_day()) {
      printf(__('Daily Archives: %s', 'roots'), get_the_date());
    } elseif (is_month()) {
      printf(__('Monthly Archives: %s', 'roots'), get_the_date('F Y'));
    } elseif (is_year()) {
      printf(__('Yearly Archives: %s', 'roots'), get_the_date('Y'));
    } elseif (is_author()) {
      $author = get_queried_object();
      printf(__('Author Archives: %s', 'roots'), $author->display_name);
    } else {
      single_cat_title();
    }
  } elseif (is_search()) {
    printf(__('Search Results for %s', 'roots'), get_search_query());
  } elseif (is_404()) {
    _e('Not Found', 'roots');
  } else {
    the_title();
  }
}

#8


尝试这个:

$pagename = get_query_var('pagename');

#9


我想出了一个更简单的解决方案。

从wp_title()获取页面名称的返回值。如果为空, 则打印主页名称, 否则回显wp_title()值。

<?php $title = wp_title('', false); ?>

请记住要删除第一个参数的分隔, 然后将display设置为false用作变量的输入。然后, 将标题等标记之间的代码合并即可。

<?php if ( $title == "" ) : echo "Home"; else : echo $title; endif; ?>

它为我工作, 并确保在要提取$ title的部分中声明了第一个, 可以对其进行调整以返回不同的变量。


#10


我们只需要使用” post”全局变量:

global $post;
echo $post->post_title;

这将回显当前页面/帖子标题。


#11


采用:

$title = get_the_title($post);
$parent_title = get_the_title($post->post_parent);

echo $title;
echo $parent_title;

#12


这似乎是最容易使用的:

<?php single_post_title(); ?>

#13


在循环开始之前显示标题:

$page_title = $wp_query->post->post_title;

#14


一种选择是, 如果要查找实际的查询页面, 而不是页面ID或标签, 则是拦截查询:

add_action('parse_request', 'show_query', 10, 1);

在你的函数中, 你可以访问$ wp对象, 并且可以通过以下方式获取页面名称或帖子名称:

function show_query($wp){
     if ( ! is_admin() ){ // heck we don't need the admin pages
         echo $wp->query_vars['pagename'];
         echo $wp->query_vars['name'];
     }
}

另一方面, 如果你确实需要发布数据, 则获取它的第一个位置(最好是在这种情况下, 最好)是:

add_action('wp', 'show_page_name', 10, 1);

function show_page_name($wp){
     if ( ! is_admin() ){
        global $post;
        echo $post->ID, " : ", $post->post_name;
     }
}

最后, 我意识到这可能不是OP的问题, 但是如果你要查找Admin页面名称, 请使用全局$ pagenow。


#15


在WordPress循环中:

if ( have_posts() ) : while ( have_posts() ) : the_post();
/******************************************/
echo get_the_title();
/******************************************/
endwhile; endif;

这将显示当前页面标题。

供参考:get_the_title()


#16


这是我的版本:

$title = ucwords(str_replace('-', ' ', get_query_var('pagename')));

get_query_var(‘pagename’)只是给了我这个页面page。因此, 上面的代码替换了所有的破折号, 并使每个单词的第一个字母变为大写-因此它实际上可以用作标题。


#17


截至2018年, 我最终使用的是:

<section id="top-<?=(is_front_page() ? 'home' : basename(get_permalink()));?>">

#18


我现在在WordPress编解码器上找到了此功能,

被查询

这是$ wp_query-> get_queried_object的包装。

这篇文章将我带往正确的方向, 但似乎需要此更新。


#19


如果你在functions.php中, 这也适用。这不是最佳方法, 因为你必须使用全局数组, 但是它可以工作。

首先, 我们需要添加一个过滤器。必须存在一个比template_include更好的过滤器, 但我不知道所有这些。请指出我正确的一个。

add_filter( 'template_include', 'var_template_include', 1000 );
function var_template_include( $template ){
    global $wp_query;
    $GLOBALS['current_page'] = $wp_query->get_queried_object()->post_name;
    return $template;
}

避免直接使用变量

function get_current_page( $echo =  false ) {
    if( !isset( $GLOBALS['current_page'] ) )
        return false;
    return $GLOBALS['current_page'];
}

现在, 你可以在functions.php的任何其他部分中使用函数get_current_page()。

赞(0)
未经允许不得转载:srcmini » 如何在WordPress中获取当前页面名称?

评论 抢沙发

评论前必须登录!