визуально сортировать порядок «пользовательских типов сообщений» для конечных пользователей


9

Теперь с теми пользовательскими типами записей и другими частями контента, которые не обязательно должны быть организованы в хронологическом порядке по дате, например: у клиента есть 100 футболок в качестве пользовательского типа сообщения "РУБАШКА", и он хочет установить порядок их появления ,

Какой подход вы предлагаете, чтобы редактор / администратор сайта сортировал их заказ?


Можете ли вы привести примеры того, по каким вещам он хотел бы их отсортировать? Некоторые ответы могут быть лучше для некоторых вещей, чем для других.
MikeSchinkel

Майк: возможно, футболки, где он хотел бы быть первым, или вообще любой пост, который пользователь вставил не в правильном порядке.
Амит

Для тех, кто все еще ищет этот пост, есть несколько хороших плагинов WP, которые решают эту проблему. Я только что реализовал это: wordpress.org/extend/plugins/post-types-order

Ответы:



3

Вы можете отфильтровать о таксономии

        // 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 . '&nbsp;&nbsp;(' . (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' ) );

Я пытался реализовать его, но он не работает для меня ... Есть ли какие-либо предыдущие шаги, которые я должен предпринять? объявить некоторую таксономию? Спасибо!
Амит

это пример моего класса для пользовательского типа сообщения; Вы должны изменить массив (и это и т. д.), чтобы не использовать его в классе, а константа FB_CPT_TAXONOMY_TYPE_1 - это моя первая настраиваемая таксономия, и поэтому константа FB_CPT_POST_TYPE_1 - это мой первый настраиваемый тип
записей

пожалуйста, посмотрите этот ответ ( wordpress.stackexchange.com/questions/45/… ), аналогично
bueltge

Я понимаю ... Я, вероятно, не очень хорошо объяснил себя - я имел в виду, что пользователь мог задать порядок сортировки, и этот новый порядок должен быть отражен на внешнем интерфейсе. То, что я на самом деле ищу, это что-то вроде нового меню, но для сообщений / пользовательских сообщений типа.
Амит

0

Я бы посмотрел на экраны администратора генератора меню. Поскольку меню - это просто пользовательский тип постов, я уверен, что некоторые из этих вещей могут быть использованы для вдохновения.


это совсем не плохая идея, но есть ли в меню бесконечное количество элементов (более 100)? Разве не было бы немного глупо иметь элемент записи для каждого сообщения?
Амит

0

Чтобы иметь действительно произвольный порядок сортировки (полностью не связанный с любым полем публикации), вам нужно создать поле «значение сортировки» (или «вес») и ввести числовое значение для каждого элемента в этом поле. Вы можете сортировать по этому полю.


0

Если все, что вы хотите сделать, это установить позицию для каждой «рубашки», то почему бы просто не использовать порядок меню, тогда вы можете отсортировать по menu_order в вашем WP_Query. Вам, вероятно, придется создать мета-блок, который устанавливает menu_orderсвойство сообщения. Тогда в вашем WP_Query:

$shirts = new WP_Query( 'post_type=shirt&orderby=menu_order&order=ASC' );

Это будет работать аналогично тому, как вы упорядочиваете изображения на Media Uploadвкладке «Галерея» для установки порядка меню страницы.

Или я что-то недопонимаю?


Вы правильно поняли, но подумайте о пользователе .. ему нужно вручную переходить к каждому сообщению и устанавливать число в мета-поле ... не очень дружелюбно ..
Amit

Включение этого в Quick Edit сделало бы это намного проще, но да, это может занять много времени.
Джо Хойл

0

Что я предпочитаю делать, если я создаю тип записи в плагине или в коде, так это также добавить этот код, который позволяет вам установить порядок по умолчанию для внешнего и внутреннего интерфейса, а также установить переменную 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, но если это тип поста, где вы не хотите, чтобы пользователь беспокоился о сортировке, и вы хотите использовать что-то вроде заголовка это очень удобно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.