WordPress hooks / filters แทรกก่อนเนื้อหาหรือหลังชื่อ


29

พยายามแทรกเนื้อหาก่อนโพสต์เนื้อหาในฟังก์ชั่นของฉัน php - ฉันรู้วิธีใช้ hooks wp ปกติ แต่ไม่แน่ใจว่าจะแทรกเข้าไปในพื้นที่อื่นได้อย่างไร

พยายามสิ่งนี้ แต่มันฆ่าเนื้อหาในโพสต์ประเภทอื่น ๆ :

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

ฉันจะทำให้เงื่อนไขนี้เป็นอย่างไร

คำตอบ:


39

เพียงใช้the_contentตัวกรองเช่น:

<?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' );
?>

โดยทั่วไปคุณจะเพิ่มเนื้อหาโพสต์หลังจากเนื้อหาที่กำหนดเองของคุณแล้วส่งคืนผลลัพธ์

แก้ไข

ตามที่ Franky @bueltge ชี้ให้เห็นในความคิดเห็นของเขากระบวนการดังกล่าวก็เหมือนกันสำหรับชื่อโพสต์ เพียงเพิ่มตัวกรองลงในthe_titleตะขอ:

<?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' );
?>

โปรดทราบว่าในกรณีนี้คุณผนวกเนื้อหาที่กำหนดเองของคุณหลังจากที่ชื่อ (ไม่สำคัญว่าฉันจะไปกับสิ่งที่คุณระบุในคำถามของคุณ)

แก้ไข 2

สาเหตุที่โค้ดตัวอย่างของคุณไม่ทำงานเนื่องจากคุณส่งคืน$contentเมื่อตรงตามเงื่อนไขเท่านั้น คุณต้องส่งคืน$contentไม่ได้แก้ไขตามelseเงื่อนไขของคุณ เช่น:

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

วิธีนี้สำหรับการส่งคืนโพสต์ที่ไม่ได้อยู่ในประเภท 'คุณสมบัติ' $contentจะไม่ถูกแก้ไข


นอกจากนี้ยังเป็นไปได้ที่จะเพิ่มเนื้อหาหลังชื่อ; the_title ตัวกรองเป็นเบ็ดขวา
bueltge

@ChipBennett คำถาม - วิธีการทำเช่นนี้กับตรรกะเฉพาะสำหรับประเภทโพสต์ที่กำหนดเอง - ฉันพยายามที่จะห่อไว้ในif ( is_single() && 'property' == get_post_type() ) {}แต่ที่ไม่ได้ทำงานสำหรับฉัน
เจสัน

@ChipBennett - ฉันได้ทำงานกับประเภทโพสต์ที่กำหนดเองของฉัน แต่เนื้อหาจะหายไปจากประเภทโพสต์อื่น ๆ ดูการแก้ไขด้านบน
เจสัน

1
นั่นเป็นเพราะคุณไม่ได้ส่งคืน$contentประเภทโพสต์อื่นนอกจากประเภทโพสต์ที่คุณกำหนดเอง ดูคำตอบที่อัปเดต
Chip Bennett

แค่ทราบ - คุณไม่ต้องการบล็อกอื่น {} - เพียงแค่ส่งกลับทางเลือก หากตรงตามเงื่อนไขการส่งคืนใน if () จะนำคุณออกจากฟังก์ชันหากคุณทำให้ผ่าน if () จากนั้นการย้อนกลับทางเลือกจะถูกตี
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' );

is_singularเงื่อนไขการตรวจสอบแท็กถ้าโพสต์เอกพจน์จะถูกแสดงและช่วยให้คุณสามารถระบุพารามิเตอร์ $ post_types ซึ่งในกรณีนี้เป็นทรัพย์สิน

นอกจากนี้คุณอาจต้องการดู do_shortcode


มาถึงเกมแล้วที่นี่ แต่คุณกำลังส่งคืนตัวแปรว่างในอินสแตนซ์ที่ is_singular ('property') คืนค่า false หากคุณกลับด้านตรรกะของคุณที่นั่นและเพียงแค่คืนเนื้อหา $ ในกรณีนั้นคุณจะจบลงด้วยรหัสที่สะอาดและอ่านง่ายขึ้น
Travis Weston

ยังสามารถเพิ่มรายการอื่นหรือใช้ผู้ประกอบการที่ประกอบไปด้วย มันเป็นตัวอย่างรวดเร็วไม่ได้ทดสอบอย่างเต็มที่ซึ่งสามารถขยายได้
แบรดดัลตัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.