如何在数组中获取自定义帖子类型类别

时间:2016-04-03 作者:Md Jwel Miah

我想从特定的帖子类型获取数组中的所有类别(自定义分类法)。仅为特定帖子类型注册的分类法(类别)。我想检索数组中的所有类别。就像-

array(
  \'Category Name 1\' => \'slug-name-1\',
  \'Category Name 2\' => \'slug-name-2\',
  \'Category Name 3\' => \'slug-name-3\',
);
它可以通过slug或id获取类别名称。

2 个回复
SO网友:Luis Sanz

您可以使用get_terms() 检索自定义分类术语,然后构建自定义数组以匹配所需的结构。

尝试以下操作:

//Get the custom taxonomy terms
$taxonomies = array(
    \'name\' => \'your_custom_taxonomy\' //Edit to match your needs
);

$taxonomy_terms = get_terms( $taxonomies );

//This array will store the results
$taxonomy_array = array();

//Parse the terms
foreach ( $taxonomy_terms as $taxonomy_term ) :

    //Get the taxonomy term name
    $taxonomy_term_name = $taxonomy_term->name;

    //Get the taxonomy term slug
    $taxonomy_term_slug = $taxonomy_term->slug;

    //Push the custom array
    $taxonomy_array[ $taxonomy_term_name ] = $taxonomy_term_slug;

endforeach;
数据将存储在$taxonomy_array 遵循您提供的格式。您可以将其他参数传递给get_terms(), 例如订单。

SO网友:guido

如果要检索特定帖子类型的所有已注册分类中的所有术语,可以使用如下函数。

function termsByTaxonomiesPostType( $postType ) {

    if ( ! post_type_exists( $postType ) ) {
        return [];
    }

    $list       = [];
    $taxonomies = get_object_taxonomies( $postType );

    if ( empty( $taxonomies ) ) {
        return [];
    }

    foreach ( $taxonomies as $taxonomy ) {
        $terms = get_terms( [
            \'taxonomy\' => $taxonomy,
            \'fields\'   => \'all\',
        ] );

        // Not an array if you pass \'count\' as value for \'fields\'.
        if ( ! is_array( $terms ) || is_wp_error( $terms ) ) {
            continue;
        }

        $list[ $taxonomy ] = [];

        // Note: if you want \'id=>slug\', \'id=>name\', \'names\', \'id=>parent\', \'ids\', \'slugs\' only
        // You dont need to perform this.
        foreach ( $terms as $term ) {
            $list[ $taxonomy ] = array_merge(
                $list[ $taxonomy ],
                [
                    $term->name => $term->slug,
                ]
            );
        }
    }

    return $list;
}
您的列表将包含一个分类法列表,对于每个分类法,将包含一个键=>值对列表,其中键是name 术语和值slug.

请注意,如果只想检索“id=>slug”、“id=>name”、“names”、“id=>parent”、“ids”、“slug”,则无需执行额外的循环,因为WordPress会为您执行。

要检索上面列出的关联之一,只需将字符串设置为键的值fields.

相关推荐