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.