web-dev-qa-db-ja.com

WordPressリンクビルダーから投稿タイプを除外

パラメータ 'public'をtrueに設定したカスタム投稿タイプを作成しました。これは、Views(Toolsetの一部)プラグインなど、投稿表示用のクエリを作成するのに役立つプラグインでアクセスできるようにする必要があるためです。

一方、新しい投稿またはページを作成してリンクビルダーを使用すると、この投稿タイプのエントリが検索ボックスに表示されません。この目的を達成する方法はありますか?

2
urok93

バージョン<= 3.6.1

リンクビルダーでまたは既存のコンテンツへのリンクを押すと、内部の投稿/ページを表示するために関数wp_link_query()が使用されているように見えます。

Link builder

wp_link_query()/wp-includes/class-wp-editor.phpで定義されています。

/wp-admin/includes/ajax-actions.phpファイルで定義されているwp_ajax_wp_link_ajax()を介して問い合わせます。

これらの関数には、クエリを変更するための明示的なフィルタはありません。

バージョン3.7(?)

フィルタwp_link_query_argsを導入する途中でパッチがあるようです

あなたはここでそれをチェックすることができます:

http://core.trac.wordpress.org/ticket/18042

マイルストーンは3.7に設定されているので、これはあなたのラッキーバージョンかもしれません;-)

その場合は、おそらく次のように修正します。

例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 ){

    // 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' );

例2

カスタム投稿タイプを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'を使いました。

4
birgire

そして、以下は編集リンクダイアログから投稿タイプの配列を削除する方法です:

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' );
2
Matt Kaye