Теперь с теми пользовательскими типами записей и другими частями контента, которые не обязательно должны быть организованы в хронологическом порядке по дате, например: у клиента есть 100 футболок в качестве пользовательского типа сообщения "РУБАШКА", и он хочет установить порядок их появления ,.
Какой подход вы предлагаете, чтобы редактор/администратор сайта сортировал их заказ?
Я мог бы предложить это:
http://drewgourley.com/order-up-custom-ordering-for-wordpress/
вы можете отфильтровать о таксономии
// to filter by category
function restrict_manage_posts() {
global $typenow;
if ( FB_CPT_POST_TYPE_1 == $typenow ) {
$args = array('orderby' => 'count', 'hide_empty' => true);
echo $this->get_taxonomy_html_select(FB_CPT_TAXONOMY_TYPE_1, $args);
}
}
function get_taxonomy_html_select($taxonomy_name, $args) {
$taxonomy = get_taxonomy($taxonomy_name);
$terms = get_terms($taxonomy_name, $args);
$label = __( 'Show all ' . $taxonomy->label, FB_CPT_TEXTDOMAIN );
$html = array();
$html[] = '<select style="min-width:155px;" id="' . $taxonomy_name . '" name="' . $taxonomy_name . '" class="postform">';
$html[] = '<option value="0">' . $label . '</option>';
if ( isset($_GET[$taxonomy_name]) )
$this_term = $_GET[$taxonomy_name];
else
$this_term = '';
foreach($terms as $term) {
$default = ( $this_term == $term->term_id ? ' selected="selected"' : '' );
$value = esc_attr($term->name);
$value = $value . ' (' . (int)$term->count . ')';
$html[] = "\t" . '<option value="' . $term->term_id . '"' . $default . '>' . $value . '</option>';
}
$html[] = '</select>' . "\n";
return implode( "\n", $html );
}
function request($request) {
global $pagenow;
if ( is_admin() && 'edit.php' == $pagenow && isset( $request[FB_CPT_TAXONOMY_TYPE_1] ) && FB_CPT_POST_TYPE_1 == $request[FB_CPT_TAXONOMY_TYPE_1] ) {
$request['taxonomy'] = FB_CPT_TAXONOMY_TYPE_1;
$request['term'] = get_term($request[FB_CPT_TAXONOMY_TYPE_1], FB_CPT_TAXONOMY_TYPE_1)->name;
unset($request['name']);
}
return $request;
}
использовать это крючки
// to filter custom post type per custom taxonomy
add_action( 'restrict_manage_posts', array( &$this, 'restrict_manage_posts') );
add_action( 'request', array( &$this, 'request' ) );
Я бы посмотрел на экраны администратора генератора меню. Поскольку меню - это просто пользовательский тип постов, я уверен, что некоторые из этих вещей могут быть использованы для вдохновения.
Если все, что вы хотите сделать, это установить позицию для каждой "рубашки", то почему бы просто не использовать порядок меню, тогда вы можете отсортировать по menu_order в вашем WP_Query. Возможно, вам придется создать мета-блок, который устанавливает свойство поста menu_order
. Тогда в вашем WP_Query
:
$shirts = new WP_Query( 'post_type=shirt&orderby=menu_order&order=ASC' );
Это будет работать аналогично тому, как вы упорядочиваете изображения на вкладке Галерея Media Upload
, для установки порядка меню страницы.
Или я что-то недопонимаю?
Что я предпочитаю делать, если я создаю тип записи в плагине или в коде, так это также добавить этот код, который позволяет вам установить порядок по умолчанию для внешнего и внутреннего интерфейса, а также установить переменную GET в admin так что администратор WordPress распознает изменение и поместит стрелку вверх, если вы сортируете по заголовку, дате или чему-либо еще, что вы показываете в таблице администратора.
add_filter( 'pre_get_posts' , 'my_cpt_order' ); // Runs before the posts are fetched
function my_cpt_order( $query ) {
// Check query and alter only the query needed
//echo '<PRE>'; print_r($query); echo '</PRE>';
if ($query->query['post_type'] == 'cpt' && !isset($query->query['orderby'])) {
$query->set( 'orderby' , 'title' );
$query->set( 'order' , 'asc' );
//get the arrow to show up over title in admin
if (is_admin()) {
$_GET['orderby'] = 'title';
$_GET['order'] = 'asc';
}
} //if
} //my_cpt_order
Так как menu_order является значением по умолчанию, это не нужно, если вы сортируете пользовательский тип поста по menu_order, но если это тип поста, где вы не хотите, чтобы пользователь беспокоился о сортировке, и вы хотите использовать что-то вроде заголовка это очень удобно.
Чтобы иметь действительно произвольный порядок сортировки (полностью не связанный с любым полем публикации), вам нужно создать поле "значение сортировки" (или "вес") и ввести числовое значение для каждого элемента в этом поле. Вы можете сортировать по этому полю.