add_filter pentru pagini specifice

11 sept. 2011, 15:44:13
Vizualizări: 19.6K
Voturi: 4

Este posibil să adaug acest filtru

add_filter("the_content", "magicalender_get_event_page");

Dar doar pentru o pagină specifică, de exemplu

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

Dacă pun instrucțiunea if în interiorul funcției, atunci pe orice altă pagină conținutul nu este afișat - iar cu o instrucțiune else după care afișează conținutul paginii, întâmpin probleme unde interferează cu alte plugin-uri care fac și ele modificări cu

add_filter("the_content", "foo");

Funcția magicalender_get_event_page este următoarea

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;
    }
}
0
Toate răspunsurile la întrebare 1
6

Este util să postați întregul cod al filtrului și al funcției de callback, nu doar bucăți.

Dar, bănuiesc că problema este că nu returnați $the_content în afara condiționalei, de exemplu:

function magicalendar_get_event_page( $content ) {
    if ( $post->post_name == 'magicalendarpage' ) {
        // Faceți ceva cu $content
        return $content;
    }
}
add_filter( 'the_content', 'magicalendar_get_event_page' );

Dacă acesta este cazul, mutați returnarea în afara condiționalei:

function magicalendar_get_event_page( $content ) {
    if ( $post->post_name == 'magicalendarpage' ) {
        // Faceți ceva cu $content
    }
    return $content;
}
add_filter( 'the_content', 'magicalendar_get_event_page' );

Pentru a ști de ce/cum interferează cu alte filtre pe 'the_content', probabil avem nevoie să vedem codul dumneavoastră.

EDITARE

Cel puțin două probleme:

  1. Nu transmiteți $content ca argument funcției de callback a filtrului
  2. NU ECHOUIEȚI REZULTATUL FILTRULUI! Returnați-l. Acest lucru este foarte probabil să cauzeze problema cu alte filtre aplicate la the_content.

Dacă trebuie să filtrați the_content înainte sau după alte filtre, atunci adăugați o prioritate la apelul add_filter(). 10 este valoarea implicită. Folosiți un număr mai mic pentru a filtra mai devreme; folosiți un număr mai mare pentru a filtra mai târziu.

11 sept. 2011 15:57:39
Comentarii

De fapt, practic am ce ai tu acolo, dar problema este că unele plugin-uri care fac lucruri similare cu ale mele (unde $content este înlocuit cu altceva și nu este afișat efectiv) atunci cele două plugin-uri intră în conflict. Am actualizat postul meu pentru a include întreaga mea funcție.

Stephen Cook Stephen Cook
11 sept. 2011 16:19:05

@Stephen Cook - codul tău cu siguranță nu are $content ca argument al funcției - vezi în răspunsul lui @Chip Bennett function magicalendar_get_event_page( $content ) { - de asemenea, de ce nu iei în considerare crearea unui șablon de pagină pentru această pagină?

Michael Michael
11 sept. 2011 17:47:44

Un șablon de pagină este foarte probabil soluția aici. P.S. vezi răspunsul editat.

Chip Bennett Chip Bennett
11 sept. 2011 22:48:08

De fapt, aveam $content ca parametru în plugin-ul meu, nu știu cum am găsit o copie de lipit aici fără el. Dar mulțumesc, voi încerca să folosesc "return" nu "echo" și de asemenea un șablon de pagină

Stephen Cook Stephen Cook
11 sept. 2011 23:06:23

Probabil aș alege un șablon de pagină personalizat. Dacă mergi pe această cale, nici măcar nu trebuie să apelezi the_content() (doar puneți codul personalizat în locul Loop-ului). În acest fel, nici măcar nu trebuie să vă faceți griji cu privire la alte plugin-uri care filtrează the_content.

Chip Bennett Chip Bennett
11 sept. 2011 23:28:36

de fapt, trebuie să pun $post ca global.

Janos Szabo Janos Szabo
19 mar. 2018 08:55:09
Arată celelalte 1 comentarii