2013-02-27 2 views
0

나는 그들의 올해와 meta_key에 의해 게시물을 표시하고자하는 포트폴리오 사이트의 index.php를 구축하고 있습니다. 메타 키는 "추천 프로젝트"옵션으로 사용됩니다.년 및 메타 키 반환 빈 게시물

처음에는 다른 프로젝트 연도를 용어로 사용하여 사용자 지정 분류법을 작성하고 foreach를 사용하여 연도 옆에 게시물을 채 웁니다. 용어가 이미 무언가가 여전히 연도를 출력하기 때문에 (!?) 용어를 작동하지 않습니다 IT와 메타 값으로 taged되는 값을 가지고 있기 때문에

<?php $years = get_terms('year', 'orderby=name&order=desc&hide_empty=1'); ?> 

<?php foreach($years as $year) : ?> 
<div class="front-index"><p><?php echo $year->name; ?></p></div> 

    <?php 
    $year_query = array( 
     'post_type' => 'works', 
     'meta_key' => 'post_h2_mask', 
     'meta_value' => '1', 
     'taxonomy' => 'year', 
     'term' => $year->slug); 
    $year_posts = new WP_Query ($year_query); 
    ?> 

<?php while ($year_posts->have_posts()) : $year_posts->the_post(); ?> 

… 

이는 경우에도, 작동하지 않았다 게시물에 meta_value가 없습니다.

은 ...

은 그래서 솔루션은 올해 게시물을 채우기 위해 워드 프레스 자신의 "게시"날짜를 사용할 수있을 것으로 생각했다. 그리고 이것을 위해 나는 mysql 스 니펫을 발견하고 이것을 약간 돌아 보았습니다.

<?php 
$years = $wpdb->get_col(" 
      SELECT DISTINCT YEAR(post_date) 
      FROM $wpdb->posts 
      WHERE post_status = 'publish' 
      AND post_type = 'works' 
      ORDER BY post_date DESC"); 
?> 

    <?php foreach($years as $year) : ?> 
    <div class="front-index"><p><?php echo $year; ?></p></div> 

     <?php 
     $year_query = array( 
      'post_type' => 'works', 
      'meta_key' => 'post_h2_mask', 
      'meta_value' => '1', 
      'year' => $year 
      ); 
     $year_posts = new WP_Query ($year_query); 
     ?> 

    <?php while ($year_posts->have_posts()) : $year_posts->the_post(); ?> 
    <?php  
    $attachments = new Attachments('attachments'); 
    if($attachments->exist()) :  
    ?> 

    <div class="front-work"> 
    <div class="wraptocenter"> 
     <a href="<?php the_permalink() ?>" rel="bookmark"> 
     <?php the_post_thumbnail('front-thumbnail'); ?> 
     <p><?php the_title(); ?><br /><span class="image-count"> 
     <?php 
     $project_cats = get_the_terms($post->ID, 'medium'); 
     $project_cats = array_values($project_cats); 

     for($cat_count=0; $cat_count<count($project_cats); $cat_count++) { 

      echo '<span>'.$project_cats[$cat_count]->name.'</span>'; 
      if ($cat_count<count($project_cats)-1){ 
       echo ', '; 
      } 
     } 
     ?>,  
     <span><?php echo $attachments->total(); ?> images</span></span></p> 
     </a> 
    </div> 
    </div> 

<?php endif; endwhile; ?> 
<?php endforeach ?> 

이것은 div에서 몇 년이 걸리지 만 링크가있는 게시물은 단 1 개이며 2006 년부터 하나뿐입니다!

meta_key를 사용하여 연간 소속 옆에 게시물을 얻는 방법은 무엇입니까?

답변

0

확인.

이번에는 직접 사용해 보았습니다. 첫 번째 문제는 것을 : 역사, 즉 "X 월, X 일 X 년 게시물"에 특정 날짜 기간 동안 반환 게시물 위

쿼리. 그들은 현재와 관련하여 timespan에서 게시물 을 가져올 수 없으므로 "지난 30 일 간의 게시물 "또는 "지난 해의 게시물"과 같은 검색어는 기본 검색어 인 을 사용할 수 없으며 posts_where를 사용해야합니다. 필터가 완료되었습니다. 아래 예제는 posts_where 필터를 사용하며 대부분의 시간 관련 검색어에 대해 을 수정할 수 있어야합니다.

Via WordPress CODEX. WP_query 특정 연도를 원한다면 한 달이 필요합니다.

MYSQL 쿼리 부분에서는 wordpress.org 포럼의 발견 된 코드를 사용하여 그 내용을 살펴 보았습니다. 그것은 최고의 사람이 아니지만 나를 위해 일합니다.

<?php 
$years = $wpdb->get_col(" 
      SELECT DISTINCT YEAR(post_date) 
      FROM $wpdb->posts 
      LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id 
      WHERE wp_postmeta.meta_key = 'your_meta_key' 
      AND wp_postmeta.meta_value = 'your_meta_vaue' 
      AND post_status = 'publish' 
      AND post_type = 'your_post_type' 
      ORDER BY post_date DESC"); 

    foreach($years as $year) :  
?> 
    <p><?php echo $year ?></p> 

    <?php 
    $months = $wpdb->get_col(" 
       SELECT DISTINCT MONTH(post_date) 
       FROM $wpdb->posts 
       WHERE post_status = 'publish' 
       AND post_type = 'your_post_type' 
       AND YEAR(post_date) = '".$year."' 
       ORDER BY post_date DESC"); 

     foreach($months as $month) : 
    ?> 
     <?php 
     $posts = $wpdb->get_col(" 
        SELECT $wpdb->posts.* 
        FROM $wpdb->posts 
        LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id 
        WHERE wp_postmeta.meta_key = 'your_meta_key' 
        AND wp_postmeta.meta_value = 'your_meta_value' 
        AND post_status = 'publish' 
        AND post_type = 'your_post_type' 
        AND MONTH(post_date) = '".$month."' 
        AND YEAR(post_date) = '".$year."' 
        ORDER BY post_date DESC"); 

      foreach($posts as $post) : 
     ?> 

      <!-- your specific post html & php --> 

     <?php endforeach;?> 
    <?php endforeach;?> 
<?php endforeach;?> 
:

코드 년 meta_value WordPress에 게시물을 얻기를위한

관련 문제