визуальная сортировка заказа "пользовательские типы записей" для конечных пользователей
Теперь с теми пользовательскими типами сообщений и другими фрагментами контента, которые необязательно должны быть организованы в хронологическом порядке по дате, например: у клиента есть 100 футболок в качестве пользовательского типа сообщения "РУБАШКА", и он хочет установить порядок их появления.
Какой подход вы предлагаете использовать для того, чтобы позволить редактору/администратору сайта СОРТИРОВАТЬ их порядок?
6 answers
Я мог бы предложить следующее:
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 но если это тип публикации, в которой вы не хотите, чтобы пользователю приходилось беспокоиться о самостоятельной сортировке, и вы хотите использовать что-то вроде заголовка, это очень удобно.