Intereting Posts
Удалите функцию, которая добавляет nofollow к ссылкам в комментариях Пользовательский запрос SELECT с несколькими значениями метаданных (проблема с упорядочением) Есть ли способ перезаписать фильтр, используемый в canonical.php? Как создать эскиз разных файлов? Как получить вложенный запрос только для отображения содержимого, которое выводит основной запрос функции php file Меню пользовательских сообщений Как установить минимальный размер изображения для загрузки Есть ли в WordPress какие-то «комментирующие системы на YouTube»? Шаблон страницы не отображает простой HTML, если он вставлен на другую страницу? мы можем добавить дополнительную таблицу или столбец в wordpress для добавления наших данных get_page_children () возвращает только заголовки Изменение тела почты, отправленного на новую регистрацию пользователя Сделать загрузку в прямом эфире вне папки WP шаблон одной категории для нескольких категорий

Разница между get_category, get_term_by и get_categories

get_category возвращает значение null, но с использованием get term_by или get_categories() нет. Зачем?

Я создал термин под названием categorycourses. У меня есть сообщение, связанное с coursecategory Lidköping (vardump1),

vardump1

 object(stdClass)[2525] public 'term_id' => &int 5 public 'name' => &string 'Lidköping' (length=10) public 'slug' => &string 'kurser_lidkoping' (length=16) public 'term_group' => int 0 public 'term_taxonomy_id' => int 105 public 'taxonomy' => string 'category' (length=8) public 'description' => &string '' (length=0) public 'parent' => &int 0 public 'count' => &int 1 public 'filter' => string 'raw' (length=3) public 'cat_ID' => &int 5 public 'category_count' => &int 1 public 'category_description' => &string '' (length=0) public 'cat_name' => &string 'Lidköping' (length=10) public 'category_nicename' => &string 'kurser_lidkoping' (length=16) public 'category_parent' => &int 0 

vardump2

 null 

vardump3

 object(stdClass)[2525] public 'term_id' => int 105 public 'name' => string 'Skara' (length=5) public 'slug' => string 'kurser_skara' (length=12) public 'term_group' => int 0 public 'term_taxonomy_id' => int 108 public 'taxonomy' => string 'categorycourses' (length=15) public 'description' => string 'skara' (length=5) public 'parent' => int 0 public 'count' => int 1 public 'filter' => string 'raw' (length=3) 

Я вижу, что таксономия, возвращаемая get_category является «категорией», а таксономия, возвращаемая get_category является «categorycourses».

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

 //Vardump1 $location = get_category(skovdeLocationId); //another location id var_dump($location); //Vardump2 $location = get_category(skaraLocationId, 'categorycourses'); var_dump($location); //returns null (with or without taxonomy defined) //Vardump3 $location = get_term_by( 'id', skovdeLocationId, 'categorycourses' ); var_dump($location); 

Но

 get_categories(array( 'taxonomy' =>'categorycourses', 'include' => skaraLocationId )); 

возвращает термин правильно (как vardump1, но где location = skaraLocationId)

Зачем? Не должны ли get_categories и get_category быть одинаковыми? (или get_termby)

Solutions Collecting From Web of "Разница между get_category, get_term_by и get_categories"

Чтобы полностью понять разницу между get_categories() , get_category() и get_term_by() , вам нужно посмотреть, как эти функции создаются.

get_categories($args) как следует из названия, получить список всех категорий, созданных на сайте. Эта функция может быть найдена в строках «wp-includes / category.php» с 39 по 66

 39 function get_categories( $args = '' ) { 40    $defaults = array( 'taxonomy' => 'category' ); 41    $args = wp_parse_args( $args, $defaults ); 42 43    $taxonomy = $args['taxonomy']; 44    /** 45     * Filter the taxonomy used to retrieve terms when calling get_categories(). 46     * 47     * @since 2.7.0 48     * 49     * @param string $taxonomy Taxonomy to retrieve terms from. 50     * @param array $args   An array of arguments. @see get_terms() 51     */ 52    $taxonomy = apply_filters( 'get_categories_taxonomy', $taxonomy, $args ); 53 54    // Back compat 55    if ( isset($args['type']) && 'link' == $args['type'] ) { 56        _deprecated_argument( __FUNCTION__, '3.0', '' ); 57        $taxonomy = $args['taxonomy'] = 'link_category'; 58    } 59 60    $categories = (array) get_terms( $taxonomy, $args ); 61 62    foreach ( array_keys( $categories ) as $k ) 63        _make_cat_compat( $categories[$k] ); 64 65    return $categories; 66 } 

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

get_category( $category, $output, $filter ) извлекает только данные категории для определенной конкретной категории. Эта функция может быть найдена в линиях «wp-includes / category.php» от 90 до 99

 90 function get_category( $category, $output = OBJECT, $filter = 'raw' ) { 91    $category = get_term( $category, 'category', $output, $filter ); 92 93    if ( is_wp_error( $category ) ) 94        return $category; 95 96    _make_cat_compat( $category ); 97 98    return $category; 99 } 

Из строки 91 вы можете видеть, что get_category() использует только категорию как термин, поэтому возвращается только категория, без условий.

get_term_by( $field, $value, $taxonomy, $output, $filter ) получит все данные о get_term_by( $field, $value, $taxonomy, $output, $filter ) по полям и данным по get_term_by( $field, $value, $taxonomy, $output, $filter ) . Эта функция может быть найдена «wp-includes / taxonomy.php» в строках 1028-1076

 1028 function get_term_by($field, $value, $taxonomy, $output = OBJECT, $filter = 'raw') { 1029    global $wpdb; 1030 1031    if ( ! taxonomy_exists($taxonomy) ) 1032        return false; 1033 1034    if ( 'slug' == $field ) { 1035        $field = 't.slug'; 1036        $value = sanitize_title($value); 1037        if ( empty($value) ) 1038            return false; 1039    } else if ( 'name' == $field ) { 1040        // Assume already escaped 1041        $value = wp_unslash($value); 1042        $field = 't.name'; 1043    } else if ( 'term_taxonomy_id' == $field ) { 1044        $value = (int) $value; 1045        $field = 'tt.term_taxonomy_id'; 1046    } else { 1047        $term = get_term( (int) $value, $taxonomy, $output, $filter); 1048        if ( is_wp_error( $term ) ) 1049            $term = false; 1050        return $term; 1051    } 1052 1053    $term = $wpdb->get_row( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND $field = %s LIMIT 1", $taxonomy, $value) ); 1054    if ( !$term ) 1055        return false; 1056 1057    wp_cache_add($term->term_id, $term, $taxonomy); 1058 1059    /** This filter is documented in wp-includes/taxonomy.php */ 1060    $term = apply_filters( 'get_term', $term, $taxonomy ); 1061 1062    /** This filter is documented in wp-includes/taxonomy.php */ 1063    $term = apply_filters( "get_$taxonomy", $term, $taxonomy ); 1064 1065    $term = sanitize_term($term, $taxonomy, $filter); 1066 1067    if ( $output == OBJECT ) { 1068        return $term; 1069    } elseif ( $output == ARRAY_A ) { 1070        return get_object_vars($term); 1071    } elseif ( $output == ARRAY_N ) { 1072        return array_values(get_object_vars($term)); 1073    } else { 1074        return $term; 1075    } 1076 } 

В строке 1047 вы можете видеть, что таксономия может быть указана пользователем и не кодируется, чем две другие ранее упомянутые функции

Для вашей собственной выгоды вы должны вникнуть в ссылки, которые я предоставил. Поможет вам много, если вы это сделаете.

Прежде всего get_categories извлекает список категорий, и его нельзя использовать для получения одной категории по идентификатору.

Разница между get_term_by и get_category заключается в том, что get_term_by позволяет указать таксономию, где get_category всегда использует category таксономии. Несмотря на то, что имя функции предложит иначе, get_categories также позволяет вам получать из других таксономий, кроме category .

Таким образом, get_categories и get_category не всегда должны возвращать один и тот же термин (даже если он находится в массиве для первого), поскольку get_category позволяет вам получить условия таксономии category , а get_categories поддерживает другие таксономии. То же самое касается get_term_by .