it-swarm-ko.tech

WordPress 게시물 정렬?

좋아, 그래서 WPAlchemy 클래스 쓰기 게시물에 패널을 작성하는 사용자 정의 필드를 만들려면 페이지, 그리고 지금까지 모든 것이 잘되었습니다 ... 그러나, 내가 알 수없는 한 가지 문제가 있습니다. 나는 "이벤트 날짜"의 사용자 정의 필드 값을 사용하여 사용자 정의 페이지 템플리트의 이벤트를 정렬하려고합니다.

지침 을 따랐습니다. "사용자 정의 필드를 기반으로 한 쿼리 및 값순 정렬" 및 사용자 지정 쿼리를 설치했지만 작동하지 않는 것 같습니까?

" Events"페이지의 사용자 정의 페이지 템플리트 코드는 다음과 같습니다.

<?php
/* 
  Template Name: Events
*/
get_header();
?>
<div id="depthead" class="grid_12">
  <h2>Upcoming Events</h2>
</div><!--/depthead-->
<?php

$querystr = "
  SELECT wposts.* 
  FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
  WHERE wposts.ID = wpostmeta.post_id 
  AND wpostmeta.meta_key = '_events_meta[event_date]' 
  AND wposts.post_type = 'post'

  ORDER BY wpostmeta.meta_value DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);

?>
<?php if ($pageposts): global $post; $cnt=0; foreach ($pageposts as $post): $cnt++; setup_postdata($post); ?>
<div id="article-<?php echo get_the_ID(); ?>" class="listingbox grid_3">
  <div class="deptpostimg">
    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><img src="<?php echo $events_metabox->get_the_value('event_thumbnail'); ?>" style="outline:1px solid #000" alt="<?php the_title_attribute(); ?>" /><span class="event-date"><?php $events_metabox->the_value('event_date'); ?></span></a>
  </div><!--/deptpostimg-->
  <h4 class="listing-titles"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
  <div class="excerpt">
    <?php the_excerpt(); ?>
  </div><!--/excerpt-->
</div><!--/article-<?php echo get_the_ID(); ?>-->
<?php if($cnt % 4 == 0) { ?>
<div class="grid_12 rowseparator">
  <hr />
</div><!--/rowseparator-->
<?php } ?>
<?php endforeach; endif; ?>
</div><!--/wrapper-->
<?php get_footer(); ?>

그것은 사용자 정의 필드 키를 선택하지 않는 것 같아요 ... 이러한 사용자 지정 쓰기 패널을 작성하는 데 사용하는 클래스는 배열을 모두 저장하므로, 다음을 사용하여 액세스하려고했습니다. _events_meta[event_date]

어쩌면 그게 문제예요. 그렇다면 그걸 고치는 법을 모르겠습니다 ...

어떤 아이디어?


편집 : 다음은 이미지로 사용자 정의 필드가 데이터베이스에 저장되는 방식을 볼 수 있습니다. 다행히도 _events_meta[event_date]가 쿼리에서 작동하지 않는 이유를 파악하는 데 도움이 되었습니까?

WordPress 데이터베이스에 대한 삽입 쿼리가있는 PHPMyAdmin의 스크린 샷 http://staticloader.com/phpmyadmin.png

1
Josh

조쉬, 한번보세요 : http://farinspace.com/wpalchemy-metabox-data-storage-modes/ ...

WPAlchemy가 기본적으로 값을 저장하는 방법을 변경하려고합니다 ... EXTRACT 모드를 기본값으로 설정하는 중 ...

0
farinspace

이벤트 관련 사용자 정의 필드가있는 블로그도 있습니다. 다음은 query_posts () 함수와 함께 사용 된 쿼리입니다.

query_posts($query_string . "&meta_key=event_date_end&meta_compare=>=&meta_value=".date('Y-m-d')."&meta_key=event_date_start&orderby=meta_value&order=ASC");

Event_date라는 사용자 정의 필드가있는 모든 게시물을 현재 날짜와 비교 (이전 이벤트를 필터링)하고 event_start_date라는 다른 사용자 정의 필드로 정렬합니다. 복잡한 예제에서 query_posts () 함수를 올바르게 사용해야하는 방법을 보여주기를 바랍니다.

맞춤 입력란의 존재 여부 만 테스트하는 간단한 선택은 다음과 같습니다.

query_posts('meta_key=event_date'); 

간단한 ORDER BY 맞춤 필드는 다음과 같습니다.

query_posts('meta_key=event_date&orderby=meta_value&order=ASC');

Query_posts () 함수의 API 설명 에서 많은 예제를 볼 수 있습니다.

2
2ndkauboy

안녕하세요 @ Josh:

쿼리가 잘 작동합니다 . 아마도 $events_metabox 변수가 범위에 있지 않고 코드가 실패하는 것입니다 (이상하게도 여전히 바닥 글이 실행되는 이유는 없습니다). 먼저 문제를 해결하려면 템플릿 상단에 전역으로 설정하십시오.

global $events_metabox

그래도 작동하지 않는다면 코드가 $events_metabox로 무엇을하는지 모르기 때문에 문제를 다른 방식으로 추적해야합니다.

증분 제거 및 print_r()을 사용한 디버그

이런 문제가 생기면 문제를 해결할 때까지 조각을 가져 가야합니다. 쿼리가 작동하는지 확인하려는 경우 print_r() 태그를 사용하여 <pre> 태그에 래핑 된 값을 덤프하면 어떤 일이 발생했는지 확인할 수 있습니다. 예 :

<?php
$pageposts = $wpdb->get_results($querystr, OBJECT);
echo '<pre>';
print_r($pageposts);
echo '<pre>';

또한 Direct SQL 대신 get_posts()을 사용하십시오.

즉, 저는 get_posts() 호출로 쿼리를 대체 할 것을 권고합니다. 고도로 WordPress에서 WordPress의 가장 좋은 방법은 WordPress API를 항상 사용하고 쿼리 함수는 직접적인 SQL을 절대 사용하지 않습니다. . 어떤 경우에는 내장 된 캐싱을 비롯한 많은 이점을 얻습니다. 그렇지 않은 경우 게시 된 게시물 만 표시되도록하고 나중에 데이터베이스 구조를 변경하면 중단 될 가능성이 적습니다.

하드 코딩 된 SQL 쿼리를 몇 가지주의 사항 으로 대체해야하는 get_posts() 호출은 다음과 같습니다.

$pageposts = get_posts('meta_key=_events_meta[event_date]&orderby=meta_value&order=ASC');

또는 이와 동등한 것은 똑같은 일을합니다 :

$pageposts = get_posts(array(
  'meta_key' => '_events_meta[event_date]',
  'orderby'  => 'meta_value',
  'order'    => 'ASC',
));

내가 언급 한 경고 는 쿼리가 비공개, 초안 등을 필터링하지 않는다는 것입니다. 내 추측은 get_posts()이 어쨌든 당신이 원하는 것보다 실제로 무엇을하는지에 대한 것입니다.

get_posts()에 대한 Codex 문서

get_posts()에 대한 설명서는 다음과 같습니다.

그러나 흥미롭게도 get_posts() 인수에 대한 더 나은 문서는 query_posts() 페이지에 있으며 사용자의 필요에 따라 사용할 수도 있습니다. 나는 get_posts() 그러나 YMMV 의 큰 통제를 선호합니다.

어쨌든, query_posts()은 실제로 get_posts()을 호출하기 때문에 인수가 실제로 동일합니다.

0
MikeSchinkel