[wp]ページのスラッグを出力する方法

使うっちゃ使うし使わないっちゃ使わない。

こうする

<?php
    $args = array(
        'posts_per_page' => 4,
        'post_type' => '***',
        'post_status' => 'publish'
    );
    $the_query = new WP_Query($args);
    if ( $the_query->have_posts() ) :
?>
<ul>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <li class="<?php echo get_post(get_the_ID())->post_name; ?>"><?php the_title(); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; wp_reset_postdata(); ?>

つまりこれ。

<?php echo get_post(get_the_ID())->post_name; ?>

カスタム投稿とかで階層があっても、ちゃんとページのスラッグだけ出してくれるからとても助かる。

https://blog.megefeps.info/example/
→example

https://blog.megefeps.info/example/aaaaa/
→aaaaa

助かる。

どういうときにアレか

あんまり使わないんだけどね。

リンク集を作る時にリンク先によりリンクの装飾アイコンを振り分けたいとする。
ベタ打ちで作ってもいいんだけど、ページを非表示にした場合にリンクが連動しないので、合わせてリンクを削除しなきゃいけない。
だから、リンクを生成するついでにスラッグを取得してそれをclassに入れちゃえば、あとはcssで割り振ればいいじゃん、ページを非表示にしたらリンクも自動で消えて便利じゃん、という話。

ページのカスタムフィールドとかでアイコンを仕込んでおいてそれを呼び出してもいいんだけどね、後付けで作ることを踏まえるとそれはめんどくさそうだよね。

ということで、こんな感じになる。

<?php
    $args = array(
        'post_type' => '***',
        'post_status' => 'publish'
    );
    $the_query = new WP_Query($args);
    if ( $the_query->have_posts() ) :
?>
<ul>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" class="<?php echo get_post(get_the_ID())->post_name; ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php endif; wp_reset_postdata(); ?>

ページを指定してどうのこうの、みたいなのはたまにあるけどis_page()とかで条件分岐するのが一般的だし、スラッグを拾ってくる場面ってまずない。

活用シーンはめちゃくちゃ限られるので出番は少ない。

知らなくても困らない。

コメント

タイトルとURLをコピーしました