web-dev-qa-db-fra.com

Renvoyer un tableau d'images après le contenu

J'essaie de sortir un tas d'images après chaque article, mais je ne peux en produire qu'une.

add_filter( 'the_content', 'image_posts' );
function image_posts( $content ) {
    global $post;
    if ( ! $post instanceof WP_Post ) {
        return $content;
    }
    $all_images = get_images(); // array of images 
    switch ( $post->post_type ) {
        case 'page':
            // return $content; // this only return content
            foreach ($all_images as $image){
                echo '<img src="'.$image.'" />';
            }
            // return $content; // this returns all images on top of the content


        default:
            return $content;
    }
}

et si je modifie la boucle à ceci:

foreach ($all_images as $image){
   return content . '<img src="'.$image.'" />';
}

Je ne reçois que le contenu avec une seule image. Comment puis-je sortir toutes les images après le contenu?

2
Tammy

En supposant que nous atteignions l'instruction switch et la casse de page et en supposant que $ all_images contienne effectivement des URLs d'image:

Dans votre instruction switch, essayez d’abord de stocker toutes les images dans une variable, puis de les concaténer avec $content dans votre instruction de retour.

add_filter( 'the_content', 'image_posts' );
function image_posts( $content ) {
    global $post;
    if ( ! $post instanceof WP_Post ) {
        return $content; // If this is true, we return $content and the rest of the code doesn't run.
    }
    $all_images = get_images(); // array of images 
    $images = ""; // We'll store all our image tag strings here here. Assuming, of course, we make it to this section of code.

    switch ( $post->post_type ) {
        case 'page':
            foreach ($all_images as $image){
                $images .= '<img src="'.$image.'" />';
            }
            return $content  . $images; // Concatenate $images after $content
    default:
        return $content;
    }
}

Une partie du problème que vous rencontrez probablement est qu’une fois que vous aurez renvoyé $content, aucun autre code du filtre ne sera exécuté.

Pour un bonus supplémentaire, vous pouvez ajouter une classe à votre balise d'image ou l'envelopper avec une div ou un autre wrapper pour faire de la magie css plus tard :)

Un éclaircissement sur les filtres et les actions WordPress: WP les filtres et les actions fonctionnent mieux avec les instructions return afin de fonctionner correctement. Alors que vous pourriez echo quelque chose, cette echo a lieu au moment de l’exécution du code. Cela signifie que votre code apparaît souvent en tête de page.

2
Ian