Как заказать категории в WordPress? - PullRequest
10 голосов
/ 06 февраля 2009

Я использую wp_list_categories(), чтобы получить список всех категорий и создать панель навигации. Есть ли способ упорядочить эти категории в определенном порядке, отличном от алфавитного порядка.

Например: Connect, новости и просмотры, вопросы и ответы, Hello Startup, запуск 101 ...

Ответы [ 6 ]

6 голосов
/ 10 ноября 2011

Если вы не используете поле «Описание» категорий, упорядочение также можно выполнить, введя номер в каждом поле «Описание», а затем используйте Javascript / jQuery для заказа на основе этой нумерации.

Функция wp_list_categories имеет аргумент use_desc_for_title , который можно установить в значение true:

wp_list_categories('use_desc_for_title=1');

В описании категории теперь указан атрибут заголовка тегов <a> в результирующем html.

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

 <ul id="category_list">
    <li><a href="#" title="3">Category C</a></li>
    <li><a href="#" title="1">Category A</a></li>
    <li><a href="#" title="2">Category B</a></li>  
 </ul>

Теперь вы можете отсортировать список, например, с помощью jQuery для события document.ready. Если вы используете подкатегории иерархически, используйте рекурсивную функцию, подобную этой:

$( document ).ready( 
    function() {
       sort_list_recursive( $( '#category_list' ) );
    }
);

function sort_list_recursive( parent ) {
    var lst = parent.children( 'li' );
    lst.sort(
        function( a, b ) {
            var _a = a.getElementsByTagName( 'a' )[0].title;
            var _b = b.getElementsByTagName( 'a' )[0].title;
            return _a > _b ? 1 : -1;
        }
    ).appendTo( parent );
    lst.each( function() {
        $( this ).children( 'ul' ).each( function() {
            sort_list_recursive( $( this ) );
        });
    });
}

нотабене

  • Не используйте 0 (ноль) в поле описания, оно будет проигнорировано и установлено в нуль
  • После сортировки вы, возможно, захотите избавиться от атрибутов заголовка, для которых заданы числа, это легко сделать с помощью jQuery.
4 голосов
/ 09 февраля 2017

Большинство тем не используют описание категории ни для чего. Легкий обходной путь, который я сделал, состоял в том, чтобы использовать числа в описании. В верхнем посте в данный момент есть взлом jQuery, он не нужен.

Вы можете добавить поля произвольного заказа, я полагаю, также.

Просто

$categories = get_categories( array(
    'orderby' => 'description',
    'order'   => 'ASC'
) );
3 голосов
/ 03 ноября 2016

Технический подход

Проблема в ядре WordPress заключается в том, что в таблице wp_terms нет столбца term_order. Это означает, что стандартная WordPress не поддерживает пользовательский порядок терминов. Если вы посмотрите на эту структуру базы данных WP , вы можете найти таблицу wp_term_relationships. Эта таблица отвечает за отношения между постами и таксономией (вашими категориями) И в этой таблице есть столбец term_order.

Теперь, с помощью простого оператора SQL ALTER TABLE wp_terms ADD term_order INT(11) NOT NULL DEFAULT 0 (не забывайте о переменной $wpdb->wp_terms), вы можете добавить в таблицу столбец, отвечающий за ваш пользовательский порядок категорий. Затем вы можете поместить свой пользовательский порядок категорий в эти два столбца wp_term_relationships и wp_terms. Когда все закончится, вы можете подключиться к фильтру get_terms_args и изменить orderby на term_order.

Вот список всех соответствующих ссылок для технического подхода:

Плагин может сделать всю работу за вас

Проверьте мой плагин, чтобы решить эту проблему: WordPress Real Управление категориями . WP RCM создает дополнительное поле term_order в таблице терминов wp. Это также приносит много других полезных функций, как вы можете видеть на скриншоте ниже. Это позволяет вам организовать ваши WordPress категории хорошим способом. Он прост в использовании, просто перетащите и отпустите свои категории и переместите его в определенный порядок. Плагин работает во всех пользовательских типах постов .

Drag & Drop categories order

Из описания продукта я могу процитировать. Если вы хотите попробовать плагин, на странице плагина также есть демо .

Есть много бесплатных плагинов

Это можно решить с помощью множества бесплатных плагинов, доступных в репозитории плагинов wordpress.org. Просто найдите «порядок категорий» в вашей Wordpress Dashboard> Плагины> Установить.

3 голосов
/ 26 апреля 2011

Это встроено в wordpress_wp_list_categories

wp_list_categories('orderby=name');

Я думаю, это поможет вам

0 голосов
/ 24 августа 2016

Я сделал это, создав несколько списков терминов. Позвоню позже по собственному заказу. Я новичок в PHP.

Во-первых, я храню в отдельной переменной идентификатор для каждого термина категории:

$terms = get_terms('my_taxonomy', 'hide_empty=0');
        foreach ( $terms as $term ) {
           ${$term->slug} = get_term_by('slug', $term->slug, 'product_cat');
           ${$term->slug.'_array'} = (array)${$term->slug};
           ${$term->slug.'_array_id'} =${$term->slug.'_array'}['term_id'];
      };

Затем я создаю несколько аргументов для каждого wp_list_categories(), исключая, с этой переменной, условия, которые я хочу:

      $args = array(
        'taxonomy'     => 'my_taxonomy',
        'orderby'      => 'name',
        'show_count'   => true,
        'pad_counts'   => false,
        'hierarchical' => true,
        'title_li'     => '',
        'hide_empty'   => 0,
        'show_option_all' => 'Show all',
        'exclude'    => array( $term1_array_id, $term2_array_id )
      );

      $args_1 = array(
        'taxonomy'     => 'my_taxonomy',
        'orderby'      => 'name',
        'show_count'   => true,
        'pad_counts'   => false,
        'hierarchical' => true,
        'title_li'     => '',
        'hide_empty'   => 0,
        'exclude'    => array( $term3_array_id, $term4_array_id, $term1_array_id )
      );

      $args_2 = array(
        'taxonomy'     => 'my_taxonomy',
        'orderby'      => 'name',
        'show_count'   => true,
        'pad_counts'   => false,
        'hierarchical' => true,
        'title_li'     => '',
        'hide_empty'   => 0,
        'exclude'    => array( $term1_array_id, $term4_array_id, $term5_array_id )
      );

Наконец, я могу назвать каждый список терминов отдельно:

<ul>
    <?php wp_list_categories( $args ); ?>
    <?php wp_list_categories( $args_1 ); ?>
    <?php wp_list_categories( $args_2 ); ?>
</ul>
0 голосов
/ 11 марта 2015

Для удобства будущих посетителей вот простое решение этой проблемы:

Теперь в WordPress есть ряд плагинов, которые позволяют вам заказывать категории или другие пользовательские таксономии. Некоторые из них вы можете увидеть на странице тега «Порядок категорий» в каталоге плагинов WordPress . Я могу лично подтвердить, что плагин Custom Taxonomy Order NE выполняет свою работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...