J'ai créé un type d'article personnalisé avec le paramètre "public" défini sur true. C'est parce que je dois l'avoir accessible dans les plugins qui vous aident à construire des requêtes pour l'affichage de post, comme le plugin Views (partie de Toolset).
Par contre, lorsque je crée un nouveau message ou une nouvelle page et utilise le générateur de liens, je ne souhaite pas que les entrées de ce type de message apparaissent dans le champ de recherche. Y a-t-il un moyen d'atteindre cet objectif?
Il semble que la fonction wp_link_query()
soit utilisée pour afficher les publications/pages internes lorsque vous appuyez sur le ou créez un lien vers du contenu existant dans le "générateur de liens":
wp_link_query()
est défini dans /wp-includes/class-wp-editor.php
.
Il est interrogé via la wp_ajax_wp_link_ajax()
, définie dans le fichier /wp-admin/includes/ajax-actions.php
.
Ces fonctions n'ont aucun filtre explicite pour changer la requête.
Il semble y avoir des correctifs en cours d’introduction du filtre wp_link_query_args
Vous pouvez le voir ici:
http://core.trac.wordpress.org/ticket/18042
Le jalon est défini comme 3.7
, donc cela pourrait être votre version chanceuse ;-)
Si c'est le cas, vous pourriez probablement résoudre ce problème avec:
Si vous souhaitez répertorier manuellement les types de publication personnalisés:
/**
* 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' );
Si vous souhaitez uniquement éliminer un type de publication personnalisé tout en conservant tous les autres, vous pouvez essayer:
/**
* 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' );
où j'ai utilisé la démo slug 'news'
.
Et voici comment supprimer un tableau de types de publication de la boîte de dialogue de modification du lien:
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' );