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?

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.


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.