WordPress 3.5: la galería propia con imágenes incluidas no funciona

2 minutos de lectura

Wordpress 35 la galeria propia con imagenes incluidas no funciona
Slevin

Acabo de actualizar a WordPress 3.5, pero esto bloqueó una pequeña parte de mi código: hay un archivo php que carga una publicación específica con su galería a través de AJAX.

El código se parece a:

<?php

// Include WordPress
define('WP_USE_THEMES', false);
require('../../../../wp-load.php');

$id = $_POST['id'];

// query post with this identifier
query_posts('meta_key=identifier&meta_value=".$id); 
if (have_posts()) :
while (have_posts()) : the_post();

    // add content
    $content = apply_filters("the_content', get_the_content()); 
    echo '<div class="content-inner">'.$content.'</div>';
endwhile;
endif;
?>

La publicación contiene un Código corto. Construí mi propia galería de WordPress con este código:

remove_shortcode('gallery');
add_shortcode('gallery', 'parse_gallery_shortcode');

function parse_gallery_shortcode($atts) {

    global $post;

    extract(shortcode_atts(array(
        'orderby' => 'menu_order ASC, ID ASC',
        'id' => $post->ID,
        'itemtag' => 'dl',
        'icontag' => 'dt',
        'captiontag' => 'dd',
        'columns' => 3,
        'size' => 'full',
        'link' => 'file'
    ), $atts));

    $args = array(
        'post_type' => 'attachment',
        'post_parent' => $id,
        'numberposts' => -1,
        'orderby' => $orderby
        ); 

    $images = get_posts($args);
    print_r($images);
}

Esto funciona con todas las demás galerías de mi sitio, pero no con las que están cargadas con ajax. Y ha funcionado con WordPress 3.4.

¿Hay cambios en WordPress 3.5 que haya pasado por alto?

Lo descubrí: si usa una galería con imágenes, que ya están cargadas en la biblioteca de medios, el código abreviado de la galería se ve así lo que significa que las imágenes solo están vinculadas (y no adjuntas) a la galería, por lo que post_type=attachment no funciona

Ahora estoy usando expresiones regulares para obtener las identificaciones de las imágenes:

$post_content = $post->post_content;
preg_match('/\/', $post_content, $ids);
$array_id = explode(",", $ids[1]);

Ahora es posible extraer todos los galerias o incluso uno solo galería utilizando el $post->ID y get_post_galleries(). Cada galería contendrá la lista de ID de imagen en ids así como una lista de los URL de imagen en src. El objeto de la galería es básicamente los argumentos del código abreviado, por lo que también tiene acceso a ellos.

if ( $galleries = get_post_galleries( $post->ID, false ) ) {

    $defaults = array (
        'orderby'    => 'menu_order ASC, ID ASC',
        'id'         => $post->ID,
        'itemtag'    => 'dl',
        'icontag'    => 'dt',
        'captiontag' => 'dd',
        'columns'    => 3,
        'size'       => 'full',
        'link'       => 'file',
        'ids'        => "",
        'src'        => array (),
    );

    foreach ( $galleries as $gallery ) {

        // defaults
        $args = wp_parse_args( $gallery, $defaults );

        // image ids
        $args[ 'ids' ] = explode( ',', $args[ 'ids' ] );

        // image urls
        $images = $args[ 'src' ];
    }
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad