2010-12-15 3 views
3

Я работаю над этим плагином для wordpress, и я застреваю в запросе, который не будет сброшен. В следующей функции:Как я могу сбросить запрос в пользовательском wordpress metabox

function WPSM_artists_autocomplete(){ 

$response = array(); 

query_posts('post_type=artist&posts_per_page=-1'); 

    if (have_posts()) : while (have_posts()) : the_post(); 
    $image_id = get_post_thumbnail_id(); 
    $image_url = wp_get_attachment_image_src($image_id,'artist-icon'); 
    $image_url = $image_url[0]; 

    $response[] = array(get_the_ID() , get_the_title() , null, '<img src="'.$image_url.'" />'. get_the_title()); 
    endwhile; endif; 

    wp_reset_query(); 

    // Write JSON file 
$output = json_encode($response); 
$data = WPSM_CACHE_DIR."/data.json"; 
$fh = fopen($data, 'w') or die("can't open file"); 
fwrite($fh, $output); 
fclose($fh); 

// Return JSON url 
echo WPSM_CACHE_URL."/data.json"; 
} 

Я использую query_posts для заполнения METABOX. Но wp_reset_query(); похоже, не работает должным образом. Это влияет на все другие обменные и связанные с ними варианты. Глобальная переменная $ post задана самым последним значением этого запроса, а не значением по умолчанию страницы редактирования сообщений.

Мне бы хотелось услышать, как решить этот плагин. Могу использовать все, чтобы привести меня в правильном направлении. Заранее спасибо!

Приветствия,

Ronny

+1

Наконец нашел кого-то с той же проблемой, как мне – Zach 2013-09-05 15:42:18

ответ

6

Я наткнулся на это сегодня, и нашел исправление.

Вам нужно будет сохранить исходный столбец $, прежде чем начинать новый цикл, а затем в конце вашей функции вам нужно будет установить его обратно.

Прежде чем назначить функцию $ post временной переменной.

$original_query = $wp_query; 

Тогда в конце вашей функции установите его обратно.

$wp_query = $original_query; 
    wp_reset_postdata(); 

Не уверен, что вышеуказанное работает в вашем случае, когда я использовал пользовательский запрос.

Я разместил свой код ниже, чтобы вы могли посмотреть.

  global $wpdb; 
      global $post; 
      $originalpost = $post; 

      $querydetails = " 
       SELECT * 
       FROM $wpdb->posts 
       WHERE $wpdb->posts.post_type = 'projects' 
       AND $wpdb->posts.post_status = 'publish' 
       ORDER BY $wpdb->posts.post_date DESC 
      "; 

      $pageposts = $wpdb->get_results($querydetails, OBJECT); 

      if ($pageposts) { 
       foreach ($pageposts as $post) { 
         setup_postdata($post); 

         $postID = get_the_ID(); 
         echo '<option value="'; 
         echo $postID . '"'; 
         foreach ($meta as $m) { 
          if ($postID == $m) echo ' selected="selected" '; 
         }    
         echo '>'; 
         echo the_title(); 
         echo '</option>'; 
       } 
      } 

      echo "</select>"; 
      $this->show_field_end($field, $meta); 
      $post = $originalpost; 
+0

Я знаю, что я 2 года поздно, чтобы добавить комментарий, но я хотел бы сказать, что она по-прежнему применяется. Я создал настраиваемый цикл внутри метабокса, используя WP-Query, и это затмевало все мои другие пользовательские вызовы postmeta. wp_reset_postdata ничего не делал. Однако сохранение оригинала, а затем и реселлирование вручную, наконец, было исправлено. Спасибо! – 2014-01-19 18:58:36

 Смежные вопросы

  • Нет связанных вопросов^_^