Intereting Posts
получать персонализированные типы сообщений Я супер администратор, и я хочу дать администратору возможность добавлять новых пользователей …? Что такое раздел кода (или цикла), который извлекает заголовок и описание страницы? Ошибка устаревания: mysql_connect () при установке Roots Bedrock Тема WordPress / Buddypress неожиданно перестала работать Как импортировать файл WP XML автоматически при установке? Как создать заглавные изображения для разных сообщений? Как добавить условие в цикл wordpress? Получить список всех зарегистрированных типов сообщений Отключить фиды для определенных пользовательских типов сообщений Переписать страницу с пропуском перед именем страницы Переименуйте «сообщение» в «статью» во всем конце админа WordPress insert NOW () в столбце TIMESTAMP возвращает все нули Параметры API WordPress Settings не сохраняются для некоторых пользователей поле error-anti-spam было заполнено

Разница между 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 .