제공된 답변이 부족하다고 상상할 수 있듯이 솔루션은 사소한 것이 아닙니다. 내가 한 것은 " movie
" 의 사용자 정의 게시물 유형 과 " 장르 " 의 사용자 정의 필드 키 를 가정하는 다소 독립적 인 예제를 작성하는 것입니다 .
면책 조항 : 이것은 WP3.0에서 작동하지만 이전 버전에서 작동하는지 확신 할 수 없습니다.
기본적으로 작동하려면 두 개의 후크를 연결하고 명확하고 유용하게 만들려면 두 개의 후크를 연결해야합니다.
첫 번째 후크는 ' restrict_manage_posts
' 이며 ' 일괄 작업 '및 ' 날짜 표시 '필터 <select>
가있는 게시물 목록 위의 영역에서 HTML을 내보낼 수 있습니다 . 제공된 코드 는이 화면 스 니펫에 표시된대로 " 정렬 기준 : "기능을 생성합니다 .
(출처 : mikeschinkel.com )
포스트 코드에 대한 모든 meta_keys 목록을 제공하는 WordPress API 함수가 없기 때문에 코드는 직접 SQL을 사용합니다 (나중에 trac 티켓 처럼 들립니다 ...) 어쨌든 여기 코드가 있습니다. 게시물 유형을 가져 $_GET
와서 유효한 게시물 유형 post_type_exists()
뿐만 아니라 게시물 유형인지 확인합니다 movie
(두 가지 검사가 과도하지만 과도하지 않으려면 어떻게 해야하는지 보여줍니다. 마지막으로 sortby
URL 매개 변수는 WordPress의 다른 항목과 충돌하지 않으므로 URL 매개 변수를 사용합니다 .
add_action('restrict_manage_posts','restrict_manage_movie_sort_by_genre');
function restrict_manage_movie_sort_by_genre() {
if (isset($_GET['post_type'])) {
$post_type = $_GET['post_type'];
if (post_type_exists($post_type) && $post_type=='movie') {
global $wpdb;
$sql=<<<SQL
SELECT pm.meta_key FROM {$wpdb->postmeta} pm
INNER JOIN {$wpdb->posts} p ON p.ID=pm.post_id
WHERE p.post_type='movie' AND pm.meta_key='Genre'
GROUP BY pm.meta_key
ORDER BY pm.meta_key
SQL;
$results = $wpdb->get_results($sql);
$html = array();
$html[] = "<select id=\"sortby\" name=\"sortby\">";
$html[] = "<option value=\"None\">No Sort</option>";
$this_sort = $_GET['sortby'];
foreach($results as $meta_key) {
$default = ($this_sort==$meta_key->meta_key ? ' selected="selected"' : '');
$value = esc_attr($meta_key->meta_key);
$html[] = "<option value=\"{$meta_key->meta_key}\"$default>{$value}</option>";
}
$html[] = "</select>";
echo "Sort by: " . implode("\n",$html);
}
}
}
두 번째로 필요한 단계는 parse_query
WordPress가 쿼리를 실행할 쿼리를 결정한 후 쿼리를 실행하기 전에 호출 되는 후크 를 사용하는 것입니다. 여기에서 우리는의 값을 설정할 수 orderby
및 meta_key
쿼리의에서 query_var
하는 배열 분과에 설명 에 orderby
대한 매개 변수를 query_posts()
. 우리는 다음을 확인하기 위해 테스트합니다.
- 우리는 관리자 (
is_admin()
)에 있습니다.
- 관리자 (
$pagenow=='edit.php'
)의 게시물을 나열하는 페이지 에 있습니다.
- 이 페이지는
post_type
URL 매개 변수와 동일한 으로 호출 movie
되었으며
- 또한 페이지가
sortby
URL 매개 변수와 함께 호출되었으며 ' None ' 값이 전달되지 않았습니다.
모든 테스트를 통과하면 우리는 다음 설정 query_vars
(문서화 된 여기 )에 meta_value
우리의 sortby
'가치 장르 '
add_filter( 'parse_query', 'sort_movie_by_meta_value' );
function sort_movie_by_meta_value($query) {
global $pagenow;
if (is_admin() && $pagenow=='edit.php' &&
isset($_GET['post_type']) && $_GET['post_type']=='movie' &&
isset($_GET['sortby']) && $_GET['sortby'] !='None') {
$query->query_vars['orderby'] = 'meta_value';
$query->query_vars['meta_key'] = $_GET['sortby'];
}
}
그리고 이것이 당신이해야 할 전부입니다. " posts_order
"또는 " wp
"후크가 필요하지 않습니다! 물론 실제로 더 많은 일을해야합니다. 게시물을 나열하는 일부 열을 페이지에 추가해야 실제로 정렬 기준으로 값을 정렬 할 수 있습니다. 그렇지 않으면 사용자가 혼동 될 수 있습니다. manage_{$post_type}_posts_columns
이 경우 후크를 추가하십시오 manage_movie_posts_columns
. 이 후크는 기본 열 배열을 전달 받았으므로 간단하게 두 표준 열로 바꿨습니다. 확인란 ( cb
) 및 게시물 이름 ( title
). posts_columns
a print_r()
로 검사 하여 기본적으로 사용 가능한 다른 항목을 확인할 수 있습니다.
URL 매개 변수가 있고 그렇지 않은 경우 에 대해 " 정렬 기준 : " 을 추가하기로 결정했습니다 .sortby
None
add_action('manage_movie_posts_columns', 'manage_movie_posts_columns');
function manage_movie_posts_columns($posts_columns) {
$posts_columns = array(
'cb' => $posts_columns['cb'],
'title' => 'Movie Name',
);
if (isset($_GET['sortby']) && $_GET['sortby'] !='None')
$posts_columns['meta_value'] = 'Sorted By';
return $posts_columns;
}
마지막으로 우리는 사용 manage_pages_custom_column
이 적절한 포스트 형식의 게시물과 아마 중복에 대한 테스트와 함께 할 때 실제 값을 표시 훅을 is_admin()
하고 $pagenow=='edit.php'
. 있을 때 sortby
URL 매개 변수를 우리는 우리의 목록에 표시 그것으로 분류되고있는 사용자 정의 필드 값을 추출합니다. 다음은 그 모습입니다 (이는 테스트 데이터이므로 영화 분류에 대한 땅콩 갤러리의 의견은 없습니다! :) :
(출처 : mikeschinkel.com )
그리고 여기 코드가 있습니다 :
add_action('manage_pages_custom_column', 'manage_movie_pages_custom_column',10,2);
function manage_movie_pages_custom_column($column_name,$post_id) {
global $pagenow;
$post = get_post($post_id);
if ($post->post_type=='movie' && is_admin() && $pagenow=='edit.php') {
switch ($column_name) {
case 'meta_value':
if (isset($_GET['sortby']) && $_GET['sortby'] !='None') {
echo get_post_meta($post_id,$_GET['sortby'],true);
}
break;
}
}
}
이는 키의 첫 번째 " 장르 " 만 movie
, 즉 주어진 키에 대해 여러 값이있는 경우 첫 번째 meta_value 만 선택합니다 . 그러나 다시 어떻게 작동하는지 잘 모르겠습니다!
그리고이 코드를 어디에 두어야할지 잘 모르는 사람들은 플러그인에 넣거나 초보자 functions.php
를 위해 현재 테마 의 파일에 넣을 수 있습니다.
이것이 도움이되는 방법.