๋ด ์ง๋ฌธ์ ๊ฐ๋จํฉ๋๋ค. WP_Query๋ฅผ ์ฌ์ฉํ์ฌ tax_query๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ฅ๋ฒ์ผ๋ก ํํฐ๋งํ๋ ์ผ๋ถ ์ฌ์ฉ์ ์ ์ ์ ํ ๊ฒ์๋ฌผ์ ๊ฒ์ํฉ๋๋ค.
์ด์ ๋ด ๋ฌธ์ ๋ ๋ถ๋ฅ๋ฒ์ผ๋ก ์ฃผ๋ฌธํ๊ณ ์ถ์ง๋ง ์น์์ ๋ฌธ์๋ฅผ ๊ฒ์ํ๊ณ ๊ฒ์ํ๋ฉด ํด๊ฒฐ์ฑ ์ ์ฐพ์ ์ ์์ต๋๋ค.
WP_Query์ orderby๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์ ์ ๋ฉํ ํ๋์กฐ์ฐจ๋ ์ฌ๋ฌ ํ๋๋ก ์ฃผ๋ฌธํ ์ ์์ง๋ง ๋ถ๋ฅ๋ฒ์ ์ง์ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ ๋ํ ํฌ์ธํฐ๊ฐ ์์ต๋๊น?
๋ค๋ค ๊ฐ์ฌ ํด์.
๋ต๋ณ
์๋์, ๋ถ๋ฅ ๋ฐฉ์์ผ๋ก ์ฃผ๋ฌธํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ํน์ ์ ํ์ ๊ด์ ์์๋ ์ค์ ๋ก ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ถ๋ฅ๋ฒ์ ์ฌ๋ฌผ์ ๊ทธ๋ฃนํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฒ์๋ฌผ์ ๋ถ๋ฅ ์ฒด๊ณ๊ฐ ์๋ค๋ ๊ฒ์ ์ค์ ๋ก ํด๋น ๋ถ๋ฅ ์ฒด๊ณ์์ ๊ฒ์๋ฌผ๊ฐ์ ๊ณต์ ๋๋ ์ฉ์ด๋ฅผ ๊ฐ๋ ๊ฒ์ ๋๋ค. ๋ถ๋ฅ ์ฒด๊ณ์ ๊ฐ ๊ฒ์๋ฌผ์ ํ ์ฉ์ด ๋ง ์ฌ์ฉ ๋ ๊ฒฝ์ฐ ๋ถ๋ฅ ์ฒด๊ณ๋ฅผ ๋ฌด์๋ฏธํ๊ฒ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฉ์ด๊ฐ ์๋๋๋ก ๊ณต์ ๋๋ค๋ฉด, ๊ทธ๊ฒ์ ์์๋๋ก ์ฃผ๋ฌธํ๋ฉด ํน๋ณํ ์ ์ฉํ ๊ฒ์ด ์์ต๋๋ค.
์ด๋ฌํ ์ํฉ์์ ์ฌ์ฉํด์ผ ํ ๊ฒ์ ํฌ์คํธ ๋ฉํ์ ๋๋ค. ๊ฒ์๋ฌผ ๋ฉํ๋ณ๋ก ์ฃผ๋ฌธํ ์ ์์ผ๋ฉฐ ๊ฐ ๊ฒ์๋ฌผ๋ง๋ค ๊ณ ์ ํฉ๋๋ค.
ํธ์ง : ์ฆ, ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ๋ถ๋ฅ๋ฒ์ผ๋ก ์ฃผ๋ฌธํ ์ ์์ง๋ง ์์ ๋์ง ์์ WP_Query์์ ์ํ ํ ์๋ ์์ต๋๋ค : http://scribu.net/wordpress/sortable-taxonomy-columns.html
๊ทธ๋ฌ๋ ์ด๋ฐ ์ข ๋ฅ์ ์์ ์ ์ํ ํด์ผํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋์์ธ ๊ตฌ์กฐ๊ฐ ์ฒ์์ ์๋ชป๋์์ต๋๋ค. ๋ถ๋ฅ์์ โ์ฉ์ดโ๋ ์ค์ โ๋ฐ์ดํฐโ๊ฐ ์๋๋๋ค. ์ฉ์ด ์์ฒด๋ ๊ณ ์ ํ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ์ค๋ช ํ๋ ํน์ ๊ทธ๋ฃน์ ๋ํ ๋ ์ด๋ธ ์ผ๋ฟ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ ์๋ฏธ์๋ ๋ฐ์ดํฐ๋ก ์ทจ๊ธํ๋ค๋ฉด ๊ทผ๋ณธ์ ์ธ ๋์์ธ ๊ฒฐํจ์ด ์์ต๋๋ค.
๋ถ๋ฅ๋ฒ์ ์ฉ์ด๋ฅผ ์ง์ ํ์ฌ ํญ๋ชฉ์ ๊ทธ๋ฃนํํฉ๋๋ค. ๊ทธ ๊ทธ๋ฃนํ๋ ๋ถ๋ฅ๋ฒ์ ์์ ์ด๋ฉฐ, ์ฉ์ด๋ ๊ทธ๋ฃนํ์ ๋ํ ์์ ์ผ๊ตด์ ๋๋ค. ๊ฒ์๋ฌผ์ ํ ๋น ํ ์๋ฏธ์๋ ๋ฉํ ๋ฐ์ดํฐ๊ฐ์๋ ๊ฒฝ์ฐ ๋์ ๊ฒ์๋ฌผ ๋ฉํ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. post meta๋ ํค์ ๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ฌธํ ์ ์์ต๋๋ค . ๋ถ๋ฅ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ํค๋ง ์ ์ฅํ๋ฉฐ ํด๋น ๊ฐ์ ํด๋น ์ฉ์ด๋ณ๋ก ๊ทธ๋ฃนํ ๋ ๊ฒ์๋ฌผ์ ๋๋ค.
์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฅ๊ธฐ์ ์ผ๋ก ํจ์ฌ ์ฌ์์ง๋๋ค. ๋๋ ๋ถ๋ฅ๋ฒ์ผ๋ก ์ด์ํ ์ผ์ ํ ์ ์๋ค๊ณ ๋งํ์ง๋ ์์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก ์๋ชป ์ฌ์ฉํ์ฌ ์ค์ค๋ก๋ฅผ ํ๋ค๊ฒ ๋ง๋ค๊ณ ์์ต๋๋ค.
๋ต๋ณ
์ด ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ํ์ฉ๋์ง ์์ต๋๋ค. ์ธ๊ธ์ผ๋ก ์ฃผ๋ฌธํ๋ ๊ฒ์ด โ์ด์น๊ฐ ์๋คโ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ ๋น๋ ผ๋ฆฌ์ ์ ๋๋ค. ๊ทธ๊ฐ ํ ๋๋ต์ ์ดํด๊ฐ๋์ง ์์ต๋๋ค.
๋ฉ๋ด ๊ฒ์๋ฌผ ์ ํ์ ๊ณ ๋ คํ์ญ์์ค. ๊ทธ๋ฐ ๋ค์ โFood Categoriesโ์ ๊ด์ธ๊ฐ ์์ต๋๋ค. ์ํ ์นดํ ๊ณ ๋ฆฌ ์ธ๊ธ์๋ โ์กฐ์โ, โ์ ์ฌโ๋ฐ โ์ ๋ โ์ด๋ผ๋ ์ฉ์ด๊ฐ ์์ต๋๋ค. tax_query ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ ์ถํ๋ฉด ๋ชจ๋ ์ฉ์ด๊ฐ ํฌํจ ๋ ๊ฒฐ๊ณผ ์งํฉ์ด ์์ฑ๋์ง๋ง ๊ฒ์ ๋ ์ง์์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
์ฉ์ด์ ๊ด๋ จํ์ฌ ์ด๋ค ์ค ์ฌ๋ฐ๋ฅธ ์์๋ฅผ ์ป์ ๋ค์ ๊ฒ์๋ฌผ์ ๋ค์ํ ๋ฒ์ฃผ๋ก ๋ถ๋ฆฌํ์ฌ ํ๋ฐํธ ์๋์ ์ ์ ํ๊ฒ ํ์ํ๋ ค๋ฉด ๊ฒฐ๊ณผ ์งํฉ์ ๋ฐ๋ณต ํ ๋ค์ ๊ฐ ๊ฒ์๋ฌผ์ ์ฟผ๋ฆฌํด์ผํฉ๋๋ค. ์ฉ์ด๋ฅผ ์ฐพ๊ณ ํ์ฌ ์ฉ์ด์ ๋น๊ตํ๊ณ ๋ฐฐ์ด๋ก ํํฐ๋ง ํ ํ ๊ณ์ ์งํํ๋ ค๋ฉด ๊ฒฐ๊ณผ ์งํฉ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ์๋ฅผ ์ํด ์ ์ด๋ ์ด๋ฅผ ๋ค์ ๋ฐ๋ณตํด์ผํฉ๋๋ค. ์ด๊ฒ์ ์์ฐ์ ์ด์ง ์์ต๋๋ค.
WP์ โpost__inโ์ต์ ๊ณผ ๊ฐ์ด โtax__inโorderby ์ต์ ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์์ ์ด๋ฆฌ์์ ํ๋ก์ธ์ค๋ฅผ ์ํํด์ผํฉ๋๋ค. orderby ๋ฉ์๋๋ฅผ ์กฐ์ ํ๊ณ ๊ฐ๊ฐ ์ฉ์ด๋ฅผ ๊ฒฐ๊ณผ ์ธํธ์ ์ถ๊ฐํ๊ธฐ ์ํด โposts_orderbyโํํฐ ๋ฐ โposts_joinโํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉ์ ์ ์ํ์ญ์์ค. ๋๋ ํด๋น ์ฉ์ด์ ๊ด๋ จํ์ฌ html ์น์ ๋ด์์ ํํฐ๋ง ํ ๊ฐ ์ฉ์ด์ ๋ํด ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผํฉ๋๋ค.
๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ธ ๊ฐ์ ๋ณ๋ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. WP API๋ ์ธ๊ธ ๋ณ ์ฃผ๋ฌธ ๋๋ ๋ชจ๋ ์ ํ์ ์ธ ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฒ๋ฆฌํด์ผํฉ๋๋ค. ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฟผ๋ฆฌ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ ๋ง์ ์ฌ๋๋ค์ด ๋์ผํ ์กฐ๊ฑด์ผ๋ก ์ฃผ๋ฌธํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๋ต๋ณ
์,ํ์ง๋ง ๊ฝค ๊ด๋ จ์ด ์์ต๋๋ค โฆ
ํ ๋ง์์ functions.php์ ์ถ๊ฐํ์ญ์์ค.
function orderby_tax_clauses( $clauses, $wp_query ) {
global $wpdb;
$taxonomies = get_taxonomies();
foreach ($taxonomies as $taxonomy) {
if ( isset( $wp_query->query['orderby'] ) && $taxonomy == $wp_query->query['orderby'] ) {
$clauses['join'] .=<<<SQL
LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
SQL;
$clauses['where'] .= " AND (taxonomy = '{$taxonomy}' OR taxonomy IS NULL)";
$clauses['groupby'] = "object_id";
$clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";
$clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC';
}
}
return $clauses;
}
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
์ด๊ฒ์ ๋ด๊ฐ ์ฐพ์ ๊ฒ๋ค๊ณผ ๋ด๊ฐ ํ ์ผ๋ค๋ก ํ๋์ผ์ํ์ธ์ ๋๋ค. ์ค๋ช ํ๊ธฐ๋ ์ด๋ ต์ง๋ง ๊ฒฐ๋ก ์ ์ด๊ฒ์ ๋๋ค.? orderby = (taxonomy query var) & order = ASC (๋๋ DESC)๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค.
๋ต๋ณ
๋๋ ์ฌ๊ธฐ์ ๊ฒ์์ ๋ฆ๊ฒ ์ฌ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ํ๋ ๋ ๊ฐ๋จํ WordPressy ๋ฐฉ๋ฒ์ด์๋ค.
ํ์์ฒ๋ผ ์ธ๊ธ ๋ฌธ์๋ฅผ ์์ฑํ์ญ์์ค.
$tax_query = array();
$tax_query['relation']="OR";
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $cat_terms,
);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts ๋๋ WP_Query์ ๋ํ ์ธ์ ์ค์
$args = array(
'post_type'=>'post',
'posts_per_page'=>12,
'paged'=>$paged,
'tax_query' => $tax_query,
);
query_posts / WP_Query ํธ์ถ์ํ๊ธฐ ์ ์ orderby ํํฐ์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ ์ํ์ญ์์ค.
add_filter('posts_orderby', 'edit_posts_orderby');
function edit_posts_orderby($orderby_statement) {
$orderby_statement = " term_taxonomy_id ASC ";
return $orderby_statement;
}
query_posts($args);
remove_filter('posts_orderby', 'edit_posts_orderby');
๋์ค์ ํํฐ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค โฆ
์ด๊ฒ์ tax_query๊ฐ ๋น์ ์ ์ํด ์กฐ์ธ ๋ฑ์ ์์ฑํ๋ b / c์์ ์๋ํฉ๋๋ค. ์กฐ์ธ์์ ํ๋ ์ค ํ๋๋ฅผ ์์๋ก ์ง์ ํ๋ฉด๋ฉ๋๋ค.
๋ต๋ณ
๊ธ์, ์นดํ ๊ณ ๋ฆฌ / ํ์ ๋ ธ๋ฏธ๋ณ๋ก ์ฌ์ฉ์ ์ ์ ๊ฒ์๋ฌผ ์ ํ์ ์ ๋ ฌ ํ ๊ฒฝํ์ ๊ณต๊ฐํ๊ณ ์ถ์ต๋๋ค.
์ธํฐ๋ท
- WordPress์์ ์คํ๋๋ ์ฌํ์ฌ ์น ์ฌ์ดํธ
- โrutaโ๋ผ๋ ๋ง์ถค ๊ฒ์๋ฌผ ์ ํ์ ๊ธฐ๋ณธ ์ฝํ ์ธ
- ์ด ๊ตฌ์กฐ์ ๋ถ๋ฅ ์ฒด๊ณ ์ฌํ ์ ํ> ๋๋ฅ> ๊ตญ๊ฐ
๊ฒฝ์ฐ
๋ณด๊ด ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก ํ์ด์ง์์ ๊ณ ๊ฐ์ ๊ฒ์๋ฌผ์ ์ ๋ ฌํ๊ธฐ๋ฅผ ์ํ์ต๋๋ค.
- ๊ฐ ๋๋ฅ์ ๊ฒฝ๋ก ์์ ๋ฐ๋ผ ์์๊ฐ ์ง์ ๋ ๋๋ฅ.
- ์ํ๋ฒณ์์ผ๋ก ์ฃผ๋ฌธ ๋ ๊ตญ๊ฐ์ ๋๋ค.
๋จ๊ณ
๋จผ์ ์์ ๋์ง ์์ ์์นด์ด๋ธ ํ์ด์ง ์ฟผ๋ฆฌ์์ ๋ค์๊ณผ ๊ฐ์ ์์ฒญ์ ๋ฐ์์ต๋๋ค.
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,25,26,28,29,31,32,33,35,38,95,101,102,193) )
AND wp_posts.post_type IN ('ruta', 'nav_menu_item')
AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 45
AND wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC LIMIT 0, 20
๋์งธ , Sequel Pro์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด SQL ์ฝ๋๋ฅผ ํธ์งํ์ฌ ๋ด ์๊ตฌ๋ฅผ ์ถฉ์กฑํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ ๊ฐ์ง๊ณ ๋์จ๋ค.
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID, tt1.parent AS pare,
(
SELECT COUNT(*)
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy AS tt1 ON ( tt1.term_taxonomy_id = wp_term_relationships.term_taxonomy_id )
INNER JOIN wp_term_taxonomy AS tt2 ON ( tt2.term_taxonomy_id = tt1.term_taxonomy_id )
WHERE 1=1
AND tt1.parent = pare
) AS Total
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy AS tt1 ON ( tt1.term_taxonomy_id = wp_term_relationships.term_taxonomy_id )
INNER JOIN wp_terms ON ( tt1.term_id = wp_terms.term_id )
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,25,26,28,29,31,32,33,35,38,95,101,102,193) )
AND wp_posts.post_type IN ('ruta', 'nav_menu_item')
AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 45
AND wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY
total DESC,
wp_terms.name
์ ์งธ , posts_fields, posts_join ๋ฐ posts_orderby์ ์ธ ๊ฐ์ง ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ functions.php ํ์ผ์ ์ฟผ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ์ต๋๋ค.
functions.php์ ์ฝ๋ :
function xc_query_fields( $fields ) {
$fields = "wp_posts.ID, wp_posts.post_title, wp_terms.name, tt1.parent AS pare,
(
SELECT COUNT(*)
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy AS tt1 ON ( tt1.term_taxonomy_id = wp_term_relationships.term_taxonomy_id )
INNER JOIN wp_term_taxonomy AS tt2 ON ( tt2.term_taxonomy_id = tt1.term_taxonomy_id )
WHERE 1=1
AND tt1.parent = pare
)
AS Total";
return $fields;
}
function xc_query_joins( $join ) {
$join .= "INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy AS tt1 ON ( tt1.term_taxonomy_id = wp_term_relationships.term_taxonomy_id )
INNER JOIN wp_terms ON ( tt1.term_id = wp_terms.term_id )";
return $join;
}
function xc_query_orderby( $join ) {
$join = "total DESC, wp_terms.name ";
return $join;
}
๋ง์ง๋ง์ผ๋ก ์ผ๋ถ ์กฐ๊ฑด์ ๋ฐ๋ผ pre_get_post ํํฌ์์ ํํฐ๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ต๋๋ค.
function filtra_queries( $query )
{
if ( is_archive() && $query->is_main_query() && !is_admin() ) {
$rutes = array('viajes-privados', 'asia', 'africa', 'oceania', 'america', 'oriente-proximo');
if ( in_array( $query->get('category_name'), $rutes ) )
{
add_filter( 'posts_fields', 'xc_query_fields' );
add_filter( 'posts_join', 'xc_query_joins' );
add_filter( 'posts_orderby', 'xc_query_orderby' );
}// end if in_array
}// end if is_archive
}
add_filter('pre_get_posts', 'filtra_queries');
์ด๊ฒ์ด ๋๊ตฐ๊ฐ๋ฅผ ๋์ธ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ต๋ณ
๋๋ ๋งค์ฐ ๋น์ทํ ๋ฌธ์ ๋ฅผ ๊ฒช์๋ค. ์ปค์คํ ๋ถ๋ฅ๋ฒ (๋ฌธ์ )์ ๋ฐ๋ผ ์ปค์คํ ํฌ์คํธ ํ์ ์์นด์ด๋ธ (์ก์ง ๊ธฐ์ฌ)๋ฅผ ์ฃผ๋ฌธํ๊ณ ์ถ๋ค. ๋๋ ๋ด ์ฌ์ดํธ์์ ์ง์ SQL ์ฟผ๋ฆฌ๋ฅผ ์ํํ์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ๋ต๋ณ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ ๊ทผ ๋ฐฉ์์ ๋ค์ ์๊ฐํด์ผํฉ๋๋ค.
๋ฌธ์ :
1) WordPress์์๋ ์ง๋ฅ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ถ๋ฅ๋ฒ์ ์ฃผ๋ฌธํ ์ ์์ต๋๋ค.
2) WordPress๋ orderby
ํฌ์คํธ ์ ํ WP_Query์์ ๋ถ๋ฅ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค (Otto ๊ฐ ์ธ๊ธ ํ๋๋ก).
์๋ฃจ์ :
1) ๋ถ๋ฅ๋ฒ ๋ถ๋ฅ๋ ํ์ฌ Custom Taxonomy Order NE ํ๋ฌ๊ทธ์ธ์์ ๊ฐ์ฅ ์ ์ํ๋ฉ๋๋ค . WYSIWYG๋ฅผ ํตํด ๋ถ๋ฅ๋ฒ์ ์ฃผ๋ฌธํ ์ ์์ต๋๋ค.์ด wp-admin
๋ฐฉ๋ฒ์ ์๋์ง๋ง ๋ ๋์ ๊ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
ํ๋ฌ๊ทธ์ธ์ ์ค์ ํ๋ฉด ์ฌ๊ธฐ์์ ํ ๊ฒ๊ณผ ๋น์ทํ ๊ฒ์ ์ป์ ์ ์์ต๋๋ค. ์ต์
์ ๊ธฐ๋กํด ๋ก๋๋ค Auto-sort Queries of this Taxonomy
-์ดํ๋ ์ค์ Custom Order as Defined Above
; ์ด๊ฒ์ ๋น์ ์๊ฒ ๋น์ ์ด ํ์๋กํ๋ ์ฃผ๋ฌธ์ ์ป์ต๋๋ค. ์คํฌ๋ฆฐ ์ท :
2) ๋ถ๋ฅ ๋ ๋ถ๋ฅ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ฐ ์ฉ์ด๋ฅผ ์คํํ๋ ์ผ๋ จ์ WP_Query ํธ์ถ์ ์์ฑํ์ฌ ๋ถ๋ฅ๋ฒ์ผ๋ก ์ ๋ ฌ ๋ ์์นด์ด๋ธ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ฌ์ฉ get_terms()
ํ๋ ๋ชจ๋ ์ธ๊ธ ์ฉ์ด์ ๋ฐฐ์ด์ ๋ง๋ค๋ ค๋ฉด ๋ค์์ ์คํํ์ฌ foreach
๊ฐ ๊ธฐ๊ฐ ๋์. ์ด๋ ๊ฒํ๋ฉด WP_Query
๊ฐ ์ฉ์ด ํญ๋ชฉ์ ๋ํด ํน์ ์ฉ์ด์ ๋ํ ๋ชจ๋ ๊ฒ์๋ฌผ์ ๋ฐํํ๊ณ ๋ถ๋ฅ ์ฉ์ด๋ก ์ ๋ ฌ ๋ ์์นด์ด๋ธ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ง๋ญ๋๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒํ๋ ์ฝ๋ :
// Get your terms and put them into an array
$issue_terms = get_terms([
'taxonomy' => 'issues',
'hide_empty' => false,
]);
// Run foreach over each term to setup query and display for posts
foreach ($issue_terms as $issue_term) {
$the_query = new WP_Query( array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'issues',
'field' => 'slug',
'terms' => array( $issue_term->slug ),
'operator' => 'IN'
)
)
) );
// Run loop over each query
while($the_query->have_posts()) :
$the_query->the_post();
// YOUR TEMPLATE OUTPUT FOR EACH POST
endwhile;
}
์ด ์ฌ์ดํธ ๊ด๋ จ ์ฝ๊ธฐ :
๋ชจ๋ ๊ฒ์๋ฌผ์ ์ฌ์ฉ์ ์ ์ ๋ถ๋ฅ๋ก ๊ทธ๋ฃนํํ์ฌ ์ฌ์ฉ์ ์ ์ ๊ฒ์๋ฌผ ์ ํ์ผ๋ก ํ์
๋ต๋ณ
์ฌ๊ธฐ์ ๋ชจ๋ ์๋ฃจ์ ์ด ์ ๊ทธ๋ ๊ฒ ๋ง์ด ๊ณผ์ ์ฒ๋ฆฌํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ข์, ๊ทธ๊ฒ์ 10 ๋ ์ ์ด์ง๋ง ํ์ฌ ๋ค์ ์ฝ๋๋ฅผ ์คํ ์ค์ด๋ฉฐ ์๋ํฉ๋๋ค.
<?php // Default
$wheels_args = array(
'post_type' => 'wheels',
'posts_per_page' => '96',
'orderby' => 'taxonomy, name', // Just enter 2 parameters here, seprated by comma
'order'=>'ASC'
);
$loop = new WP_Query($wheels_args);
?>
์ด๋ ๊ฒํ๋ฉด ๋จผ์ CPT ๋ถ๋ฅ ์ฒด๊ณ๊ฐ ์ฌ์ ์์ผ๋ก ๋ถ๋ฅ๋๋ฉฐ ๋ถ๋ฅ ์ฒด๊ณ ๊ทธ๋ฃน ๋ด์์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.