web-dev-qa-db-fra.com

add_filter pour des pages spécifiques

Est-il possible d'ajouter ce filtre

add_filter("the_content", "magicalender_get_event_page");

Mais seulement pour une page spécifique, par exemple

if($post->post_name == "magicalenderpage")

Si je mets l'instruction if dans la fonction, le contenu n'est pas affiché sur les autres pages - et avec une autre instruction après qui renvoie le contenu de la page, sinon je rencontre des problèmes d'interférence avec d'autres plug-ins qui faire des choses avec

add_filter("the_content", "foo");

La fonction magicalender_get_event_page est la suivante

function magicalender_get_event_page(){
    global $wpdb;
    global $post;

    if($post->post_name == "magicalenderpage"){
        echo "<div class=\"magi_calender\">";
        for($i = 0; $event = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."magicalender", ARRAY_A, $i); $i++){
            echo"
                <div class=\"event\">
                    <h1>".$event['event']."</h1>
                    <h2>".date('m/d/Y', strtotime($event['dmy']))."</h2>
                    <div>".str_replace("&amp;", "&", str_replace("&#39;", "'", str_replace("&#34;", "\"", $event['desc'])))."</div>
                </div>
            ";
        }
        echo "</div>";

        $o = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."magioptions", ARRAY_A);
        echo"
            <script type=\"text/javascript\">
                var priority = '".$o['dm']."';
                var customDays = new Array('".$o['monday']."', '".$o['tuesday']."', '".$o['wednesday']."', '".$o['thursday']."', '".$o['friday']."', '".$o['saturday']."', '".$o['sunday']."');
                var customMonths = new Array('".$o['january']."', '".$o['february']."', '".$o['march']."', '".$o['april']."', '".$o['may']."', '".$o['june']."', '".$o['july']."', '".$o['august']."', '".$o['september']."', '".$o['october']."', '".$o['november']."', '".$o['december']."');
                var customMonthsShort = new Array('".$o['jan']."', '".$o['feb']."', '".$o['mar']."', '".$o['apr']."', '".$o['ma']."', '".$o['jun']."', '".$o['jul']."', '".$o['aug']."', '".$o['sep']."', '".$o['oct']."', '".$o['nov']."', '".$o['dec']."');
                jQuery(\".magi_calender\").magiCalender(priority, customDays, customMonths, customMonthsShort);
            </script>
        ";
    }
    else{
        return $content;
    }
}
3
Stephen Cook

Il est utile de publier l'intégralité de votre filtre et votre code de rappel, plutôt que de simples morceaux.

Mais je soupçonne que le problème est que vous n'êtes pas en retournant $the_contenten dehors de votre conditionnel, par exemple:

function magicalendar_get_event_page( $content ) {
    if ( $post->post_name == 'magicalendarpage' ) {
        // Do something to $content
        return $content;
    }
}
add_filter( 'the_content', 'magicalendar_get_event_page' );

Si c'est le cas, déplacez le retour outside le conditionnel:

function magicalendar_get_event_page( $content ) {
    if ( $post->post_name == 'magicalendarpage' ) {
        // Do something to $content
    }
    return $content;
}
add_filter( 'the_content', 'magicalendar_get_event_page' );

Pour savoir pourquoi/comment cela interfère avec d'autres filtres sur 'the_content', nous devons probablement voir votre code.

MODIFIER

Au moins deux problèmes:

  1. Vous ne passez pas $content comme argument à votre rappel de filtre
  2. NE PAS ÉCHO FILTER SORTIE! Rends le. Cela est très probablement à l'origine de votre problème avec d'autres filtres appliqués à the_content.

Si vous devez filtrer the_content spécifiquement avant ou après d’autres filtres, ajoutez une priorité à votre appel add_filter(). 10 est la valeur par défaut. Utilisez un nombre inférieur pour filtrer sooner ; utilisez un nombre plus élevé pour filtrer later .

4
Chip Bennett