Wordpress 3.5 Menú de la galería ¿La orden no está establecida?

2

Con el nuevo editor de Galería en Wordpress, puedo configurar mis galerías y arrastrar las miniaturas para reorganizar el orden de las imágenes. En el backend que parece funcionar bien. Pero me topé con un problema cuando trato de mostrar la galería en el extremo frontal utilizando 'orderby' = > Atributo 'menu_order'. La pantalla no estaba usando menu_order. Cuando busqué en la base de datos noté que el valor de menu_order para mis archivos adjuntos seguía siendo '0' para todas las imágenes de la galería. Por lo tanto, parece que reordenar y guardar galerías en Wordpress 3.5 no establece el valor de menu_order en la base de datos. ¿Es esto un error? ¿Alguien más ha encontrado esto? Si es así, ¿sabe de una solución?

    
pregunta Adam Christianson 28.01.2013 - 09:23

4 respuestas

2

me parece que, después de revisar los códigos fuente (PHP y JS), esa galería y su orden no se guardan en la base de datos. Gallery solo existe en JS cuando creas eso e incluso no persiste cuando dejas una página de edición posterior.

La galería se guarda solo al insertar el código de acceso de la galería con el orden exacto de las identificaciones declaradas en ese código de acceso: no se guarda información adicional en la base de datos, se trata de ese código de acceso.

Si desea realizar un bucle de adjuntos de una publicación por orden de menú, debe asignar al archivo adjunto post_type nuevo soporte para atributos de página desde el complemento o sus funciones.php insertando este código:

add_action('init', 'my_custom_init');

function my_custom_init() {
    add_post_type_support( 'attachment', 'page-attributes' );
}

Pero, francamente, asignar un orden de menú al ingresar cada página de edición adjunta es bastante difícil. Si necesita enumerar los documentos adjuntos de las publicaciones por orden de menú, la Galería predeterminada de WP 3.5 no es para usted y le sugiero que use un complemento comprobado (por ejemplo, NextGen Gallery) o escriba un complemento personalizado que le permita configurar un menú orden de Media Uploader o de la Biblioteca.

    
respondido por el david.binda 28.01.2013 - 10:22
2

Estás en lo correcto.

El menu_order ya no se usa para los medios en la galería. Desafortunadamente, parece que la única "fuente" del pedido de la galería es el argumento "ids" para el código abreviado de la galería que está incrustado en el contenido de la página / publicación.

No estoy seguro de si esto es por diseño o por descuido, pero podría serlo porque ahora puede incluir medios en una galería, incluso si no está "adjunto" a la página / publicación. En cualquier caso, a continuación se muestra el método que utilizo para capturar los identificadores y obtener los archivos adjuntos según el orden especificado en el código abreviado.

La clave es que el parámetro "orderby" en la llamada a get_posts debe ser "post__in"; esto le dice que ordene por el orden de identificación de entrada especificado en el parámetro "include". Vea abajo.

// helper function to return first regex match
function get_match( $regex, $content ) {
    preg_match($regex, $content, $matches);
    return $matches[1];
} 

// Extract the shortcode arguments from the $page or $post
$shortcode_args = shortcode_parse_atts(get_match('/\[gallery\s(.*)\]/isU', $post->post_content));

// get the ids specified in the shortcode call
$ids = $shortcode_args["ids"];

// get the attachments specified in the "ids" shortcode argument
$attachments = get_posts(
    array(
        'include' => $ids, 
        'post_status' => 'inherit', 
        'post_type' => 'attachment', 
        'post_mime_type' => 'image', 
        'order' => 'menu_order ID', 
        'orderby' => 'post__in', //required to order results based on order specified the "include" param
    )
);

Esto no es ideal y sería bueno si WP Core almacenara este pedido en la base de datos en algún lugar, pero funciona hasta que tengamos una forma más limpia.

Espero que ayude!

    
respondido por el anderly 04.03.2013 - 21:59
1

Solo un seguimiento, ya que esto se me ocurrió nuevamente en otro proyecto reciente. Usé la solución publicada aquí por el usuario (vickybiswas):

enlace

Lo bueno de esto es que agregará el orden del menú a los elementos en la base de datos. Parece que funciona para mí sin ningún problema hasta ahora.

Aquí está el código que proporcionó:

function pmc_gallery_menu_order_fix($id) {
        $regex_pattern = get_shortcode_regex();
        preg_match ('/'.$regex_pattern.'/s', stripslashes($_POST['content']), $regex_matches);
        if ($regex_matches[2] == 'gallery') :
            $attribureStr = str_replace (" ", "&", trim ($regex_matches[3]));
            $attribureStr = str_replace ('"', '', $attribureStr);
            $attributes = wp_parse_args ($attribureStr);
        endif;
        $ids = explode(',', $attributes[ids]);
        $images = get_posts( array(
        'post_parent' => $post->ID,
        'numberposts' => '-1',
        'post_status' => 'inherit',
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'orderby' => 'menu_order ID',
        'order' => 'ASC'
    ) );
    if ( empty($images) ) {
        // no attachments here
    } else {
        foreach ( $images as $attachment_id => $attachment ) {
            if (in_array($attachment->ID, $ids)) {
                $update_post = array();
                $update_post['ID'] = $attachment->ID;
                $update_post['menu_order'] = array_search($attachment->ID, $ids);
                wp_update_post( $update_post );
            };
        }
    }
}
add_action('pre_post_update', 'pmc_gallery_menu_order_fix');
    
respondido por el Adam Christianson 08.02.2014 - 01:21
0

Tuve un problema similar, parece que el orden del menú no se está configurando hasta que se realiza un cambio arrastrando una imagen a una nueva ubicación, luego se guarda de forma asíncrona para todas las imágenes del conjunto.

El orden del menú también parece estar limitado solo a las imágenes adjuntas a una publicación en particular, aunque, sinceramente, no he jugado tanto con los demás.

Espero que ayude.

    
respondido por el Zach Anderson 29.01.2013 - 00:52

Lea otras preguntas en las etiquetas