WP_Queryを指定すると固定ページのslugが取れなかった

2024.10.22 09:00
2024.10.22 10:32
WP_Queryを指定すると固定ページのslugが取れなかった

WordPressでカスタム投稿タイプを設定し、固定ページにてデータを展開するページ「news」を作ったときに、固定ページのslugがうまく取得できませんでした。

固定ページのスラッグである「news」を取ろうと処理を走らせたところ、デフォルト値の「blog」が入ってきてしまいました。

「<body class=”news〜」が「<body class=”blog〜」になってしまったんですね。

※ちなみにページごとにcssを指定するために、固定ページのslugをbodyのclassに付与しています。付与する方法は、functions.phpに以下のコードを追記して実現しています。

/**
 * 固定ページのslugをclassに付与
 */
function my_body_class($classes)
{
    if (is_page()) {
      $page = get_post();
      $classes[] = $page->post_name;
    }
    return $classes;
}
add_filter('body_class', 'my_body_class');

固定ページではどのようにやっていたかというと、こんな感じです。

<?php
// 最新情報を取得
$paged = get_query_var('paged', 1); // ページ送り用記述
$args = array(
  'post_type' => array('post','hogehoge', 'fugafuga'),
  'paged' => $paged // ページ送り用記述
 );
$wp_query = new WP_Query($args);
?>

<body <?php body_class(); ?>>

これではうまくいきませんでした。
原因はシンプルで、body_class()の前にデータを取得していたからのようです。

これを逆にしてあげればいいんですね。

<body <?php body_class(); ?>>

<?php
// 最新情報を取得
$paged = get_query_var('paged', 1); // ページ送り用記述
$args = array(
  'post_type' => array('post','hogehoge', 'fugafuga'),
  'paged' => $paged // ページ送り用記述
 );
$wp_query = new WP_Query($args);
?>

body_class()を実行した後に最新情報を取得します。
これで無事取得できました!

今回は以上です!