かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress カスタム投稿タイプのslug (URI)から投稿IDを取得したい

slug名から投稿を取得するには get_page_by_path を使う

get_page_by_path( string $page_path, string $output = OBJECT, string|array $post_type = 'page' )
出典: get_page_by_path() | Function | WordPress Developer Resources

<?php
$post = get_page_by_path('{slug}', 'OBJECT', $post_type);
$postID = $post->ID;
echo $postID;

カスタム投稿タイプで取得するには第三引数にpost_typeを渡す必要があるので、第二引数にはデフォルト値のOBJECTを指定してオブジェクト形式で取得するのが楽。
第二引数でARRAY_Nとか指定したら別の形式にも出来るっぽいけど使い方が所がイマイチ分からん…

post オブジェクトからslug名を取得する

<?php
$slug = $post->post_name;

おまけ タクソノミー (分類 e.g. タグ・カテゴリー) Term(タグ名・カテゴリー名)ののSulg名からtermを取得する方法

term_slugからもtermアーカイブのURL取得できるget_term_linkのコードを見ていたら、内部でslug名のときはget_term_byを使っていたので、これを使えばterm_slugからtermオブジェクトを取得できる事を知りました。

get_term_by( string $field, string|int $value, string $taxonomy = '', string $output = OBJECT, string $filter = 'raw' )
出典: get_term_by() | Function | WordPress Developer Resources

<?php
$term = get_term_by('slug', '{term_slug}', $taxonomy);
var_dump($term);

 
内部的にSQL発行してそうだし、パフォーマンス面からもこういうのあまり多用しなくて済む設計にしておきたい。


[参考]