Gli hook / filtri di WordPress vengono inseriti prima del contenuto o dopo il titolo


29

cercando di inserire il contenuto prima del contenuto del post nelle mie funzioni.

Ho provato questo, ma uccide il contenuto su qualsiasi altro tipo di post:

function property_slideshow( $content ) {
 if ( is_single() && 'property' == get_post_type() ) {
    $custom_content = '[portfolio_slideshow]';
    $custom_content .= $content;
    return $custom_content;
    } 
}
add_filter( 'the_content', 'property_slideshow' );

Come posso renderlo condizionato?

Risposte:


39

Basta usare il the_contentfiltro, ad es .:

<?php
function theme_slug_filter_the_content( $content ) {
    $custom_content = 'YOUR CONTENT GOES HERE';
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>

Fondamentalmente, aggiungi il contenuto del post dopo il tuo contenuto personalizzato, quindi restituisci il risultato.

modificare

Come sottolinea Franky @bueltge nel suo commento, il processo è lo stesso per il titolo del post; aggiungi semplicemente un filtro the_titleall'hook:

<?php
function theme_slug_filter_the_title( $title ) {
    $custom_title = 'YOUR CONTENT GOES HERE';
    $title .= $custom_title;
    return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>

Si noti che, in questo caso, si aggiunge il contenuto personalizzato dopo il titolo. (Non importa quale; Sono appena andato con quello che hai specificato nella tua domanda.)

Modifica 2

Il motivo per cui il tuo codice di esempio non funziona è perché ritorni solo $contentquando il tuo condizionale è soddisfatto . Devi tornare $content, non modificato, come elseal tuo condizionale. per esempio:

function property_slideshow( $content ) {
    if ( is_single() && 'property' == get_post_type() ) {
        $custom_content = '[portfolio_slideshow]';
        $custom_content .= $content;
        return $custom_content;
    } else {
        return $content;
    }
}
add_filter( 'the_content', 'property_slideshow' );

In questo modo, per i post non di tipo post "proprietà", $contentviene restituito, non modificato.


inoltre è possibile aggiungere contenuti dopo il titolo; il filtro the_title è il gancio destro.
fusione

Domanda @ChipBennett - come fare questo con la logica solo per un tipo di post personalizzato - Ho provato a racchiuderlo if ( is_single() && 'property' == get_post_type() ) {}ma non ha funzionato per me
Jason

@ChipBennett - L'ho fatto funzionare sul mio tipo di post personalizzato, ma il contenuto scompare da qualsiasi altro tipo di post. Vedi modifica sopra.
Jason,

1
Questo perché non stai tornando $contentper tipi di post diversi da quelli personalizzati. Vedi la risposta aggiornata.
Chip Bennett il

Solo una nota - non è necessario il blocco else {} - solo il ritorno di fallback. Se la condizione è soddisfatta, il ritorno in if () ti porta fuori dalla funzione, se passi oltre if (), allora il ritorno di fallback colpirà.
Phatskat,

0
function property_slideshow( $content ) {
    if ( is_singular( 'property' ) ) {
        $custom_content = do_shortcode( '[portfolio_slideshow]' );
        $custom_content .= $content;
        }
        return $custom_content;
}
add_filter( 'the_content', 'property_slideshow' );

Il is_singulartag condizionale controlla se viene visualizzato un post singolare e consente di specificare il parametro $ post_types che in questo caso è proprietà.

Inoltre, potresti voler guardare do_shortcode


In ritardo qui, ma stai restituendo una variabile vuota nell'istanza che is_singular ('proprietà') restituisce false. Se inverti la tua logica lì, e semplicemente restituisci $ content in quel caso, otterrai un codice più pulito e più leggibile.
Travis Weston,

Potrebbe anche aggiungere altro o utilizzare un operatore ternario. È un esempio rapido non completamente testato che può essere esteso.
Brad Dalton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.