2012-09-07 2 views
5

UPDATE를 기반 :주문 워드 프레스 포스트는 상위 범주에

<?php if (is_category(events)) { 
$posts = query_posts($query_string . '&orderby=event_date&order=desc'); 
} else { 
    $posts = query_posts($query_string . '&orderby=title&order=asc'); 
    } 
?> 

문제가 해결 wouldnt가 어떤 이유가 있습니까 : 나는 다음과 같은 코드를 사용하여 시도? 그것은 알파벳순으로 게시물을 정리하는 것처럼 보이지만 '이벤트'내 날짜 순서에는 여전히 운이없는 것 같습니다.

-

기존의 다양한 질문을 통해 검색 후 꽤 내가 뭘하려고 오전에 대한 해결책을 찾을 수 없습니다.

현재 내 사이트의 모든 게시물은 알파벳 순으로 정렬되어 있으며, 내가 추가 한 하나의 새로운 카테고리는 예외입니다. 이 카테고리의 경우 모든 게시물을 사용자 정의 필드에 입력하는 값으로 정렬하려고합니다. 이 필드는 'event_date'라고합니다. 그래서 게시물을 본질적으로 날짜순으로 정렬하려고하지만 게시물이 작성된 날짜는 사용자가 수동으로이 필드에 입력 한 날짜가 아닙니다.

나는 그것을 사용하여 작업 얻을 관리 :
<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?> 

그러나이 모든 다른 페이지에 대한 aphabetical 순서를 무시합니다. 알파벳 순서에 대한

내가 사용하고 있습니다 : 범주 내가별로 주문하려는 '이벤트'가 아닌

<?php if (is_category()) { $posts = query_posts($query_string . '&orderby=title&order=asc'); } ?> 

은 기본적으로 내가 aphabetical 위해 모든 게시물을 주문 페이지를 알려주는 문을 원한다 맞춤 이벤트 날짜

아마 내가 프론트 엔드라고 할 수 있겠지만, 백엔드가 아니므로 제게는 새로운 것이므로 어떤 도움이나 조언을 부탁드립니다.

답변

0

는 다행스럽게도 필자는 당신의 질문을 이해 WP_Query를 사용하고 orderby 내에서 열을 기준으로 주문 사이에 공백을 추가

$args = array(
    'posts_per_page' => 100, 
    'orderby' => 'title', 
    'order' => 'ASC', 
); 

if(is_category($events)){ 
    $args['orderby'] .= " meta_value_num"; 
    $args['meta_key'] = 'event_date'; 
} 

$posts = (array) new WP_Query($args); 
+0

이벤트 카테고리에서 페이지를 다른 카테고리와 다르게 표시하도록 if 문을 사용할 필요가 없습니까? –

+0

예. Updating answer –

+0

대단히 고맙습니다. WP-Query를 사용해도 여전히 운이 좋습니다. 다음과 같은 이유가있을 수 있습니까? 알파벳 순서대로 모든 cateogies를 표시하지만 날짜 순서의 이벤트는 표시하지 않습니까?

0

무엇에 대해 :

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?> 
+0

나는 이것을 사용해 보았지만 둘 다 표시하지 않았습니다. 대답을 감사하지만. –

0
<?php 
$recent = new WP_Query(“cat=ID&showposts=x”); 
while($recent->have_posts()) : $recent->the_post(); 
?> 
1

이 게시글을 주문하려면 사용자 정의 필드 값을 추가하려면 사용자 정의 메타 필드를 쿼리 자체에 추가해야합니다. orderby=meta_valuemeta_key=metafieldid은 이러한 방식으로 주문할 수 있습니다.

은 내가 pre_get_posts hook를 사용하고 get_query_var("cat") (또는 유사한 쿼리 VAR)는 원하는 포스트 범주를 반환하는 경우 쿼리 개체를 수정합니다.

add_action("pre_get_posts", "custom_event_post_order"); 

function custom_event_post_order($query) 
{ 
    $queried_category = $query -> get_query_var("cat"); 

    /* 
    * If the query in question is the template's main query and 
    * the category ID matches. You can remove the "is_main_query()" 
    * check if you need to have every single query overridden on 
    * a page (e.g. secondary queries, internal queries, etc.). 
    */ 
    if ($query -> is_main_query() && $queried_category == 123) 
    { 
     $query -> set("meta_key", "event_date"); // Your custom field ID. 
     $query -> set("orderby", "meta_value"); // Or "meta_value_num". 
     $query -> set("order", "ASC"); // Or "DESC". 
    } 
} 

이 방법은 해당 범주를 사용하는 모든 쿼리보다 우선합니다. 루프를 구성하는 데 자체 매개 변수를 사용하는 사용자 정의 WP_Query 객체를 작성할 수 있습니다.

또한 사용자 지정 필드 데이터를 데이터베이스에 저장하는 방법을 표준화해야합니다. 필자는 UNIX-timestamp 형식의 시간을 사용하여 이동하고 조작하기 쉬운 것을 선호합니다. 이렇게하면 쿼리 할 때 사고가 일어나지 않고 나머지 데이터는 다른 형식으로 서식이 지정됩니다.

면책 조항 : 위의 코드를 실제로 테스트 할 시간이 없었지만 일반적인 아이디어가 올바르게 작동해야합니다.

편집 : 물론 위의 코드는 functions.php 또는 유사한 제네릭 함수 파일에 삽입해야합니다.

+0

아주 좋고 깨끗한 해결책! – Philipp