WordPress hook/filtri per inserire contenuto prima del testo o dopo il titolo

24 gen 2012, 05:49:27
Visualizzazioni: 93.5K
Voti: 35

Sto cercando di inserire del contenuto prima del testo del post nel mio functions.php - Conosco come usare i normali hook di WordPress, ma non sono sicuro di come inserirli in altre aree.

Ho provato questo, ma elimina 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 rendere questo condizionale?

1
Commenti

In questo caso: assicurati che la tua funzione restituisca comunque $content (quando non modificato).

Bigue Nique Bigue Nique
30 apr 2020 09:29:51
Tutte le risposte alla domanda 3
8
49

Basta utilizzare il filtro the_content, ad esempio:

<?php
function theme_slug_filter_the_content( $content ) {
    $custom_content = 'IL TUO CONTENUTO VA QUI';
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>

In sostanza, si aggiunge il contenuto del post dopo il contenuto personalizzato, quindi si restituisce il risultato.

Modifica

Come sottolinea Franky @bueltge nel suo commento, il processo è lo stesso per il titolo del post; basta aggiungere un filtro all'hook the_title:

<?php
function theme_slug_filter_the_title( $title ) {
    $custom_title = 'IL TUO CONTENUTO VA QUI';
    $title .= $custom_title;
    return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>

Nota che, in questo caso, si aggiunge il contenuto personalizzato dopo il Titolo. (Non importa quale; ho semplicemente seguito quanto specificato nella tua domanda.)

Modifica 2

Il motivo per cui il tuo codice di esempio non funziona è che restituisci $content solo quando la tua condizione è soddisfatta. Devi restituire $content, non modificato, come else della tua condizione. Ad 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 che non sono del tipo 'property', $content viene restituito senza modifiche.

24 gen 2012 05:59:13
Commenti

è anche possibile aggiungere contenuto dopo il titolo; il filtro the_title è l'hook giusto.

bueltge bueltge
24 gen 2012 09:51:17

@ChipBennett domanda - come fare questo con logica solo per un custom post type - ho provato a racchiuderlo in if ( is_single() && 'property' == get_post_type() ) {} ma non ha funzionato per me

Jason Jason
25 gen 2012 02:02:05

@ChipBennett - l'ho fatto funzionare sul mio custom post type, ma il contenuto scompare da qualsiasi altro post type. Vedi modifica sopra.

Jason Jason
25 gen 2012 02:10:19

Questo perché non stai restituendo $content per i tipi di post diversi dal tuo custom post type. Vedi la risposta aggiornata.

Chip Bennett Chip Bennett
25 gen 2012 02:55:41

Solo una nota - non hai bisogno del blocco else { } - basta il return di fallback. Se la condizione è soddisfatta, il return nell'if() ti porta fuori dalla funzione, se superi l'if() allora verrà eseguito il return di fallback.

phatskat phatskat
6 dic 2012 17:02:58

Vero, il return $content; potrebbe essere estratto dal condizionale if/else. L'ho lasciato dove sta principalmente come aiuto per comprendere la logica di ciò che viene restituito, come e perché.

Chip Bennett Chip Bennett
6 dic 2012 17:08:53

puoi inserire il terzo argomento per la priorità nella funzione add_filter.

Andrew Welch Andrew Welch
10 giu 2016 00:11:02

Grazie per l'Hook Edit 2. Dopo un po' di lavoro, sono riuscito a visualizzare alcuni shortcode dopo il contenuto. Post vecchio ma ancora funzionante su WP 5.4. !!!

Rodrigo Zuluaga Rodrigo Zuluaga
10 lug 2020 02:54:54
Mostra i restanti 3 commenti
0

È stato introdotto un nuovo hook in 5.2 che si attiva dopo il tag di apertura <body>. Non c'è più bisogno di modificare il contenuto del post.

wp_open_body

/**
 * Aggiungi snippet di codice direttamente dopo il tag di apertura <body>
 */
function add_to_top_of_body() {
    echo '<!-- Google Tag Manager (noscript) --><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-YOURMOM" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><!-- Fine Google Tag Manager (noscript) -->';
}
add_action( 'wp_body_open', 'add_to_top_of_body' );
31 mar 2022 17:22:11
2
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 tag condizionale is_singular verifica se viene visualizzato un singolo post e ti permette di specificare il parametro $post_types che in questo caso è "property".

Inoltre, potresti voler dare un'occhiata alla funzione do_shortcode

2 nov 2014 21:29:26
Commenti

Arrivo tardi alla discussione, ma stai restituendo una variabile vuota nel caso in cui is_singular( 'property' ) restituisca false. Se inverti la tua logica lì e restituisci semplicemente $content in quel caso, finirai con un codice più pulito e leggibile.

Travis Weston Travis Weston
13 set 2018 16:50:54

Potresti anche aggiungere un else o usare un operatore ternario. È un esempio rapido non completamente testato che può essere esteso.

Brad Dalton Brad Dalton
13 set 2018 20:09:01