2013-03-16 6 views
0

Здравствуйте, я пишу функцию, чтобы изменить содержимое сообщения и дополнительную информацию к нему. Но при этом он не загружает сайт и генерирует ошибку внутреннего сервера 500. Вот мой код, который я использовал для этого крючка.Wordpress add_filter делает ошибку 500

add_filter("the_content","add_related_pics",1); 

function add_related_pics($content){ 
    $pics = ""; 
    $pics.= '<ul>'; 
    $tag = get_post_meta(get_the_ID(), 'highlight-tag', true); 
    $original_query = $wp_query; 
    $wp_query = null; 
    $args=array('posts_per_page'=>5, 'tag' => $tag,'orderby' => 'rand'); 
    $wp_query = new WP_Query($args); 
    if (have_posts()) : 
     while (have_posts()) : the_post(); 
      $pics.= '<li>'; 
     preg_match('@<img.+src="(.*)".*>@Uims', get_the_content(), $matches); 
     $src = $matches[1]; 
      $pics.='<a href="'.get_permalink().'"><img src="'.$src.'" height="50" width="50" /></a>'; 
     $pics.= '</li>'; 
     endwhile; 
    endif; 
    $wp_query = null; 
    $wp_query = $original_query; 
    wp_reset_postdata(); 
    $pics.='</ul>'; 
    return $content.$pics; 
} 

Может кто-нибудь указать, что с этим кодом не совпадает?

+0

удалить все и попробовать одну функцию в то время, чтобы точно определить, Что проблема. например. сначала возвращайте только $ content, а не делайте что-нибудь еще, посмотрите, не ошибаются ли ошибки, попробуйте wp_query с preg_match и т. д. и т. д. и т. д. более мелкие шаги, тем лучше. – kennypu

+0

Уже сделал это, получив ошибку в цикле в моем скрипте. –

ответ

0

Вы не используете объект wp_query, поэтому поэтому у вас есть ошибка.

Добавьте это к вашему коду, и все будет в порядке.

if ($wp_query->have_posts() ) : 
    while ($wp_query->have_posts()) : 
    $wp_query->the_post(); 
     $pics.= '<li>'; 
    preg_match('@<img.+src="(.*)".*>@Uims', get_the_content(), $matches); 
    $src = $matches[1]; 
     $pics.='<a href="'.get_permalink().'"><img src="'.$src.'" height="50" width="50" /></a>'; 
    $pics.= '</li>'; 
    endwhile; 
    endif; 

и если ваш не собирается использовать $orignal_query вам не нужно сбросить переменную wp_query к нему.

Так избавиться от следующего кода в обоих случаях:

$original_query = $wp_query; 
$wp_query = null; 
Смежные вопросы