Добавьте Атрибуты HTML В Теги Привязки В Функции "Категории списка wp()"


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

Я хотел бы добавить атрибут title, который совпадает с категорией, и атрибут class, но, глядя на документы, в списке свойств ассоциативного массива я не вижу, как это сделать?

Код, который я использую, таков:

<?php
    echo '<ul class="cat-sidebar-list">';
        $args_list = array(
        'taxonomy' => 'news_categories',
        'show_count' => false,
        'hierarchical' => true,
        'hide_empty' => false,
        'title_li' => '',
        );   
        echo wp_list_categories($args_list);
    echo '</ul>';
?>

Спасибо в заранее за любую помощь.

Author: The Chewy, 2020-09-05

3 answers

Ходунки по умолчанию, используемые wp_list_categories() (Walker_Category) имеет крючок (крючок фильтра) с именем category_list_link_attributes который вы можете использовать для добавления пользовательских title и class (а также других атрибутов, таких как data-xxx) в привязку /a тег (<a>) в списке HTML, сгенерированном с помощью wp_list_categories().

Так, например, вы можете сделать что-то вроде:

add_filter( 'category_list_link_attributes', 'my_category_list_link_attributes', 10, 2 );
function my_category_list_link_attributes( $atts, $category ) {
    // Set the title to the category description if it's available. Else, use the name.
    $atts['title'] = $category->description ? $category->description : $category->name;

    // Set a custom class.
    $atts['class'] = 'custom-class category-' . $category->slug;
//  $atts['class'] .= ' custom-class';                 // or append a new class
//  $atts['class'] = 'custom-class ' . $atts['class']; // or maybe prepend it

    return $atts;
}
 2
Author: Sally CJ, 2020-09-14 08:20:32

Пользовательские ходунки

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

Пример использования пользовательского ходунка в функции.

$args = array(
    'orderby' => 'id',
    'show_count' => 0,
    'walker' => new My_Custom_Walker_Category(),
);
wp_list_categories($args);

Пользовательский ходок является расширением по умолчанию, например (Документация)

class My_Custom_Walker_Category extends Walker_Category {
    function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
    }
}

Только классы CSS

Простое решение возможно только для классов CSS. У ходока по умолчанию есть крючок фильтра для изменения, улучшения классов CSS - category_css_class. В фильтре задокументированы все параметры.

        /**
         * Filters the list of CSS classes to include with each category in the list.
         *
         * @since 4.2.0
         *
         * @see wp_list_categories()
         *
         * @param array  $css_classes An array of CSS classes to be applied to each list item.
         * @param object $category    Category data object.
         * @param int    $depth       Depth of page, used for padding.
         * @param array  $args        An array of wp_list_categories() arguments.
         */
        $css_classes = implode( ' ', apply_filters( 'category_css_class', $css_classes, $category, $depth, $args ) );

Ходок

Дополнительные подсказки и подсказки о классе Walker вы найдете в документации. У Ходока есть три крючки.

  • category_description
  • category_css_class
  • category_list_link_attributes
 1
Author: bueltge, 2020-09-14 13:18:22

Если бы вы хотели вывести только название категории в качестве атрибута заголовка, вы могли бы сделать это, просто введя название категории в поле Описание категории, потому что вывод по умолчанию заключается в использовании этого поля в качестве атрибута заголовка, ЕСЛИ вы не установите этот флаг в $args равным 0 (false - см. use_desc_for_title значение по умолчанию равно 1, true).

Но более простой способ сделать то, что вы хотите, - вывести результаты wp_list_categories() вместо эха (установите "эхо" в 0 вместо 1 по умолчанию) а затем вы можете настроить свой HTML так, как вам нравится, для вывода $.

Таким образом, примером (аналогичным тому, что содержится в Кодексе) может быть (помните, что вы можете удалить/игнорировать любые, для которых по умолчанию используется то, что вы хотите):

wp_list_categories( $args = '' ) {
$defaults = array(
    'child_of'            => 0,
    'current_category'    => 0,
    'depth'               => 0,
    'echo'                => 0,
    'exclude'             => '',
    'exclude_tree'        => '',
    'feed'                => '',
    'feed_image'          => '',
    'feed_type'           => '',
    'hide_empty'          => 1,
    'hide_title_if_empty' => false,
    'hierarchical'        => true,
    'order'               => 'ASC',
    'orderby'             => 'name',
    'separator'           => '<br />',
    'show_count'          => 0,
    'show_option_all'     => '',
    'show_option_none'    => __( 'No categories' ),
    'style'               => 'list',
    'taxonomy'            => 'category',
    'title_li'            => __( 'Categories' ),
    'use_desc_for_title'  => 1,
)};

$parsed_args = wp_parse_args( $args, $defaults );

$categories = get_categories( $parsed_args );
 if ( ! empty( $categories ) ) {
 
 echo '<ul>';
   foreach ($categories as $category) {
   echo '<li class="' . esc_attr( $parsed_args['class'] ) . '">' . $parsed_args['title_li'];
   }

   echo '</ul>';
  }
   

Имейте в виду, что, хотя вы можете добавить любые дополнительные классы стилей, которые вы хотите таким образом, по умолчанию выводится класс для каждого идентификатора категории, поэтому у вас уже есть некоторые встроенные параметры детального стиля. И, как уже упоминалось, выводом по умолчанию для атрибута title является категория Описание поэтому, предполагая, что вы еще не используете это поле для фактического описания, просто укажите там название категории, и вы будете делать то, что хотите, без дополнительного кода.

ОТРЕДАКТИРОВАНО: Чуи, вы можете удалить любые строки в $args (по умолчанию), которые установлены так, как вы уже хотите, чтобы они соответствовали их значениям по умолчанию - вам нужно только перечислить их, если вы изменяете значение по умолчанию в Кодексе. В приведенном выше списке "echo" имеет значение 0, что означает, что он вернет вам результаты, а не перечислите их, вот почему чуть ниже в инструкции foreach вам нужно открыть UL, а затем просмотреть результаты, чтобы создать LI для каждого из них.

ЕДИНСТВЕННАЯ причина, по которой я могу это сделать, заключается в том, что вы можете добавить стили, которые вы сказали в своей операции, которые вы хотите добавить..... если вы можете жить с уникальными стилями, которые WP уже добавляет (идентификатор категории добавляется в качестве класса в каждую из перечисленных категорий), то вам не нужно ничего этого делать, все, что вам нужно сделать, это вызвать wp_list_categories() в своем шаблон, в котором вы хотите их разместить, и укажите предпочитаемый атрибут заголовка в поле Описания категории.

 0
Author: Trisha, 2020-09-11 23:39:11