Unterschied zwischen get_category, get_term_by und get_categories

get_category gibt null zurück, aber get term_by oder get_categories() wird nicht verwendet. Warum?

Ich habe einen Begriff namens categorycourses angelegt. Ich habe einen Beitrag zur Kurskategorie 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) 

Ich sehe, dass die von get_category Taxonomie ‘category’ ist, während die von get_category Taxonomie ‘categorycourses’ ist.

Hier ist der Code, den ich verwende:

 //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); 

Aber

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

gibt den Begriff korrekt zurück (als vardump1, aber wo location = skaraLocationId)

Warum? Sollten get_categories und get_category nicht identisch sein? (oder get_termby)

Solutions Collecting From Web of "Unterschied zwischen get_category, get_term_by und get_categories"

Um den Unterschied zwischen get_categories() , get_category() und get_term_by() vollständig zu verstehen, müssen Sie sich ansehen, wie diese functionen aufgebaut sind.

get_categories($args) Wie der Name schon get_categories($args) , erhalten Sie eine Liste aller auf der Website erstellten Kategorien. Diese function finden Sie in den Zeilen 39 bis 66 “wp-includes / category.php”

 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 } 

Wie Sie in Zeile 40 sehen können, wird die Kategorie als Standardtaxonomie verwendet, sodass nur Kategorien in der Kategorienliste zurückgegeben werden

get_category( $category, $output, $filter ) ruft nur die Kategoriedaten für eine bestimmte Kategorie ab. Diese function finden Sie in den Zeilen 90 bis 99 in “wp-includes / category.php”

 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 } 

In Zeile 91 können Sie sehen, dass get_category() nur die Kategorie als Begriff verwendet, so dass nur die Kategorie zurückgegeben wird, keine Begriffe.

get_term_by( $field, $value, $taxonomy, $output, $filter ) erhält alle get_term_by( $field, $value, $taxonomy, $output, $filter ) und Daten. Diese function kann in den Zeilen 1028 bis 1076 “wp-includes / taxonomy.php” gefunden werden

 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 } 

In Zeile 1047 können Sie sehen, dass die Taxonomie vom Benutzer angegeben werden kann und nicht harkodiert ist als die anderen beiden zuvor genannten functionen

Zu Ihrem eigenen Vorteil sollten Sie sich in die Links vertiefen, die ich zur Verfügung gestellt habe. Wird dir sehr helfen, wenn du es tust.

Zunächst get_categories eine Liste von Kategorien ab und sollte nicht zum Abrufen einer einzelnen Kategorie nach ID verwendet werden.

Der Unterschied zwischen get_term_by und get_category besteht darin, dass get_term_by die Angabe einer Taxonomie erlaubt, wobei get_category immer die Taxonomiekategorie verwendet. Auch wenn der functionsname anderes vermuten lässt, können Sie mit get_categories auch andere Taxonomien als die category get_categories .

Daher sollten get_categories und get_category nicht immer den gleichen Begriff zurückgeben (auch wenn es in einem Array für den ersten Begriff ist), da get_category nur die Terme der category und get_categories auch andere Taxonomien unterstützt. Das gleiche gilt für get_term_by .