web-dev-qa-db-fra.com

Wordpress Obtenir l'ID de page en dehors de la boucle

Je veux obtenir l'ID de la page avant de commencer la boucle dans Wordpress. j'utilise

$page = get_query_var('page_id');

Apparemment, ça ne retourne rien.

Je veux juste vérifier l'ID d'une page et ajouter une classe à la balise <body> en fonction de celle-ci.

69

Si vous utilisez de jolis permaliens, get_query_var('page_id') ne fonctionnera pas.

Obtenez plutôt l'ID d'objet demandé depuis le $wp_query global:

// 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();
149
TheDeadMedic

Vous pouvez également créer une fonction générique pour obtenir l'ID de la publication, que ce soit à l'extérieur ou à l'intérieur de la boucle (gère les deux cas):

<?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;
} ?>

Et simplement faire:

$page_id = get_the_post_id();
8
Nadeem Khan

Utilisez ce $ post global à la place:

global $post;
echo $post->ID;
6
ryscript

Si, par quelque moyen que ce soit, vous avez cherché ce sujet à cause de la page de publication (alternative à la page d'index lors de l'utilisation de la page de garde statique), la bonne réponse est alors

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

(extrait de Forrst | Echo WordPress "Posts Page" title - Du code provenant de tammyhart )

4
banesto

Si vous êtes sur une page et que cela ne fonctionne pas:

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

vous pouvez essayer de construire le permalien manuellement avec PHP afin de pouvoir rechercher l'ID de l'article:

// 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);

Il se peut qu'il ne saisisse pas tous les liens permanents possibles (surtout depuis que je supprime la chaîne de requête), mais vous pouvez le modifier pour l'adapter à votre cas d'utilisation.

0
Jarrett Barnett

Utilisez ci-dessous deux lignes de code pour obtenir la page en cours ou l'identifiant de publication 

global $post;
echo $post->ID;
0
Braj Kishor Sah

Vous pouvez utiliser is_page($page_id) en dehors de la boucle pour vérifier.

0
nikc.org

Cette fonction récupère l'identifiant d'une page en cours.

get_the_ID();
0
jruzafa