¿Cómo puede determinar si una imagen está simplemente adjunta o si realmente se ha insertado en una publicación?

2

Ten paciencia conmigo. Prometo que hay una pregunta cuando termine :)

En WordPress, puedes subir imágenes mientras editas una publicación y tienes la opción de insertarlas en el contenido (o no).

En cualquier caso, la imagen parece estar "adjunta" a la publicación cuando se visualiza el Administrador de medios.

¿WordPress coloca alguna referencia en la base de datos para diferenciar una imagen que se adjunta y se inserta en el contenido de la publicación? O a la inversa, ¿una imagen que se ha adjuntado a una publicación pero NO se ha insertado en el contenido de la publicación?

¿Por qué quiero saber esto?

Me gustaría permitir que el usuario cargue imágenes que se escribirán sobre el contenido de la publicación (una fila de imágenes) simplemente subiéndolas a través del asistente de publicación de adjuntos.

Pero también pueden subir algunas imágenes que solo quieren que aparezcan en el contenido, por lo que, en ese caso, harán clic en "insertar en la publicación". A menos que tenga alguna forma de diferenciar las imágenes que se han insertado en comparación con las imágenes que simplemente se han adjuntado, obtendrán imágenes duplicadas, una en la publicación y la otra en la parte superior de la publicación.

¿Alguna idea sobre cómo hacer esto?

Supongo que un enfoque alternativo sería agregar una casilla de verificación al editor de adjuntos para marcar una imagen para mostrarla como un archivo adjunto de encabezado, luego hacer una búsqueda de imágenes adjuntas a la publicación con la bandera especial.

    
pregunta Scott B 18.11.2010 - 20:21

3 respuestas

2

Utilicé complemento de la galería nextgen para hacer algo como esto. En realidad, solo he usado la mitad de eso: el usuario final carga las imágenes a través de la interfaz del complemento, pero la visualización real dentro de la publicación se realiza con un código corto personalizado.

No creo que haya una forma de saber si se ha insertado un archivo adjunto en la publicación, sin examinar el origen del contenido de la publicación.

    
respondido por el Matteo Riva 18.11.2010 - 20:38
2

** Fragmento actualizado: había estado utilizando la ID global de $ post y no la ID pasada, por lo que tomaría un par de actualizaciones antes de agregar la etiqueta meta a las imágenes de contenido. Ahora funciona.

Necesitaba una solución similar y, a raíz de las sugerencias de Jan Fabry, se me ocurrió una función (es cierto que no es elegante, pero funciona):

    /* Add meta value to distinguish inserted images from other attached images - lionassociates.com */

    function insertedImage_save_meta($post_id) {
        $upPost = get_post($post_id);

        $rawPostDoc = new DOMDocument();
        @$rawPostDoc->loadHTML($upPost->post_content);                     
        $imgs = $rawPostDoc->getElementsByTagName('img');
        $i = 0;
        foreach($imgs as $img){
            $imgIDStr = substr($img->getAttribute('class'), (stripos($img->getAttribute('class'),'wp-image-')+9), 6);
            $imgID = preg_replace("[^0-9]", '', $imgIDStr);
            if($imgID != '') {
                if(get_post_meta($imgID, '_inserted-image', false))
                    update_post_meta($imgID, '_inserted-image', 'yes');
                else
                    add_post_meta($imgID, '_inserted-image', 'yes');
            }
            $i++;    
        }
    }
    /* Do something with the data entered */
    add_action('save_post', 'insertedImage_save_meta');

Para que se pegue en (functions.php). Luego uso el valor meta de los archivos adjuntos en un bucle donde estoy escupiendo mis imágenes (según Jan Fabry):

    $imgs = get_posts(array('post_parent'=>get_the_id(), 'numberposts'=>-1, 'post_type'=>'attachment', 'post_mime_type'=>'image'));
    if($imgs[0]) {
        foreach($imgs as $img) {
            if(!get_post_meta($img->ID, '_inserted-image', true))
            echo wp_get_attachment_image($img->ID, 'sec-slide'); //'sec-slide' is just the name of a custom image size
        }
    }

Esto escupe todas las imágenes adjuntas que no se insertan en el contenido de la publicación.

    
respondido por el Jesse 11.06.2011 - 02:01
1

Como dijo Kemp, no hay diferencia en la base de datos entre una imagen que se ha adjuntado y otra que realmente se inserta en el contenido. Escanearía el contenido (en el guardado posterior, no cada vez que lo visualices) y establecería un atributo de metadatos extra para las imágenes adjuntas pero no mostradas. También recuerde revisar las galerías: están insertadas con un código corto, por lo que no siempre es solo una búsqueda de etiquetas <img> .

    
respondido por el Jan Fabry 25.11.2010 - 20:31

Lea otras preguntas en las etiquetas