메타 값에 따라 주문, 프로 우선, 무료
-
-
WPSE에 오신 것을 환영합니다.시작하려면 [투어] 페이지를 방문하여 사이트 운영 방식에 대해 알아보십시오.또한 사이트 관련 질문에 대해서는 [도움말]을 방문하십시오.질문으로 돌아가려면 몇 가지 문제를 해결해야합니다. 무료 및 프로를 메타 값으로 사용하여 메타 키에서 무작위로 게시물을 가져오고 싶습니다.10 개의 게시물 (프로 4 개 및 6 개 무료)을 받으면 4 개의 프로 게시물이 먼저 표시되고 나머지 6 개는 무료로 표시되어야합니다.팁입니다.`query_posts`를 사용하지 말고`WP_Query`를 사용하십시오.Welcome to WPSE. To start you off, please feel free to visit our [tour] page to get a feel on how the site operate. Also visit [help] for any site related questions. To come back to your question, I just need to clear some issues, you want to randomly fetch posts from a meta key with free and pro as meta values. Say you get 10 posts, 4 pro and 6 free, the 4 pro posts must be shown first, then the other 6 free. Just a tip, do not use `query_posts`, rather use `WP_Query`
- 0
- 2014-10-13
- Pieter Goosen
-
k 덕분에 내가 query_posts를 사용했음을 의미합니다.tax-list.php 그래서 새 cat.php 파일을 만들어야합니까?새로운 루프?또는 동일한 파일에서 wp를 사용 했습니까?k thanks means i used query_post in - inbuild function of theme. tax-list.php so i need to create new cat.php file ? for new loop ? or used wp in same file ?
- 0
- 2014-10-13
- itcgpit mark
-
같은 파일을 사용하고`query_posts`를`WP_Query`로 변경하면됩니다.또한 이것이 당신이하려는 일인지 마지막 의견에 대한 조언을 부탁드립니다.Use the same file, just change `query_posts` to `WP_Query`. Also, please advice on my last comment whether this is what you are trying to do
- 0
- 2014-10-13
- Pieter Goosen
-
ya 나는 시도하고있다. 카테고리 목록 페이지에서 게시물 유형=목록 메타 값=프로 및 무료이지만 먼저 프로를 표시 한 다음 무료. 그래서 메타 값 순서에 따라 순서 DESC WP_Query ($ query_string. '& orderby=meta_value_num'); 정의되지 않은 함수 WP_Query () 호출 오류ya i am trying like. in page of category listing post type = listing meta value = pro and free but first display pro then free .so order by meta value order DESC WP_Query($query_string . '&orderby=meta_value_num'); Call to undefined function WP_Query() error
- 0
- 2014-10-13
- itcgpit mark
-
예를 들어 내 카테고리 페이지에 10 개의 게시물이 있으면 무작위로 10 개를 원하지만 메타 값=프로 먼저 다음meta_value=무료입니다.확인 . 지금 임의의 작업. 전체 또는 게시물 또는 무료 만 사용.하지만이 문제를 쉽게 해결할 수있는 메타 값별 주문을 원합니다.for ex in my category page if there 10 post then i want 10 with random but meta value = pro first then meta_value = free then. ok . right now random working .with all or only post or only free. but i want order by meta value so easy for me to solve this issues
- 0
- 2014-10-13
- itcgpit mark
-
메타 쿼리 매개 변수의 작동 방식과 구성 방식을 이해하려면 [`WP_Query`] (http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters)를 방문하세요.또한 orderby 매개 변수를 확인하십시오.Please visit [`WP_Query`](http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters) to understand how the meta query parameters work and how it should be constructed. Also, check the orderby parameters
- 0
- 2014-10-13
- Pieter Goosen
-
2 대답
- 투표
-
- 2014-10-13
발사하기 전에 단 하나의 메모 만 절대 (내 강조)
<인용구>query_posts
를 사용하여 맞춤 검색어 만들기참고 : 이 기능은 플러그인이나 테마에서 사용하기위한 것이 아닙니다. 나중에 설명하는 것처럼 기본 쿼리를 변경하는 더 나은 성능 옵션이 있습니다. query_posts ()는 페이지의 기본 쿼리를 새 쿼리 인스턴스로 대체하여 페이지의 기본 쿼리를 수정하는 지나치게 단순하고 문제가있는 방법입니다. 비효율적이며 (SQL 쿼리를 다시 실행) 일부 상황에서 완전히 실패합니다 (특히 게시물 페이지 매김을 처리 할 때 자주 발생).
WP_Query
또는get_posts
를 사용하여 맞춤 검색어를 만들지 만 만pre_get_posts
로 기본 검색어를 수정할 수 없습니다. 자세한 내용은 이 게시물meta_key
에 대해 두 개의 값만 있다고 가정합니다 ( 참고 : 테스트 목적으로 자체 메타 키를 사용 했으므로이를 사용자 고유의 메타 키로 바꿔야합니다. ),즉pro
및free
와 같이 특정meta_key
가있는 게시물을 검색 할 수 있습니다. 그러면 쿼리가 다음과 같이 표시됩니다.$args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args );
하지만이 두 값보다 더 많은 값이있는 경우
meta_value
를 포함하도록 쿼리를 조정 한 다음meta_compare
매개 변수를 사용해야합니다. 조정 된 검색어는 다음과 같습니다.$args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ];
( PS! 계속하기 전에
orderby
매개 변수가 버전 4.0에서 변경되었지만이 경우에는 작동하지 않습니다.좋습니다.
가있는 무작위로 검색된 5 개의 게시물이 있습니다.pro
의meta_value
또는free
이제 정렬해야합니다. 가능한 가장 좋은 해결책은
usort
게시물meta_value
의 값에 따라meta_value
에서 반환 된 게시물 배열을 정렬합니다. 그런 다음meta_value
설정을 해제 한 다음 재정렬 된 포스트 배열로 재설정해야합니다.전체 코드는 다음과 같습니다.
<?php $args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args ); $post_metas = $the_query->posts; usort( $post_metas, function( $a, $b ){ $a = get_post_meta( $a->ID , 'packages', true ) ; $b = get_post_meta( $b->ID, 'packages', true ) ; if ( $a == $b ) { return 0; } return ( $a > $b ) ? -1 : 1; } ); unset($the_query->posts); $the_query->posts = $post_metas; if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_post_meta( get_the_ID(), 'packages', true ). '</br>' . get_the_title() . '</li>'; } echo '</ul>'; } wp_reset_postdata(); ?>
필요에 맞게 쿼리 변수를 조정하고 필요한 항목을 표시하도록 루프를 조정하기 만하면됩니다.
이것은 그것을 달성하는 유일한 방법은 아니지만,정렬 기능을functions.php로 옮기고 특별히이 사용자 정의 쿼리를 대상으로 할 수도 있습니다
Before I fire away, just one note, NEVER (my emphasis) make use of
query_posts
to create custom queriesNote: This function isn't meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query. query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).
Rather make use of
WP_Query
orget_posts
to create custom queries, but ONLY if you can't modify the main query withpre_get_posts
. For more info, check out this postAssuming that there are only two values for your
meta_key
(PLEASE NOTE: For testing purposes, I have used my own meta key, you should replace this with your own), namelypro
andfree
, you can just retrieve posts that has this specificmeta_key
. Your query will then look something like this:$args = [ 'meta_key' => 'packages', 'orderby' => 'rand', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args );
If you however have more values than just these two, then you will need to adjust your query to include the
meta_value
and then make use of themeta_compare
parameter. Your adjusted query will then become:$args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ];
(PS! Before I go on, you should note that the
orderby
parameter has changed in version 4.0, but this will not work in this instance.Great, you will now have 5 posts that was retrieved randomly which has either a
meta_value
ofpro
orfree
Now we need to sort them. The best possible solution is to make use of
usort
to sort the returned array of posts in$the_query->posts
according to the value of the postsmeta_value
. You will then need to unset$the_query->posts
and then reset it with the reordered post array.Here is the complete code:
<?php $args = [ 'meta_key' => 'packages', 'meta_value' => 'free, pro', 'orderby' => 'rand', 'meta_compare' => 'IN', 'posts_per_page' => 5, ]; $the_query = new WP_Query( $args ); $post_metas = $the_query->posts; usort( $post_metas, function( $a, $b ){ $a = get_post_meta( $a->ID , 'packages', true ) ; $b = get_post_meta( $b->ID, 'packages', true ) ; if ( $a == $b ) { return 0; } return ( $a > $b ) ? -1 : 1; } ); unset($the_query->posts); $the_query->posts = $post_metas; if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_post_meta( get_the_ID(), 'packages', true ). '</br>' . get_the_title() . '</li>'; } echo '</ul>'; } wp_reset_postdata(); ?>
You will just need to adjust the query variables to suit your needs and also adjust the loop to display what is needed
This is not the only way to achieve it though, you can also move your sorting function to your functions.php and specifically target this custom query
-
당신은 무작위로 감사뿐만 아니라 프로를 먼저 얻었습니다.하지만 이제는 모든 게시물로 표시되는 결과가 ..하지만perticuler 카테고리에만 원합니다.카테고리를 클릭하고 해당 카테고리 만 게시하고 싶습니다. 감사합니다. 또한 내 게시물 유형=목록ye i got pro first as well as random thanks . but now its display result as all post.. but i want only for perticuler category. like i click on categoryand i want post of only that category thanks also my post type = listing
- 0
- 2014-10-15
- itcgpit mark
-
인수에` 'cat'=>get_queried_object ( 'cat')-> cat_ID,`를 추가하십시오.Just add `'cat' => get_queried_object('cat')->cat_ID,` to your arguments
- 0
- 2014-10-15
- Pieter Goosen
-
감사합니다 데이터베이스에서 완벽한 출력을 얻었습니다.출력 SQL을 전달할 때.이제 html로 변경하면 에코 부분을 의미합니다.asl 그러나 지금은 무료 후 프로이지만 그 값을 임의의.?. 감사합니다. 또한 html로 변경하거나 페이지에 표시하고 싶은 내용이 필요합니다.thanks i got perfect output in database. when i pass output sql. now i just need to change in html means echo part. asl but right now its pro after free but i want that value as random .?.thanks i also need to changes in html or what i want to display in page thanks
- 0
- 2014-10-15
- itcgpit mark
-
해결되어 다행입니다.HTML 섹션의 경우이 질문의 범위를 벗어납니다.HTML 관련 내용도이 사이트에서 주제를 벗어났습니다.페이지의 html 구조에 대한 도움이 필요하면 이러한 유형의 질문에 더 적합한 stackoverflow.com에서 새 질문을해야합니다.감사합니다Glad that is solved. As for the HTML section, that is out of scope of this question. HTML related stuff is also off topic on this site. If you need help with the html structure of your page, you should ask a new question over at stackoverflow.com which is better suited for these type of questions. Thank you
- 0
- 2014-10-15
- Pieter Goosen
-
제 하루를 구 해주셔서 감사합니다.이제 올바른 데이터를 얻었습니다.이미지 제목 및 des.테마 편대에 따라.네 감사합니다 :)thanks a lot u saved my day. i got right data now just need in echo. an image title and des. with as per theme formate. ok thanks sir :)
- 0
- 2014-10-15
- itcgpit mark
-
페이지 당 게시되지 않습니다 ..이 페이지 매김이 중단됩니다 ... !!it will not take post per page.. this will break pagination in ...!!
- 0
- 2014-10-15
- itcgpit mark
-
- 2014-10-13
meta_key
대신meta_value
로 쿼리해야합니다.$query_string . '&meta_key=name_of_key_that_stores_free_or_pro&orderby=meta_value_num'
You need to query by the
meta_key
instead ofmeta_value
:$query_string . '&meta_key=name_of_key_that_stores_free_or_pro&orderby=meta_value_num'
-
답장 주셔서 감사하지만 작동하지 않습니다. query_posts ($ query_string. '&meta_key=J_listing_type & orderby=meta_value_num'); 하지만 작동하지 않습니다thanks for reply but its not working i used query_posts($query_string . '&meta_key=J_listing_type&orderby=meta_value_num'); but not working
- 0
- 2014-10-13
- itcgpit mark
-
`orderby=meta_value` 만 시도하십시오.Try just `orderby=meta_value`
- 0
- 2014-10-13
- TheDeadMedic
-
나는 이것을 시도하지만 작동하지 않습니다 :(i try this also but not working :(
- 0
- 2014-10-13
- itcgpit mark
무작위로 프로 목록을 얻지 만
pro
와 무료를 원하지만pro
목록을 먼저 사용하고meta_value
free
목록.orderby
meta_value
작동하지 않으며
cat
에 대한 쿼리 문자열 기본값입니다.orderby
와date
모두orderby
free
가 걸립니다.제안이 있으십니까?