スラッグからカスタム投稿タイプの投稿IDを取得する方法は?


18

スラッグのみからカスタム投稿タイプの投稿IDを取得することは可能ですか?

私は、タイトルを使用してidから取得できることを知っています。しかし、カスタム投稿タイプに同じタイトルが存在する可能性があるため、スラッグが一意である可能性はありますか?

回答:


40

使用できますget_page_by_path()-名前にだまされないでください、3番目の引数は投稿タイプです:

if ( $post = get_page_by_path( 'the_slug', OBJECT, 'post_type' ) )
    $id = $post->ID;
else
    $id = 0;

7

数日待って、12月8日にリリースされるWordpress 4.4AFAIK)にアップグレードする場合は、スラッグの配列を取る新しいpost_name__inパラメーターを使用できます。WP_Query

完全な投稿オブジェクトが必要な場合

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug']
];
$q = get_posts( $args );
var_dump( $q );

IDのみが必要な場合

$args = [
    'post_type'      => 'my_custom_post_type',
    'posts_per_page' => 1,
    'post_name__in'  => ['post-slug'],
    'fields'         => 'ids' 
];
$q = get_posts( $args );
var_dump( $q );

いいけど、たぶんスラッグで1つの投稿を取得するには少し集中的ですか?なぜ彼らはその機能を追加したのですか!?
TheDeadMedic

1
@TheDeadMedic Mightyは少し集中的です。はい、これのパフォーマンスを実際にテストしていません。代替手段として追加しただけです;-)。理由については、WordPressが非常に有名であるために必要な素敵なものの1つのように見えます。命名規則、私見では、同じように、間違ってもpost_name財産とcategory_nameされているはずのパラメータ、slugないとname
ピーター・グーセン

すてきな:)本当にすてきな更新:)
stlawrance

1
@TheDeadMedic私の方法とあなたの方法の間に時間差はありません。各クエリを実行するのに、常に0.002〜0.005秒かかります。また、両方のメソッドは1つのクエリのみを実行します。;-)
Pieter Goosen

1
@TheDeadMedic 私は、PHPが行う作業が少ないことを意味しました -はい、確かに、完全に同意します。代替案を知ることはいつでも素晴らしいことですが(最高ではない場合もあります)、何らかのベンチマークを持っています。楽しむ;-)
ピーターグーセン

5

投稿IDだけが必要な場合は、1行でトリックを行います。

url_to_postid( site_url('the_slug') );

1
これurl_to_postidは非常に柔軟な機能です。あらゆる種類のパーマリンク/完全なURLを渡して、そのURLの最も正確なポストIDを取得できます。ただし、柔軟な使用法のため、非常に遅くなります(特にエンドポイント/ポストタイプが多い場合)。あなたが唯一の特定のポストタイプのスラッグに渡すと、それを使用してはるかに高速ですget_page_by_path()
フィリップ・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.