WordPressには、データベースのデータを取得してくれる便利な関数がたくさんあります。
面倒なSQLを書かなくても、ターム名やスラッグで必要なデータが取得できます。
スラッグから投稿ページのIDを取得
$args=array(
'name' => 'スラッグ',
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 1
);
$posts = get_posts( $args );
$post_id = $posts[0]->ID;
get_postsは、WP_Queryクラスを利用して投稿を取得する。
色んなデータを取得できるが、今回はID取得がメインなので、上記のコードとなる。
$post = get_page_by_path('スラッグ', OBJECT, 'post');
$postID = $post->ID;
固定ページと同じく、get_page_by_pathも使えるが、これは投稿タイプが固定ページがデフォルトなので、第三引数のpostを忘れないようにする。
POST-IDだけが欲しいときはこっちのほうが速いかもしれない。
スラッグから固定ページのIDを取得
$page = get_page_by_path('スラッグ', $output=OBJECT, $post_type=page);
$pageID = $page->ID;
第1引数はスラッグと書いているが正確にはURLパスのサイトトップからのURIとなる。階層が無ければ単純に固定ページのスラッグのみでOK。
現在のURLからスラッグを取得したければ、basename()を使用するのが吉。
第2引数の$oututは戻り値の種類で、初期値はオブジェクト。ARRAY_A(配列)やARRAY_N(インデックス配列)も指定できる。
上記の場合、取得した$pageオブジェクトから、postsテーブルのIDを取得している。
スラッグからカスタム投稿のIDを取得
$custom_post = get_page_by_path('投稿のスラッグ', OBJECT, 'カスタム投稿タイプのスラッグ');
$custom_post_ID = $custom_post->ID;
固定ページと同じく、get_page_by_pathが使えるが、これは投稿タイプが固定ページがデフォルトなので、第三引数に、カスタム投稿タイプのスラッグ名を指定するのを忘れないようにする
タームのスラッグからタームIDを取得
$term = get_term_by('slug', 'IDが欲しいスラッグ名', 'タームが属するタクソノミーのスラッグ名');
$term_id = $term->term_id;
get_term_byでターム情報をオブジェクトで取得します。
上記の場合、new_itemというスラッグ名のタクソノミーに属する、スラッグ名appleのタームのIDが取得できます。今回スラッグからの取得なので、第1引数にslugを指定しています。指定しない場合は、idがデフォルトになります。idとした場合、IDが欲しいスラッグ名の部分は、タームid番号が入ります。
要するに、第1引数で指定したい種類(slug,id,name,term_taxonomy_id)・第2引数でタームの値・第3引数でタクソノミーを指定するわけです。
カスタム投稿を使ってる場合は、結構使う関数です。
カテゴリーのスラッグからIDを取得
$category = get_category_by_slug( 'スラッグ名' );
$category_term_id = $category->term_id;
$category_id = $category->cat_ID; //カテゴリID
$category_parent_id = $category->parent; //default = 0;
get_category_by_slug の戻り値はカテゴリオブジェクト。内部的にget_term_byを使用しているので、term_idでIDを取得します。カテゴリーIDには、cat_IDを指定します。オブジェクトなので親カテゴリとか名前、投稿数なども取得できます。