Haczyki / filtry WordPress wstawiane przed treścią lub po tytule

29

próbuję wstawić zawartość przed zawartością postu w moich funkcjach.php - Wiem, jak korzystać ze zwykłych haków wp, ale nie jestem pewien, jak wstawić w inne obszary.

Próbowałem tego, ale zabija zawartość każdego innego typu posta:

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

Jak mogę to uzależnić?

Jason
źródło

Odpowiedzi:

39

Wystarczy użyć the_contentfiltra, np .:

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

Zasadniczo dodajesz treść postu po treści niestandardowej, a następnie zwraca wynik.

Edytować

Jak zauważa Franky @bueltge w swoim komentarzu, proces jest taki sam dla tytułu posta; po prostu dodaj filtr do the_titlehaka:

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

Pamiętaj, że w tym przypadku po tytule dołączasz treść niestandardową . (Nie ma znaczenia, które; po prostu poszedłem z tym, co określiłeś w swoim pytaniu.)

Edytuj 2

Twój przykładowy kod nie działa dlatego, że powracasz tylko $contentwtedy, gdy warunek jest spełniony . Musisz powrócić $content, niezmodyfikowany, zgodnie elsez warunkami. na przykład:

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

W ten sposób dla postów nie należących do post-type „property”, $contentzwracany jest niezmodyfikowany.

Chip Bennett
źródło
możliwe jest również dodawanie treści po tytule; filtr the_title jest właściwym hakiem.
bueltge
@ChipBennett pytanie - jak to zrobić z logiką tylko dla niestandardowego typu postu - Próbowałem to zawinąć, if ( is_single() && 'property' == get_post_type() ) {}ale to nie działało dla mnie
Jason
@ChipBennett - Mam działający na moim niestandardowym typie postu, ale treść znika z każdego innego typu postu. Zobacz edycję powyżej.
Jason
1
To dlatego, że nie wracasz $contentdo typów postów innych niż niestandardowy typ postu. Zobacz zaktualizowaną odpowiedź.
Chip Bennett,
Tylko uwaga - nie potrzebujesz bloku else {} - tylko powrót rezerwowy. Jeśli warunek jest spełniony, powrót w if () wyklucza cię z funkcji, jeśli przejdziesz przez if (), wtedy nastąpi powrót do rezerwy.
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' );

W is_singularwarunkowe tag sprawdza, czy liczba pojedyncza stanowisko jest wyświetlane i pozwala określić parametr $ post_types która w tym przypadku jest nieruchomość.

Możesz także spojrzeć do_shortcode

Brad Dalton
źródło
Późno do gry tutaj, ale zwracasz pustą zmienną w instancji, która is_singular ('właściwość') zwraca false. Jeśli odwrócisz tam swoją logikę i po prostu zwrócisz w tym przypadku zawartość $, uzyskasz czystszy, bardziej czytelny kod.
Travis Weston,
Można również dodać inny lub użyć operatora trójskładnikowego. Jest to szybki przykład nie w pełni przetestowany, który można rozszerzyć.
Brad Dalton,