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.