Les crochets / filtres WordPress s'insèrent avant le contenu ou après le titre


29

essayer d'insérer du contenu avant le contenu du post dans mes fonctions.php - Je sais comment utiliser les hooks wp réguliers, mais je ne sais pas comment insérer dans d'autres zones.

J'ai essayé, mais cela tue le contenu sur tout autre type de message:

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

Comment puis-je rendre cela conditionnel?

Réponses:


39

Utilisez simplement le the_contentfiltre, par exemple:

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

Fondamentalement, vous ajoutez le contenu de la publication après votre contenu personnalisé, puis retournez le résultat.

modifier

Comme Franky @bueltge le souligne dans son commentaire, le processus est le même pour le titre du post; ajoutez simplement un filtre au the_titlecrochet:

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

Notez que, dans ce cas, vous ajoutez votre contenu personnalisé après le titre. (Peu importe lequel; je suis juste allé avec ce que vous avez spécifié dans votre question.)

Modifier 2

La raison pour laquelle votre exemple de code ne fonctionne pas est que vous ne retournez que $contentlorsque votre condition est remplie . Vous devez revenir $content, sans modification, comme elseconditionnel. par exemple:

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

De cette façon, pour les publications qui ne sont pas du type de publication "propriété", $contentest retourné, non modifié.


il est également possible d'ajouter du contenu après le titre; le filtre the_title est le crochet droit.
bueltge

@ChipBennett question - comment faire cela avec la logique uniquement pour un type de message personnalisé - J'ai essayé de l'envelopper if ( is_single() && 'property' == get_post_type() ) {}mais cela n'a pas fonctionné pour moi
Jason

@ChipBennett - Je l'ai fait fonctionner sur mon type de publication personnalisé, mais le contenu disparaît de tout autre type de publication. Voir modification ci-dessus.
Jason

1
C'est parce que vous ne revenez pas $contentpour des types de publication autres que pour votre type de publication personnalisé. Voir la réponse mise à jour.
Chip Bennett

Juste une note - vous n'avez pas besoin du bloc else {} - juste le retour de secours. Si la condition est remplie, le retour dans le if () vous retire de la fonction, si vous passez au-delà du if (), alors le retour de secours frappera.
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' );

La is_singularbalise conditionnelle vérifie si un post singulier est affiché et vous permet de spécifier le paramètre $ post_types qui dans ce cas est la propriété.

Aussi, vous voudrez peut-être regarder do_shortcode


Tard dans le jeu ici, mais vous retournez une variable vide dans l'instance qui is_singular ('property') renvoie false. Si vous inversez votre logique là-bas et renvoyez simplement $ content dans ce cas, vous vous retrouverez avec un code plus propre et plus lisible.
Travis Weston

Pourrait également ajouter autre chose ou utiliser un opérateur ternaire. C'est un exemple rapide non entièrement testé qui peut être étendu.
Brad Dalton
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.