web-dev-qa-db-fra.com

Comment s'assurer que le filtre "the_content" ne fonctionne que pour le contenu principal affiché?

J'ai un plugin qui ajoute la méthode au filtre "the_content".

add_filter('the_content', 'myFilteringFunction', 10000);

Dans cette fonction, je veux ajouter des liens sur le début et la fin du contenu. Mais je n'ai besoin de le faire que pour le contenu "principal" de la page affichée, donc pas dans les widgets, ni dans le pied de page, l'en-tête, etc.

De plus, je veux seulement qu'il soit inclus pour le type de message personnalisé que j'ai défini dans le même plugin. Alors j'ai pensé à ce genre de vérification, pensant que ce serait suffisant.

if( is_single() && get_query_var('post_type') == 'myCustomPostType' && is_main_query() )

Malheureusement, cela ne fonctionne pas comme prévu - du moins pas dans tous les cas.

Sur la page le plugin WP Types est installé, il ne fonctionne pas (les liens sont ajoutés malgré la condition). Pourquoi?

3
MythThrazz

Essayez d'ajouter une condition à votre fonction de filtrage qui compare votre type de publication à get_post_type .

if ( 'book' == get_post_type() )

Si vous souhaitez également appliquer ce filtre aux pages, essayez is_singular () et incluez votre type de publication personnalisé en tant qu'argument.

is_singular('book');

Cela retournera true si l'une des conditions suivantes est vraie:
est célibataire()
is_page ()
is_attachment ()
'book' == get_post_type ()

3
iyrin

Selon la documentation Wordpress , vous pouvez le faire en utilisant ce code:

add_filter( 'the_content', 'filter_the_content_in_the_main_loop' );

function filter_the_content_in_the_main_loop( $content ) {

    // Check if we're inside the main loop in a single post page.
    if ( is_single() && in_the_loop() && is_main_query() ) {
        return $content . "I'm filtering the content inside the main loop";
    }

    return $content;
}

Ou utilisez la même logique via une seule ligne au début de la fonction de rappel du filtre:

if( !is_single() || !in_the_loop() || !is_main_query() ) return $content;
1
Stephen M. Harris