¿Por qué no PhotoSmash plugin de jugar bien con WP_Query?
Pregunta
Estoy utilizando el PhotoSmash plugin para permitir a los usuarios subir sus propias imágenes y voto en ellos, y funciona muy bien. En una de mis páginas utilizo el código siguiente para enumerar los mensajes que tienen una determinada categoría:
<?php
if (is_page() ) {
$category = get_post_meta($posts[0]->ID, 'category', true);
}
if ($category) {
$cat = get_cat_ID($category);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_per_page = -1; // -1 shows all posts
$do_not_show_stickies = 1; // 0 to show stickies
$args=array(
'category__in' => array($cat),
'orderby' => 'date',
'order' => 'ASC',
'paged' => $paged,
'posts_per_page' => $post_per_page,
'caller_get_posts' => $do_not_show_stickies
);
$temp = $wp_query; // assign orginal query to temp variable for later use
$wp_query = null;
$wp_query = new WP_Query($args);
if( have_posts() ) :
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<section class="vote6" id="post-<?php the_ID(); ?>">
<?php the_content(); ?>
<section class="voter">
<?php DisplayVotes(get_the_ID()); ?>
</section>
</section>
<?php endwhile; ?>
<?php else : ?>
<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.</p>
<?php get_search_form(); ?>
<?php endif;
$wp_query = $temp; //reset back to original query
} // if ($category)
?>
Esto funciona muy bien también, excepto cuando se activa el plugin PhotoSmash. Me sale el siguiente error:
Fatal error: llamada a un get función miembro () en un no-objeto en \ nas-001 \ winspace004 \ 10-3mpromos.ca \ www \ carcrazy \ wp-incluye \ query.php en la línea 27
La línea 27 es return $wp_query->get($var);
La cuestión es en algún lugar dentro de BWB-photosmash.php en la carpeta principal del plugin, pero no puedo averiguar dónde. Alguien más ha encontrado con este problema?
Solución
No hay necesidad de objeto $wp_query
malabares, almacenarlo en temperatura, etc. Rara vez es buena idea directamente meterse con importantes variables globales, a menos que sea absolutamente necesario.
Sólo puede crear su propia variable arbitraria e init con nueva WP_query
$some_variable = new WP_Query($args);
y así sucesivamente.
Además, no se olvide de la limpieza después de la wp_reset_query()
.