WordPressで固定ページの様々な値を取得する : WordPress

Pocket

WordPressの固定ページ(投稿タイプpage)の覚書。

基本的なコード(タイトル,内容を表示)

<?php if(while (have_posts()) : the_post(); ?>
    <h1><?php the_title(); ?></h1> // --- [1]
    <?php the_content(); ?>
<?php endwhile; ?>

[1] the_titleはループ内で使用する。ループ外でタイトルを表示する場合はテンプレートタグsingle_post_titleを利用する。
» テンプレートタグ/the title – WordPress Codex 日本語版
» single_post_title

詳細なページ情報の取得

<?php while (have_posts()) : the_post(); ?>
    <?php
        // ポスト情報の取得
        $ID = $post->ID; // 投稿ID
        $title = $post->post_title; // タイトル
        $content = $post->post_content; // 投稿内容
        $slug = $post->post_name; // スラッグ
        $parent = $post->post_parent; // 親投稿の有無
        $uri = get_page_uri($ID);
    ?>
    <h1><?php the_title(); ?></h1>   // [2]
    <?php the_content(); ?>              // [3]
    <?php
        echo("ID : " . $ID . "<br />\n");    // 投稿ID(ページID)
        echo("slug : " . $slug . "<br />\n");    // ページスラッグ
        echo("url : " . $uri); // URI
    ?>
<?php endwhile; ?>

[1] WordPressにより自動的に設定されるグローバル変数$wp_query(WP_Queryのインスタンス)のメソッド the_post()は投稿情報を持つオブジェクト$postをグローバル変数として設定する。
[2] <?php echo($title); ?><?php the_title(); ?>と同じ値。
[3] <?php echo($content); ?><?php the_content(); ?>と表示内容が異なる(pタグが削除される?)。

上記はget_page関数を使い下記のように記載しても同じ処理をする
» get_page関数

<?php while (have_posts()) : the_post(); ?>
    <?php
        /* 主な投稿情報のセットアップ */
        $ID = $post->ID; // 投稿ID
        $page = get_pate($ID);
        $title = $page->post_title; // タイトル
        $content = $page->post_content; // 投稿内容
        $slug = $page->post_name; // スラッグ
        $parent = $page->post_parent; // 親投稿の有無
        $uri = get_page_uri($ID);
    ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
    <?php
        echo("ID : " . $ID . "<br />\n");    // 投稿ID(ページID)
        echo("slug : " . $slug . "<br />\n");    // ページスラッグ
        echo("url : " . $uri); // URI
    ?>
<?php endwhile; ?>

投稿ID/スラッグによる処理の振り分け

コンディショナルタグis_pageを使うと投稿ID/ページスラッグに応じて処理を変えることができる。

is_page('n')   //nはページID。ページIDに応じたきりかえ
is_page("slugname") // ページスラッグに応じた切り替え

子ページページの処理の振り分け

$ID = $wp_query->post->ID
$page = get_page($ID);
$parent = $page->post_parent;
$parentsSlugs = explode("/", get_page_uri($ID));
if($parent && in_array("hoge", $parentsSlugs)) {
    // hogeより下階層のページの処理
} else {
    // その他のページの処理
}

その他のまとめ

(1) WordPressカスタムページは通常の投稿と同じように投稿IDが与えられる。カテゴリーIDのような特別なIDはない。
(2) 親ページの投稿IDを直接返すテンプレートタグはない?

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。