WordPress гачки / фільтри вставляються перед вмістом або після заголовка


29

намагаюся вставити вміст перед вмістом публікації в мої функції.php - я знаю, як використовувати звичайні гачки 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' );
?>

В основному ви додаєте вміст публікації після власного користувацького вмісту, а потім повертаєте результат.

Редагувати

Як зазначає Френкі @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 фільтра - це правильний гачок.
builtge

Питання @ChipBennett - як це зробити з логікою лише для користувальницького типу допису - я намагався завершити це, if ( is_single() && 'property' == get_post_type() ) {}але це не спрацювало для мене
Джейсон

@ChipBennett - я отримав це, працюючи над моїм спеціальним типом публікації, але вміст зникає з будь-якого іншого типу публікації. Див. Редагування вище.
Джейсон

1
Це тому, що ви не повертаєтесь $contentдля інших публікацій, ніж для власного типу публікації. Дивіться оновлену відповідь.
Чіп Беннетт

Лише зауваження - інший {} блок вам не потрібен - просто повернення. Якщо умова виконана, повернення в системі 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 ('властивість') повертає помилково. Якщо ви інвертуєте туди свою логіку і просто повертаєте $ content у такому випадку, ви отримаєте чистіший і читабельніший код.
Тревіс Вестон

Можна також додати інше або використовувати потрійний оператор. Це швидкий приклад, не повністю перевірений, який можна розширити.
Бред Далтон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.