2013-09-06 4 views
0

В настоящее время я выполняю специальную работу на сайте Wordpress клиентов. Я использую приведенный ниже код для запроса базы данных, которая работает нормально. Однако, когда я пытаюсь показать результаты, он не работает должным образом. В основном я пытаюсь запросить таблицу postmeta, чтобы найти информацию из настраиваемого поля, которое я добавил, что в этом случае может быть моим именем, andy. После того, как система найдет все сообщения с настраиваемым значением поля как andy, он должен использовать идентификатор для этих строк и отображать заголовок, контент и дату для каждого из них. Это работало нормально, пока я не просмотрел страницу вживую, и в основном она подсчитывает количество раз, когда появляется мое имя, и повторяет информацию из всех строк, в то время как я хочу, чтобы он только эхо-информация из публикуемых строк. Может ли один помочь, огромная головная боль для меня !:Содержимое Wordpress, отображающее странные при использовании foreach

PHP

<?php 
     require_once('dbConfig.php'); 

     // This variable grabs the name in the URL 
     $r = get_permalink(); 
     $r = explode('/', $r); 
     $r = array_filter($r); 
     $r = array_merge($r, array()); //reset keys 
     $code = $r[3]; 

     $getName = preg_replace("/[^a-zA-Z0-9\s]/", "", $code); 
     $name = $db->real_escape_string($getName); 
     ?> 

     <?php 
     $allposts = $wpdb->get_results($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_value = %s", $name)); 
     foreach ($allposts as $singlepost) { 
      $wpPosts = $wpdb->get_row($wpdb->prepare("SELECT post_title, post_content, post_date_gmt FROM $wpdb->posts WHERE ID = %d AND post_status = 'publish' AND post_type='post' ORDER BY ID DESC", $singlepost->post_id)); 
      $wpPostsDate = new DateTime($wpPosts->post_date_gmt); 
      echo '<h1>'.$wpPosts->post_title.'</h1><br>'; 
      echo 'Post Content: '.$wpPosts->post_content.'<br>'; 
      echo 'Post Date: '.$wpPostsDate->format('jS F Y').'<br><br>'; 
     } 
     ?> 

ответ

1

Иногда вам просто нужен простой подход:

require_once('dbConfig.php'); 
      // This variable grabs the name in the URL 
      $r = get_permalink(); 
      $r = explode('/', $r); 
      $r = array_filter($r); 
      $r = array_merge($r, array()); //reset keys 
      $code = $r[3]; 

      $getName = preg_replace("/[^a-zA-Z0-9\s]/", "", $code); 
      $name = $db->real_escape_string($getName); 

      $pages = get_posts('meta_key=post_author&meta_value='.$name.'&post_type=post&post_status=publish'); 

      $output = ''; 

      foreach($pages as $value){ 

       $output .= "<h1>".$value->post_title."</h1>"; 
       $output .= "<p>".$value->post_content."</p>"; 
      } 

      echo $output; 

работает точно так, как я хотел :)

1

Сначала убедитесь, что у вас есть точное значение в $name перед выполнением запроса на выборку, а затем попробовать один запрос присоединился как это:

$sql = $wpdb->prepare(" 
     SELECT 
      p.post_title, p.post_content, p.post_date_gmt 
     FROM 
      $wpdb->posts p 
     RIGHT JOIN $wpdb->postmeta pm ON (pm.post_id = p.ID) 
     WHERE pm.meta_value = %s AND p.post_status = 'publish' 
     AND p.post_type = 'post' ORDER BY p.ID DESC 
    ", $name); 

$allposts = $wpdb->get_results($sql); 

foreach ($allposts as $singlepost) { 
    $singlepostDate = new DateTime($singlepost->post_date_gmt); 
    echo '<h1>'.$singlepost->post_title.'</h1><br>'; 
    echo 'Post Content: '.$singlepost->post_content.'<br>'; 
    echo 'Post Date: '.$singlepostDate->format('jS F Y').'<br><br>'; 
} 
+0

Здравствуйте, я только что попробовал это с именем andy, поскольку я знаю, что я написал один или два сообщения, и я указан как автор сообщения (meta_key = post_author & meta_value = andy), но ничего не отображает. Есть идеи? –

+0

также, если я делаю print_r ($ allposts); Я получаю Array(), который не выглядит правильным –

+1

Не волнуйтесь, я нашел очень простой подход, спасибо за вашу помощь :) –

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