WordPress hook/filtri per inserire contenuto prima del testo o dopo il titolo
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?
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.

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

@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

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

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

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.

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é.

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

È 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.
/**
* 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' );

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

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.
