Kait / filter WordPress menyisipkan sebelum konten atau setelah judul

29

mencoba menyisipkan konten sebelum memposting konten di functions.php saya - Saya tahu cara menggunakan kait wp biasa, tetapi tidak yakin cara memasukkan ke dalam area lain.

Mencoba ini, tetapi membunuh konten pada jenis posting lain:

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

Bagaimana saya membuat ini bersyarat?

Jason
sumber

Jawaban:

39

Cukup gunakan the_contentfilter, misalnya:

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

Pada dasarnya, Anda menambahkan konten posting setelah konten khusus Anda, lalu mengembalikan hasilnya.

Edit

Seperti yang ditunjukkan Franky @bueltge dalam komentarnya, prosesnya sama untuk judul posting; cukup tambahkan filter ke the_titlehook:

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

Perhatikan bahwa, dalam hal ini, Anda menambahkan konten khusus setelah Judul. (Tidak masalah yang mana; Aku hanya pergi dengan apa yang kamu tentukan dalam pertanyaanmu.)

Edit 2

Alasan kode contoh Anda tidak berfungsi adalah karena Anda hanya kembali $contentketika kondisi Anda terpenuhi . Anda harus kembali $content, tanpa dimodifikasi, sebagai elsepersyaratan Anda. misalnya:

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

Dengan cara ini, untuk posting yang bukan dari tipe posting 'properti', $contentdikembalikan, tidak dimodifikasi.

Chip Bennett
sumber
juga dimungkinkan untuk menambahkan konten setelah judul; filter the_title adalah hook yang tepat.
bueltge
@ChipBennett pertanyaan - bagaimana melakukan ini dengan logika hanya untuk jenis posting khusus - Saya mencoba untuk membungkusnya if ( is_single() && 'property' == get_post_type() ) {}tetapi itu tidak berhasil untuk saya
Jason
@ChipBennett - Saya membuatnya bekerja pada jenis posting kustom saya, tetapi konten menghilang dari jenis posting lainnya. Lihat edit di atas.
Jason
1
Itu karena Anda tidak kembali $contentuntuk jenis posting selain untuk jenis posting khusus Anda. Lihat jawaban yang diperbarui.
Chip Bennett
Hanya sebuah catatan - Anda tidak memerlukan blok {} lainnya - hanya pengembalian balik. Jika kondisi terpenuhi, pengembalian di if () membawa Anda keluar dari fungsi, jika Anda membuatnya melewati if () maka pengembalian mundur akan memukul.
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' );

The is_singularcek tag kondisional jika posting tunggal sedang ditampilkan dan memungkinkan Anda untuk menentukan $ post_types parameter yang dalam hal ini adalah properti.

Juga, Anda mungkin ingin melihatnya do_shortcode

Brad Dalton
sumber
Terlambat ke permainan di sini, tetapi Anda mengembalikan variabel kosong dalam contoh yang is_singular ('properti') mengembalikan false. Jika Anda membalik logika Anda di sana, dan cukup mengembalikan $ konten dalam kasus itu, Anda akan berakhir dengan kode yang lebih bersih dan lebih mudah dibaca.
Travis Weston
Bisa juga menambahkan yang lain atau menggunakan operator ternary. Ini adalah contoh cepat yang tidak sepenuhnya diuji yang dapat diperpanjang.
Brad Dalton