WordPress kancaları / filtreleri içerikten önce veya başlıktan sonra ekle


29

function.php adresimdeki içeriğin önüne içerik eklemeye çalışmak - normal wp kancalarını nasıl kullanacağımı biliyorum ancak diğer alanlara nasıl ekleyeceğimi bilmiyorum.

Bunu denedim, ancak diğer gönderi türlerindeki içeriği de öldürdü:

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

Bunu şartlı nasıl yapabilirim?

Yanıtlar:


39

Sadece the_contentfiltreyi kullanın , örneğin:

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

Temel olarak, özel içeriğinizden sonra gönderi içeriğini eklersiniz , ardından sonucu döndürürsünüz.

Düzenle

Franky @bueltge yorumunda da belirtildiği gibi, süreç, başlık için aynıdır; sadece the_titlekancaya bir filtre ekleyin :

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

Bu durumda, Özel içeriğinizi Başlıktan sonra eklediğinizi unutmayın . (Hangisi olduğu önemli değil; Ben sadece sorunuzda belirttiğiniz şeyle gittim.)

Düzenle 2

Örnek kodunuzun çalışmamasının nedeni, yalnızca $contentşartlarınız karşılandığında geri dönmenizdir . Şartlı $contentolarak bir, değiştirilmemiş, geri dönmek gerekir else. Örneğin:

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

Bu şekilde, 'özellik' yazı tipinde $contentolmayan gönderiler için, değiştirilmemiş olarak döndürülür.


ayrıca başlıktan sonra içerik eklemek de mümkündür; filtre the_title doğru kancadır.
Ocak'ta 12:12

@ChipBennett soru - bu sadece özel bir yazı tipi için mantık ile yapmak - Ben onu sarmaya çalıştım if ( is_single() && 'property' == get_post_type() ) {}ama bu işe yaramadı
Jason

@ChipBennett - Özel yazı tipim üzerinde çalışmaya başladım, ancak içerik diğer yazı tiplerinden kayboluyor. Yukarıdaki düzenlemeye bakın.
Jason

1
Bunun nedeni $content, özel yazı türünüz dışındaki posta türleri için geri dönmemenizdir . Güncellenmiş cevaba bakınız.
Chip Bennett

Sadece bir not - else {} bloğuna ihtiyacınız yok - sadece geri dönüş. Koşul yerine getirilirse, if () içindeki dönüş sizi işlevden çıkarır, if () değerini geçerseniz geri dönüş dönüşü gerçekleşir.
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_singularKoşullu etiket kontrolleri tekil sonrası görüntülenen ve bu durumda özelliktir $ post_types parametresini belirlemenizi sağlar olup olmadığını.

Ayrıca, bakmak isteyebilirsiniz do_shortcode


Oyunun sonunda burada, ancak is_singular ('özellik') değerinin yanlış döndürdüğü durumda boş bir değişken döndürüyorsunuz. Buradaki mantığınızı tersine çevirirseniz ve bu durumda $ içerik döndürürseniz, daha temiz ve okunaklı bir kod elde edersiniz.
Travis Weston

Başka bir şey ekleyebilir veya üçlü bir operatör kullanabilir. Tam olarak test edilemeyen, uzatılabilen hızlı bir örnek.
Brad Dalton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.