En mi página de wordpress, tengo el siguiente bucle, que genera correctamente el título de un archivo adjunto.
<?php $the_query = new WP_Query(array( 'post_type' => 'attachment')); while ( $the_query->have_posts() ) : $the_query->the_post(); $attachment_data = wp_prepare_attachment_for_js(); echo '<h2>'.$attachment_data['caption'].'</h2>' ;?>Ahora, también necesito llamar al título adjunto fuera del bucle. Esto es lo que estoy intentando en functions.php:
function custom_info() { global $wp_query; $query_id = $wp_query->post->ID; $attachment_data_query = wp_prepare_attachment_for_js( $query_id ); wp_register_script( 'custom_data_info'); $info = array( 'data_query' => $attachment_data_query['caption'] ); wp_enqueue_script( 'custom_data_info' ); wp_localize_script('custom_data_info', 'info', $info); } if ( !is_admin() ) add_action( "wp_enqueue_scripts", "custom_info", 10 );Y luego se llamaría en el archivo javascript externo así:
return info.data_query Sé que la custom_info function y el archivo javascript se comunican entre sí correctamente. El problema es cómo estoy definiendo $query_id
EDITAR: Casi arreglado. El problema fue que no incluí una instrucción foreach , por lo que el primer elemento del bucle se repetía una y otra vez.
Ajusté a continuación, pero por alguna razón, ahora la matriz está vacía tras la salida de info.data_query ...
function custom_info(){ global $wp_query; wp_register_script( 'custom_data_info'); $info = array('data_query' => array()); foreach ( $wp_query->posts as $query_id) { $attachment_data_query = wp_prepare_attachment_for_js( $query_id ); $info['data_query'][$query_id] = $attachment_data_query['caption']; }¿Estás seguro de que $wp_query devolverá el ID de publicación correcto? En mi experiencia, es mejor usar $post global en su lugar. Pase eso a wp_prepare_attachment_js() en su lugar:
global $post; $post_id = $post->ID; $attachment_data_query = wp_prepare_attachment_for_js( $post_id );