визуально сортировать порядок «пользовательских типов сообщений» для конечных пользователей
Теперь с этими пользовательскими типами сообщений и другими битами содержимого, которые не обязательно должны быть организованы в хронологическом порядке по дате, для Например: у клиента есть 100 футболок как пользовательский тип сообщения «SHIRT» и он хочет установить порядок внешнего вида.
Какой подход вы предлагаете сделать для того, чтобы позволить редактору /администратору сайт СОРТИРОВАТЬ их заказ?
6 ответов
Я мог бы предложить следующее:
http://drewgourley.com/order-up-custom-ordering -для-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 распознал это изменение и вставил стрелку вверх, если вы сортируете по названию, дате или чему-либо еще, что вы показываете в таблице admin.
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, но если это тип сообщения, в котором вы не хотите, чтобы пользователю приходилось беспокоиться о сортировке себя и вы хотите использовать что-то вроде названия, это очень удобно.