WordPress Hooks / Filter werden vor dem Inhalt oder nach dem Titel eingefügt

29

versuche, in meiner functions.php Inhalte vor den Post-Inhalten einzufügen - Ich weiß, wie man die regulären wp-Hooks verwendet, weiß aber nicht, wie man sie in andere Bereiche einfügt.

Versuchte dies, aber es löscht den Inhalt eines anderen Beitragstyps:

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

Wie mache ich das abhängig?

Jason
quelle

Antworten:

39

Verwenden Sie einfach den the_contentFilter, zB:

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

Grundsätzlich fügen Sie den Inhalt der Posts nach Ihrem benutzerdefinierten Inhalt an und geben dann das Ergebnis zurück.

Bearbeiten

Wie Franky @bueltge in seinem Kommentar ausführt, ist der Vorgang für den Post-Titel derselbe. Füge einfach einen Filter zum the_titleHaken hinzu:

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

Beachten Sie, dass Sie in diesem Fall Ihren benutzerdefinierten Inhalt nach dem Titel anhängen . (Es spielt keine Rolle, ich habe mich nur an das gehalten, was Sie in Ihrer Frage angegeben haben.)

Bearbeiten 2

Der Grund, warum Ihr Beispielcode nicht funktioniert, ist, dass Sie nur zurückkehren, $contentwenn Ihre Bedingung erfüllt ist . Sie müssen $contentunverändert elsezu Ihrer Bedingung zurückkehren. z.B:

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

Auf diese Weise wird für Posts, die nicht den Post-Typ 'property' haben $content, der Wert unverändert zurückgegeben.

Chip Bennett
quelle
Es ist auch möglich, Inhalte nach dem Titel hinzuzufügen. der filter the_title ist der richtige hook.
Bueltge
@ChipBennett Frage - wie mache ich das mit Logik nur für einen benutzerdefinierten Beitragstyp - Ich habe versucht, es einzuwickeln, if ( is_single() && 'property' == get_post_type() ) {}aber das hat bei mir nicht funktioniert
Jason
@ChipBennett - Ich habe es auf meinen benutzerdefinierten Beitragstyp angewendet, aber der Inhalt verschwindet von jedem anderen Beitragstyp. Siehe oben bearbeiten.
Jason
1
Dies liegt daran, dass Sie nur $contentfür Ihren benutzerdefinierten Beitragstyp eine Rückgabe vornehmen. Siehe aktualisierte Antwort.
Chip Bennett
Nur eine Anmerkung - Sie brauchen den else {} -Block nicht - nur den Fallback-Return. Wenn die Bedingung erfüllt ist, werden Sie durch die Rückkehr in if () aus der Funktion herausgeführt. Wenn Sie es nach if () schaffen, wird die Fallback-Rückkehr erreicht.
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' );

Das is_singularbedingte Tag prüft, ob ein einzelner Beitrag angezeigt wird, und ermöglicht es Ihnen, den Parameter $ post_types anzugeben, der in diesem Fall eine Eigenschaft ist.

Vielleicht möchten Sie sich auch ansehen do_shortcode

Brad Dalton
quelle
Spät zum Spiel hier, aber Sie geben eine leere Variable in der Instanz zurück, die is_singular ('property') false zurückgibt. Wenn Sie Ihre Logik dort umkehren und in diesem Fall einfach $ content zurückgeben, erhalten Sie einen saubereren, besser lesbaren Code.
Travis Weston
Könnte auch else hinzufügen oder einen ternären Operator verwenden. Es ist ein kurzes, nicht vollständig getestetes Beispiel, das erweitert werden kann.
Brad Dalton