WordPress获取循环外的页面ID

时间:2010-06-27 12:57:20

标签: php wordpress

我希望在WordPress中启动循环之前获取页面ID。我正在使用

$page = get_query_var('page_id');

显然,它什么都不返回。

我只是想检查一个页面的ID,并根据它将一个类添加到<body>标记。

11 个答案:

答案 0 :(得分:153)

如果你使用非常永久链接,get_query_var('page_id')将无效。

相反,从全局$wp_query 获取查询的对象ID

// Since 3.1 - recommended!
$page_object = get_queried_object();
$page_id     = get_queried_object_id();


// "Dirty" pre 3.1
global $wp_query;

$page_object = $wp_query->get_queried_object();
$page_id     = $wp_query->get_queried_object_id();

答案 1 :(得分:9)

您还可以创建一个通用函数来获取帖子的ID,无论是在句子的外部还是内部(处理两种情况):

<?php

/**
 * @uses WP_Query
 * @uses get_queried_object()
 * @see get_the_ID()
 * @return int
 */
function get_the_post_id() {
  if (in_the_loop()) {
       $post_id = get_the_ID();
  } else {
       global $wp_query;
       $post_id = $wp_query->get_queried_object_id();
         }
  return $post_id;
} ?>

简单地说:

$page_id = get_the_post_id();

答案 2 :(得分:7)

使用此全球$ post代替:

global $post;
echo $post->ID;

答案 3 :(得分:4)

如果您因为帖子页面(使用静态首页时的索引页面替代)而以任何方式搜索此主题,那么正确的答案是:

if (get_option('show_on_front') == 'page') {
    $page_id = get_option('page_for_posts');
    echo get_the_title($page_id);
}

(摘自Forrst | Echo WordPress "Posts Page" title - Some code from tammyhart

答案 4 :(得分:0)

您可以在循环外使用is_page($page_id)进行检查。

答案 5 :(得分:0)

此功能可以从页面当前获取id。

get_the_ID();

答案 6 :(得分:0)

使用以下两行代码获取当前页面或帖子ID

global $post;
echo $post->ID;

答案 7 :(得分:0)

如果您在某个页面上但这不起作用:

$page_object = get_queried_object();
$page_id     = get_queried_object_id();

您可以尝试使用PHP手动构建永久链接,以便查找帖子ID:

// get or make permalink
$url = !empty(get_the_permalink()) ? get_the_permalink() : (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$permalink = strtok($url, '?');

// get post_id using url/permalink
$post_id = url_to_postid($url);

// want the post or postmeta? use get_post() or get_post_meta()
$post = get_post($post_id);
$postmeta = get_post_meta($post_id);

它可能无法捕获每个可能的永久链接(特别是因为我正在剥离查询字符串),但您可以修改它以适合您的用例。

答案 8 :(得分:0)

我是按照以下方式完成的,它对我来说非常有效。

首先在header.php中声明一个全局变量,在更改之前分配帖子或页面的ID,因为LOOP会为其分配显示的最后一个条目的ID:

$GLOBALS['pageid] = $wp_query->get_queried_object_id();

要在模板中的任何位置使用,例如footer.php:

echo $GLOBALS['pageid];

答案 9 :(得分:-3)

这是正确的代码。

echo $post->ID;

答案 10 :(得分:-3)

如果你不在WordPress的循环中,你不能使用任何wordpress方法,所以你必须使用纯PHP。

您可以使用此代码。肯定会帮助你:))

$page_id = @$_GET['page_id'];

if (!is_numeric($page_id)) {
    // Then the uri must be in friendly format aka /my_domain/category/onepage/
    // Try this
    //$path = '/www/public_html/index.php/';
    ///$path = '/my_domain/category/onepage/';
    $path = $_SERVER['REQUEST_URI'];
    // Clean the uri
    //$path = str_replace('/', '', $page);
    $path = str_replace('.php', '', $path);
    //$path = str_replace('?s=', '', $path);
    $path = $path ? $path : 'default';

    $path_len = strlen($path);
    $last_char = substr($path, $path_len -1);
    //echo $last_char;
    $has_slash = strpos($last_char, "/");
    //echo $has_slash;
    if ($has_slash === 0) :
        $path = substr($path, 0, $path_len -1);
    elseif ($has_slash === null) :
        $path = substr($path, 0, $path_len);
    endif;
    //echo "path: ".$path; // '/www/public_html/index'
    $page = substr(strrchr($path, "/"), 1);
    echo "page: ".$page; // 'index'
}

$my_page_id = 31;
$my_page = 'mypage';

//echo "page: ".$page;
//echo "page_id ".$page_id;
if($page_id == $my_page_id || $page == $my_page) 
{
    // your stuff....
}

享受!