私はCodexを精査し、get_page_by_title()を動かすことができず、このタスクのための標準的なWP関数がないように思われることにかなり驚いています。
投稿/ページタイトルのスラッグを使用して、任意の投稿/ cptまたはページのIDを取得する必要があります。理想的には、私は以下を探しています:
get_post_ID_by_title('My post title', 'customposttype');
私は何をすべきですか?
あなたはグーグルでジャンプするこの機能を使うことができます
/**
* Retrieve a post given its title.
*
* @uses $wpdb
*
* @param string $post_title Page title
* @param string $post_type post type ('post','page','any custom type')
* @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A.
* @return mixed
*/
function get_post_by_title($page_title, $post_type ='post' , $output = OBJECT) {
global $wpdb;
$post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $page_title, $post_type));
if ( $post )
return get_post($post, $output);
return null;
}
関数パラメータがありません。 2番目のオプションのパラメータ$ outputにnullを入れてください。この関数はあなたのために働くでしょう。
get_page_by_title('My post title', null, 'customposttype');
私はちょうど同じ問題に遭遇し、私のためにnullを追加してそれを修正しました。
私は直接のDBクエリを敬遠する傾向があります。代わりに、私はWP_Query
オブジェクトを使って私のために物事を解析します。
これは基本的に、与えられたスラッグに基づいて投稿を取得するために私のテーマの1つで使用する関数です。
function get_post_id( $slug, $post_type ) {
$query = new WP_Query(
array(
'name' => $slug,
'post_type' => $post_type
)
);
$query->the_post();
return get_the_ID();
}
これはWP APIを使用して、与えられたスラッグを持つ特定のタイプの投稿を取得し、結果に対して通常のループ関数を実行し、投稿のIDを返します。関数を少し変更することで投稿全体を返すためにそれを使うこともできますが、それはあなた次第です。
これは数年前のことですが、Googleで検索するとまだ表示されます。だから、これを行うための簡単な方法は次のとおりです。
$page = get_page_by_title( 'my post title' );
または
$page = get_post_ID_by_title('my post title', OBJECT, 'customposttype');
次に$ pageオブジェクトを使ってIDを取得します。
$page->ID
現在(WP> 4.9.2)、このようにしてtitle/slugであなたの "any"与えられた投稿/ページなどを見つけるでしょう:
$page = get_posts(
array(
//'name' => 'your-post-slug', // by post slug
'title' => 'Your post title', // by post title
'post_type' => 'page' // post type of your preference
)
);
if ($page = $page[0]) // First/lowest ID taken if many objects
{
// Then you do whatever is needed...
// $id = $page->id;
// $content = $page->post_content;
// or $content = apply_filters('the_content', $page->post_content);
// etc.
}