Cârlige/filtre WordPress pentru a insera conținut înainte de conținut sau după titlu
Încerc să inserez conținut înainte de conținutul postării în fișierul meu functions.php - știu cum să folosesc cârligele obișnuite wp, dar nu sunt sigur cum să inserez în alte zone.
Am încercat asta, dar distruge conținutul pentru orice alt tip de postare:
function property_slideshow( $content ) {
if ( is_single() && 'property' == get_post_type() ) {
$custom_content = '[portfolio_slideshow]'; // Conținut personalizat de inserat
$custom_content .= $content;
return $custom_content;
}
}
add_filter( 'the_content', 'property_slideshow' );
Cum pot face acest lucru condițional?
Pur și simplu folosește filtrul the_content
, de exemplu:
<?php
function theme_slug_filter_the_content( $content ) {
$custom_content = 'CONȚINUTUL TĂU AICI';
$custom_content .= $content;
return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>
În esență, adaugi conținutul articolului după conținutul tău personalizat, apoi returnezi rezultatul.
Editare
După cum subliniază Franky @bueltge în comentariul său, procesul este același pentru titlul articolului; pur și simplu adaugi un filtru pe hook-ul the_title
:
<?php
function theme_slug_filter_the_title( $title ) {
$custom_title = 'CONȚINUTUL TĂU AICI';
$title .= $custom_title;
return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>
Reține că, în acest caz, adaugi conținutul personalizat după Titlu. (Nu contează care; am ales varianta pe care ai specificat-o în întrebarea ta.)
Editare 2
Motivul pentru care codul tău exemplu nu funcționează este pentru că returnezi $content
doar când condiția ta este îndeplinită. Trebuie să returnezi $content
, nemodificat, ca un else
al condiției tale. De exemplu:
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' );
În acest fel, pentru articole care nu sunt de tipul 'property', $content
este returnat, nemodificat.

de asemenea, este posibil să adăugați conținut după titlu; filtrul the_title este hook-ul potrivit.

@ChipBennett întrebare - cum să faci asta cu logică doar pentru un custom post type - am încercat să-l încadrez în if ( is_single() && 'property' == get_post_type() ) {}
dar nu a funcționat pentru mine

@ChipBennett - am reușit să-l fac să funcționeze pe custom post type-ul meu, dar conținutul dispare de pe orice alt post type. Vezi edit-ul de mai sus.

Asta se întâmplă pentru că nu returnați $content
pentru alte tipuri de postări în afară de tipul personalizat. Consultați răspunsul actualizat.

Doar o observație - nu aveți nevoie de blocul else { } - doar de return-ul implicit. Dacă condiția este îndeplinită, return-ul din if() vă scoate din funcție, iar dacă treceți de if(), atunci return-ul implicit va fi executat.

Adevărat, return $content;
ar putea fi scos din condiționalul if/else
. L-am lăsat acolo în principal ca ajutor pentru înțelegerea logicii a ceea ce este returnat, cum și de ce.

poți specifica al treilea argument pentru prioritate în funcția add_filter.

A fost introdus un nou hook în versiunea 5.2 care se declanșează după deschiderea tag-ului <body>
. Nu mai este nevoie să modificăm conținutul postărilor.
/**
* Adaugă fragmente de cod direct după deschiderea tag-ului <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><!-- End 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' );
Tag-ul condițional is_singular
verifică dacă este afișat un articol singular și îți permite să specifici parametrul $post_types care în acest caz este proprietate.
De asemenea, poate ai nevoie să consulți do_shortcode

Vin târziu la discuție, dar returnezi o variabilă goală în cazul în care is_singular( 'property' ) returnează false. Dacă inversezi logica acolo și pur și simplu returnezi $content în acel caz, vei obține un cod mai curat și mai ușor de citit.
