パラメータ 'public'をtrueに設定したカスタム投稿タイプを作成しました。これは、Views(Toolsetの一部)プラグインなど、投稿表示用のクエリを作成するのに役立つプラグインでアクセスできるようにする必要があるためです。
一方、新しい投稿またはページを作成してリンクビルダーを使用すると、この投稿タイプのエントリが検索ボックスに表示されません。この目的を達成する方法はありますか?
リンクビルダーでまたは既存のコンテンツへのリンクを押すと、内部の投稿/ページを表示するために関数wp_link_query()
が使用されているように見えます。
wp_link_query()
は/wp-includes/class-wp-editor.php
で定義されています。
/wp-admin/includes/ajax-actions.php
ファイルで定義されているwp_ajax_wp_link_ajax()
を介して問い合わせます。
これらの関数には、クエリを変更するための明示的なフィルタはありません。
フィルタwp_link_query_args
を導入する途中でパッチがあるようです
あなたはここでそれをチェックすることができます:
http://core.trac.wordpress.org/ticket/18042
マイルストーンは3.7
に設定されているので、これはあなたのラッキーバージョンかもしれません;-)
その場合は、おそらく次のように修正します。
カスタム投稿タイプを手でリストしたい場合は、
/**
* Filter the link query arguments to change the post types.
*
* @param array $query An array of WP_Query arguments.
* @return array $query
*/
function my_custom_link_query( $query ){
// change the post types by hand:
$query['post_type'] = array( 'post', 'pages' ); // Edit this to your needs
return $query;
}
add_filter( 'wp_link_query_args', 'my_custom_link_query' );
カスタム投稿タイプを1つだけ除外し、それ以外はすべて保持したい場合は、次の方法を試してください。
/**
* Filter the link query arguments to change the post types.
*
* @param array $query An array of WP_Query arguments.
* @return array $query
*/
function my_custom_link_query( $query ){
// custom post type slug to be removed
$cpt_to_remove = 'news'; // Edit this to your needs
// find the corresponding array key
$key = array_search( $cpt_to_remove, $query['post_type'] );
// remove the array item
if( $key )
unset( $query['post_type'][$key] );
return $query;
}
add_filter( 'wp_link_query_args', 'my_custom_link_query' );
デモスラッグ'news'
を使いました。
そして、以下は編集リンクダイアログから投稿タイプの配列を削除する方法です:
function removeCustomPostTypesFromTinyMCELinkBuilder($query){
$key = false;
$cpt_to_remove = array(
'cpt_one',
'cpt_two',
'cpt_three'
);
foreach ($cpt_to_remove as $custom_post_type) {
$key = array_search($custom_post_type, $query['post_type']);
if($key){
unset($query['post_type'][$key]);
}
}
return $query;
}
add_filter( 'wp_link_query_args', 'removeCustomPostTypesFromTinyMCELinkBuilder' );