web-dev-qa-db-fra.com

Trois premières images de l'extrait postérieur

J'ai certains articles qui ne sont rien d'autre que [galerie] et qui contiennent pas mal d'images. Existe-t-il un moyen de définir un extrait généré automatiquement pour n’afficher que les trois premières images de ces publications sur l’index, de sorte que les utilisateurs soient obligés de cliquer pour visualiser le reste? Je vous remercie.

3
sosukeinu

Vous pouvez le faire assez facilement en utilisant la fonction do_shortcode.

Vérifiez si une instance de [gallery] existe dans le contenu de votre message.

Voici une fonction simple à insérer dans functions.php qui vérifie le contenu de la publication en cours pour le shortcode de la galerie:

function gallery_shortcode_exists(){

    global $post;

    # Check the content for an instance of [gallery] with or without arguments
    $pattern = get_shortcode_regex();
    if(
        preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'gallery', $matches[2] )
    )
        return true;

    # Sourced from http://codex.wordpress.org/Function_Reference/get_shortcode_regex
}

Utilisez do_shortcode() pour rendre votre galerie.

Vous pouvez utiliser les éléments suivants dans la boucle dans vos fichiers de modèle:

# Determine if the post_content column contains the string [gallery]
if( gallery_shortcode_exists() ){

    # Get the first three attachments using the posts_per_page parameter
    $args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'posts_per_page' => 3,
        'post_parent' => get_the_ID()
    );
    $attachments = get_children( $args );

    # If any attachments are returned, proceed
    if( $attachments ){

        # Spin cycle to collate attachment IDs
        foreach( $attachments as $attachment )
            $includes[] = $attachment->ID;

        # Format our IDs in a comma-delimited string
        $includes = implode(',', $includes);

        # Inject your include argument
        $shortcode = str_replace('[gallery', "[gallery include='$includes' ", get_the_content());

        # Render the Gallery using the standard editorial input syntax
        echo do_shortcode($shortcode);

        # Add a View More link
        echo '<a href="' . get_permalink() . '">' . __('View more', 'domain') . '</a>';
    }
    else
        _e('Foo Bar - No attachments found and no excerpt to display', 'domain');
}
else
    # Whatever fallback you desire
    the_excerpt();
5
Brian Fegter