add_filter per pagine specifiche
È possibile aggiungere questo filtro
add_filter("the_content", "magicalender_get_event_page");
Ma solo per una pagina specifica, ad esempio
if($post->post_name == "magicalenderpage")
Se metto l'istruzione if all'interno della funzione, su tutte le altre pagine il contenuto non viene visualizzato - e con un'istruzione else che restituisce il contenuto della pagina altrimenti incontro problemi in cui interferisce con altri plugin che fanno anche loro operazioni con
add_filter("the_content", "foo");
La funzione magicalender_get_event_page è la seguente
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("&", "&", str_replace("'", "'", str_replace(""", "\"", $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;
}
}

È utile pubblicare l'intero codice del filtro e della callback, piuttosto che solo frammenti.
Ma sospetto che il problema sia che non stai restituendo $the_content
al di fuori del tuo condizionale, ad esempio:
function magicalendar_get_event_page( $content ) {
if ( $post->post_name == 'magicalendarpage' ) {
// Fai qualcosa a $content
return $content;
}
}
add_filter( 'the_content', 'magicalendar_get_event_page' );
Se è così, sposta il return fuori dal condizionale:
function magicalendar_get_event_page( $content ) {
if ( $post->post_name == 'magicalendarpage' ) {
// Fai qualcosa a $content
}
return $content;
}
add_filter( 'the_content', 'magicalendar_get_event_page' );
Per capire perché/come interferisce con altri filtri su 'the_content'
, probabilmente abbiamo bisogno di vedere il tuo codice.
MODIFICA
Almeno due problemi:
- Non stai passando
$content
come argomento alla tua callback del filtro - NON FARE ECHO DELL'OUTPUT DEL FILTRO! Restituiscilo. Questo è molto probabilmente la causa del tuo problema con altri filtri applicati a
the_content
.
Se hai bisogno di filtrare the_content
specificamente prima o dopo altri filtri, allora aggiungi una priorità alla tua chiamata add_filter()
. 10 è il valore predefinito. Usa un numero più basso per filtrare prima; usa un numero più alto per filtrare dopo.

In realtà ho praticamente quello che hai tu, ma il problema è che alcuni plugin che fanno cose simili al mio (dove il $content viene sostituito con qualcos'altro e non viene effettivamente mostrato) fanno sì che i due plugin entrino in conflitto. Ho aggiornato il mio post per includere tutta la mia funzione.

@Stephen Cook - il tuo codice certamente non ha $content
come argomento della funzione - vedi nella risposta di @Chip Bennett function magicalendar_get_event_page( $content ) {
- inoltre, perché non consideri di creare un page template per questa pagina?

Un Page Template è probabilmente la strada giusta da seguire qui. P.S. vedi risposta modificata.

In realtà avevo $content come parametro nel mio plug-in, non so come ho trovato una copia da incollare qui senza di esso. Ma grazie, proverò a usare "return" invece di "echo" e anche un template di pagina

Probabilmente opterei per un template di pagina personalizzato. Se scegli questa strada, non devi nemmeno chiamare the_content()
(basta inserire il tuo codice personalizzato al posto del Loop). In questo modo, non devi nemmeno preoccuparti di altri Plugin che filtrano the_content
.
