Cârlige/filtre WordPress pentru a insera conținut înainte de conținut sau după titlu

24 ian. 2012, 05:49:27
Vizualizări: 93.5K
Voturi: 35

Î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?

1
Comentarii

În acest caz: asigură-te că funcția ta returnează $content oricum (când nu este modificat).

Bigue Nique Bigue Nique
30 apr. 2020 09:29:51
Toate răspunsurile la întrebare 3
8
49

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.

24 ian. 2012 05:59:13
Comentarii

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

bueltge bueltge
24 ian. 2012 09:51:17

@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

Jason Jason
25 ian. 2012 02:02:05

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

Jason Jason
25 ian. 2012 02:10:19

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.

Chip Bennett Chip Bennett
25 ian. 2012 02:55:41

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.

phatskat phatskat
6 dec. 2012 17:02:58

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.

Chip Bennett Chip Bennett
6 dec. 2012 17:08:53

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

Andrew Welch Andrew Welch
10 iun. 2016 00:11:02

Mulțumesc pentru Edit 2 Hook. După ce am lucrat puțin la el, am reușit să afișez un shortcode după conținut. Postare veche, dar funcționează în continuare în WP 5.4. !!!

Rodrigo Zuluaga Rodrigo Zuluaga
10 iul. 2020 02:54:54
Arată celelalte 3 comentarii
0

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.

wp_open_body

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

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

2 nov. 2014 21:29:26
Comentarii

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.

Travis Weston Travis Weston
13 sept. 2018 16:50:54

De asemenea, ai putea adăuga else sau folosi un operator ternar. Este un exemplu rapid, netestat complet, care poate fi extins.

Brad Dalton Brad Dalton
13 sept. 2018 20:09:01