web-dev-qa-db-fra.com

Exclure le type de message du constructeur de liens WordPress

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?

2
urok93

Versions <= 3.6.1

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":

Link builder

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.

Version 3.7 (?)

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:

Exemple 1:

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

Exemple 2:

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'.

4
birgire

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