web-dev-qa-db-fra.com

Comment supprimer la balise Nextpage dans le texte des messages en fonction de utm_campaign

Est-il possible de supprimer la balise "nextpage" dans le texte d'un message en fonction de utm_campaign?

En fonction de la provenance de mes visiteurs, je souhaite supprimer le

<!--nextpage--> 

de mon post.

J'utilise ceci

if($_GET['utm_campaign']== 'nonextpagecampaign') {

directement dans mon modèle afin d'afficher ou non des éléments en fonction du nom de la campagne, mais pour le tag nextpage, ce n'est pas si simple.

4
user3492770

Vous pouvez utiliser the_post hook pour supprimer <!--nextpage-->. Dans ce cas:

add_action( 'the_post', 'campaign_remove_nextpage', 99);

function campaign_remove_nextpage ( $post ) {
    if ( ($_GET['utm_campaign']== 'nonextpagecampaign') && (false !== strpos( $post->post_content, '<!--nextpage-->' )) ) 
    {
        // Reset the global $pages:
        $GLOBALS['pages']     = [ $post->post_content ];

        // Reset the global $numpages:
        $GLOBALS['numpages']  = 0;

       // Reset the global $multipage:
        $GLOBALS['multipage'] = false;
    }
};

En savoir plus sur ce numéro

Plus généralement, vous voudrez peut-être lire cet avertissement à propos des effets de l’utilisation de <!--nextpage--> sur le référencement.

5
cjbj

Nous pouvons utiliser le content_paginationcodex filtre pour modifier le contenu paginé sans modifier directement les paramètres globaux:

add_filter( 'content_pagination', function( $pages )
{
    // Target only the correct utm_campaign GET parameter 
    if( 'nonextpagecampaign' !== filter_input( INPUT_GET, 'utm_campaign', FILTER_SANITIZE_STRING ) )
        return $pages;

    // Remove the content pagination, only if it's already paginated
    if( count( $pages ) > 1 )
        $pages = [ join( '', $pages ) ];

    return $pages;
} );

où nous retournons un tableau avec le contenu combiné lorsque le paramètre correct utm_campaign GET est détecté. J'espère que vous pourrez adapter cela à vos besoins.

4
birgire