web-dev-qa-db-fra.com

Séparer les images jointes de la boucle de publication

J'essaie de créer un tableau d'images pour un script de galerie de diaporamas. Vous devez donc séparer les images de la boucle de publication. Avez-vous une idée de la meilleure façon de réaliser cela et de faciliter l'ajout d'images? Je peux utiliser un script pour récupérer des pièces jointes (voir ci-dessous), mais cela semble un peu compliqué:

  1. les images téléchargées apparaissent dans la zone de texte du message, puis doivent être supprimées, sinon il y a duplication.
  2. vous ne pouvez pas supprimer une image sauf en allant dans la médiathèque et en la supprimant ici.

http://digwp.com/2009/08/awesome-image-attachment-recipes-for-wordpress/

La meilleure option serait-elle d'utiliser quelque chose comme le plug-in more fields et de créer plusieurs champs de texte dans lesquels publier les URL de photos?

Ils utilisent donc la médiathèque pour télécharger des images et récupérer les URL à mettre dans le message.

Dans l’idéal, j’essaie d’obtenir un scénario simple: ils téléchargent les images en une seule fois, sous forme de galerie ou d’images individuelles, écrivent le texte de description de leur galerie et les enregistrent.

3
david arthur

La meilleure façon d’attribuer des images à un message est de les télécharger dans la zone de publication/nouveau message de WordPress. Vous pouvez également supprimer des images à partir de là.

Cela dit, voici comment procéder. Vous allez vous connecter à wp_enqueue_script et appeler wp_enqueue_script pour ajouter votre script de galerie à la page. Ensuite, vous utiliserez wp_localize_script, qui imprimera un objet javascript pour Nice juste au-dessus de votre script.

Dans votre fonction accrochée, vous accédez à la variable $post, qui contient la publication actuelle. Vous n'avez pas besoin d'être dans la boucle pour l'obtenir. Et si vous en avez, vous pouvez obtenir des publications enfants (telles que des pièces jointes), ce qui facilite grandement l'obtention d'images en dehors de la boucle.

<?php
add_action( 'wp_enqueue_scripts', 'wpse20321_enqueue_scripts' );
function wpse20321_enqueue_scripts()
{
    // If this isn't a singular post, return -- don't enqueue anything
    if( ! is_singular() ) return;

    // enqueue your gallery script
    wp_enqueue_script( 
        'wpse20321-gallery-script', 
        trailingslashit( get_stylesheet_directory_uri() ) . 'path/to/gallery.js', 
        // use trailingslashit( plugin_dir_url( __FILE__ ) ) . 'path/to/gallery.js' if you're in a plugin
        array( 'jquery' )
    );

    // now we'll get the attachments...
    global $post;
    if( empty( $post ) ) $post = get_queried_object();
    $attachments = get_posts(
        array(
            'post_type'         => 'attachment',
            'post_mime_type'    => 'image',
            'post_status'       => 'inherit',
            'post_parent'       => $post->ID
        )
    );
    if( ! $attachments ) return;
    $out = array();
    $out['img_list'] = array();
    foreach( $attachments as $a )
    {
        $img = wp_get_attachment_image_src( $a->ID, 'full' );
        $out['img_list'][] = array( 
            'image'     => $img[0],
            'width'     => $img[1],
            'height'    => $img[2]
        );
    }

    // call wp_localize_script, which will spit out a Nice JSON for you,
    // right before your enqueued gallery script, ready for use.
    // the object name will be wpse20321
    wp_localize_script( 
        'wpse20321-gallery-script', 
        'wpse20321',
        $out 
    );
}

Vous pouvez ajouter tout ce dont vous avez besoin à cet objet JS. Voulez-vous que l'attribut de titre soit enregistré pour l'image?

foreach( $attachments as $a )
    {
        $img = wp_get_attachment_image_src( $a->ID, 'full' );
        $out['img_list'][] = array( 
            'image'     => $img[0],
            'width'     => $img[1],
            'height'    => $img[2],
            'title'     => $a->post_title
        );
    }
1
chrisguitarguy

Dans votre fichier de fonctions, placez ceci:

//gives me different image sizes
if ( function_exists( 'add_image_size' ) ) 
{
add_image_size( 't1x1', 145, 200, true );
add_image_size( 't2x2', 200, 200, true );
add_image_size( 't3x2', 307, 417, true );
add_image_size( 't3x3', 600, 400, true );
add_image_size( 't4x3', 680, 500, true );
}
///////////////////////////////////////////////
// Start  Gallery Function
////////////////////////////////////////////////

function wpo_get_images($size = 'thumbnail', $limit = '0', $offset = '0', $big = 'large', $post_id = '$post->ID', $link = '1', $img_class = 'attachment-image', $wrapper = 'div', $wrapper_class = 'attachment-image-wrapper' , $wrapper2 = 'div' ) {

    global $post;

    $images = get_children( array('post_parent' => $post_id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') );

    if ($images) {

        $num_of_images = count($images);

        if ($offset > 0) : $start = $offset--; else : $start = 0; endif;
        if ($limit > 0) : $stop = $limit+$start; else : $stop = $num_of_images; endif;
        $i = 0;

        foreach ($images as $attachment_id => $image) {
            if ($start <= $i and $i < $stop) {

            $img_title = $image->post_title;   // title.

            $img_description = $image->post_content; // description.

            $img_caption = $image->post_excerpt; // caption.

            //$img_page = get_permalink($image->ID); // The link to the attachment page.

            $img_alt = get_post_meta($attachment_id, '_wp_attachment_image_alt', true);

            if ($img_alt == '') {

            $img_alt = $img_title;

            }

                if ($big == 'large') {

                $big_array = image_downsize( $image->ID, $big );

                $img_url = $big_array[0]; // large.

                } else {

                $img_url = wp_get_attachment_url($image->ID); // url of the full size image.

                }


            // FIXED to account for non-existant thumb sizes.

            $preview_array = image_downsize( $image->ID, $size );

            if ($preview_array[3] != 'true') {

            $preview_array = image_downsize( $image->ID, 'thumbnail' );

            $img_preview = $preview_array[0]; // thumbnail or medium image to use for preview.

            $img_width = $preview_array[1];

            $img_height = $preview_array[2];

            } else {

            $img_preview = $preview_array[0]; // thumbnail or medium image to use for preview.

            $img_width = $preview_array[1];

            $img_height = $preview_array[2];

            }

            // End FIXED to account for non-existant thumb sizes.
            ///////////////////////////////////////////////////////////

            // This is where you'd create your custom image/link/whatever tag using the variables above.

            // This is an example of a basic image tag using this method.

            ?>

            <?php if ($wrapper != '0') : ?>

            <<?php echo $wrapper; ?> class="<?php echo $wrapper_class; ?>">

            <?php endif; ?>

            <?php if ($wrapper2 != '0') : ?>

            <<?php echo $wrapper2; ?>>

            <?php endif; ?>

            <?php if ($link == '1') : ?>


            <a href="<?php echo $img_url; ?>" title="<?php echo $img_title; ?>">

            <?php endif; ?>

            <img class="<?php echo $img_class; ?>" src="<?php echo $img_preview; ?>" alt="<?php echo $img_alt; ?>" title="<?php echo $img_title; ?>" />

            <?php if ($link == '1') : ?>


            </a>

            <?php endif; ?>

            <?php if ($img_caption != '') : ?>

            <div class="attachment-caption"><?php echo $img_caption; ?></div>

            <?php endif; ?>

            <?php if ($img_description != '') : ?>

            <div class="attachment-description"><?php echo $img_description; ?></div>

            <?php endif; ?>

            <?php if ($wrapper2 != '0') : ?>

            </<?php echo $wrapper2; ?>>

            <?php endif; ?>

            <?php if ($wrapper != '0') : ?>

            </<?php echo $wrapper; ?>>

            <?php endif; ?>

            <?

            // End custom image tag. Do not edit below here.

            ///////////////////////////////////////////////////////////

            }
            $i++;
        }
    }
} 
///////////////////////////////////////////////

puis appelez les images qui sont téléchargées sur n’importe quel message avec ceci:

<ul>

<?php wpo_get_images('t4x3','0','0','slide',"$post->ID",'0','portfolio-photo','li', 'theclass' );?>


</ul>   

vous pouvez voir qu'il y a différentes options à définir, comme la taille de l'image (la première option et quelques autres pour jouer avec.

0
endle.winters

toutes vos images téléchargées sont enregistrées dans la bibliothèque multimédia. Vous pouvez rédiger un texte de description d'image lors d'une nouvelle publication.


Pas:


posts-> addnew-> télécharger une image-> Choisir une bibliothèque de média-> sélectionner une image-> Maintenant vous avez plus d'options comme image (Titre, Texte alternatif, Légende, Description, URL du lien, Alignement, Taille) -> Puis cliquez sur Insérer dans l'article -> Enregistrer toutes les modifications.


J'espère que cela vous sera utile :)

0
Ramkumar M

Hack hack, mais ça va marcher:

  1. Dans l'en-tête, où vous voulez l'objet JSON, placez une chaîne et assurez-vous qu'elle sera unique. (générer un unqid () par exemple).
  2. Dans la boucle, rassemblez les images et créez la chaîne JSON dans une variable.
  3. Dans votre modèle, au tout début de l'en-tête, placez. Cela désactivera la sortie et lira toute la sortie dans la mémoire tampon.
  4. Comme vous n’avez pas de sortie, vous pouvez utiliser l’ensemble de la page en tant que chaîne. Lisez-le tout à la fin du modèle (à la fin du pied de page) pour le récupérer.
  5. Remplacez la chaîne unique par la chaîne JSON. Utilisez une simple $ allpage = str_replace (to_search, to_replace_for, the_string).
  6. Imprimer la chaîne mise en mémoire tampon. (echo $ allpage).
  7. Désactivez la mise en tampon de sortie et effacez l'objet pour éviter les fuites de mémoire. (ob_end_flush ())

Comme je le disais, affreux. Vous seriez mieux, si vous vous contentiez simplement du JSON à la fin de la page, par exemple, dans le pied de page, mais que vous rassemblez les images de la boucle dans une chaîne.

0
petermolnar