web-dev-qa-db-fra.com

Comment obtenir le nom de la catégorie principale dans Wordpress nouvelle version

Il y a une nouvelle fonctionnalité dans WordPress introduisant la catégorie primaire. Lorsque vous sélectionnez une catégorie, vous pouvez spécifier une catégorie principale.

Ma question est la suivante: comment puis-je obtenir ce nom de catégorie principal en utilisant les fonctions principales de Wordpress?

s'il n'y a pas de fonction, pouvez-vous m'aider à avoir le premier enfant de la catégorie principale?

par exemple:
- catégorie principale
- enfant chat 1
- enfant chat 2
- enfant chat 3

J'ai besoin d'obtenir - chat enfant 1.

Merci pour ton aide.

2
MMT designer

J'ai édité la fonction MMT Designer . Cela fonctionne mieux pour moi:

if ( ! function_exists( 'get_primary_taxonomy_id' ) ) {
    function get_primary_taxonomy_id( $post_id, $taxonomy ) {
        $prm_term = '';
        if (class_exists('WPSEO_Primary_Term')) {
            $wpseo_primary_term = new WPSEO_Primary_Term( $taxonomy, $post_id );
            $prm_term = $wpseo_primary_term->get_primary_term();
        }
        if ( !is_object($wpseo_primary_term) || empty( $prm_term ) ) {
            $term = wp_get_post_terms( $post_id, $taxonomy );
            if (isset( $term ) && !empty( $term ) ) {
                return $term[0]->term_id;
            } else {
                return '';
            }
        }
        return $wpseo_primary_term->get_primary_term();
    }
}
2
Eqhes

ce n'est pas pour wordpress mais pour seo plugin, vous pouvez utiliser la fonction suivante

function get_post_primary_category($post_id, $term='category', 
   $return_all_categories=false){
   $return = array();

if (class_exists('WPSEO_Primary_Term')){
    // Show Primary category by Yoast if it is enabled & set
    $wpseo_primary_term = new WPSEO_Primary_Term( $term, $post_id );
    $primary_term = get_term($wpseo_primary_term->get_primary_term());

    if (!is_wp_error($primary_term)){
        $return['primary_category'] = $primary_term;
    }
}

if (empty($return['primary_category']) || $return_all_categories){
    $categories_list = get_the_terms($post_id, $term);

    if (empty($return['primary_category']) && !empty($categories_list)){
        $return['primary_category'] = $categories_list[0];  //get the first 

    }
    if ($return_all_categories){
        $return['all_categories'] = array();

        if (!empty($categories_list)){
            foreach($categories_list as &$category){
                $return['all_categories'][] = $category->term_id;
            }
        }
    }
}

return $return;
}

cette fonction est écrite par lab21.gr

1
Arash Rabiee

Je vois que cette question reçoit beaucoup d'attention depuis l'année dernière, j'ai pensé répondre à cette question de la bonne manière.

Il n'y a pas de catégorie principale dans wordpress si vous avez installé Yoast SEO plugin, une nouvelle fonctionnalité apparaîtra sur Single Posts sélection de catégorie dans la zone admin afin de choisir la catégorie principale.

Pour obtenir cette catégorie principale, vous pouvez utiliser la fonction suivante que j'ai créée:

if ( ! function_exists( 'get_primary_taxonomy_id' ) ) {
function get_primary_taxonomy_id( $post_id, $taxonomy ) {
    $prm_term = '';
    if (class_exists('WPSEO_Primary_Term')) {
        $wpseo_primary_term = new WPSEO_Primary_Term( $taxonomy, $post_id );
        $prm_term = $wpseo_primary_term->get_primary_term();
    }
    if ( !is_object($wpseo_primary_term) && empty( $prm_term ) ) {
        $term = wp_get_post_terms( $post_id, $taxonomy );
        if (isset( $term ) && !empty( $term ) ) {
            return wp_get_post_terms( $post_id, $taxonomy )[0]->term_id;
        } else {
            return '';
        }
    }
    return $wpseo_primary_term->get_primary_term();
}
}

Tout d'abord, il vérifiera si Yoast SEO est installé et activé, puis il tentera d'obtenir la catégorie principale. Si Yost n'est pas installé, toutes les catégories seront récupérées et la première sera renvoyée.

Notez que cette fonction fonctionne également pour les types de publication personnalisés avec des taxonomies personnalisées.

À la fin, cette fonction renvoie l'ID de catégorie (terme) si vous souhaitez obtenir l'objet de catégorie (terme), vous pouvez utiliser get_term($ID, $taxonomy) et transmettre l'ID.

1
MMT designer

Pour répondre à votre deuxième question: get_categories() vous permet de transmettre toute une série d’arguments, dont l’un se trouve être des catégories enfants.

Commencez par obtenir la catégorie parente. J'ai utilisé get_category_by_slug ici, mais vous pouvez utiliser un autre moyen pour l'obtenir, par exemple la fonction Yoasts pour récupérer la catégorie principale.

$category = get_category_by_slug( 'category-name' );

Ensuite, obtenez toutes les catégories d'enfants:

$args = array(
'type'                     => 'post',
'child_of'                 => $category->term_id,
'orderby'                  => 'name',
'order'                    => 'ASC', // or any order you like
'hide_empty'               => FALSE,
'hierarchical'             => 1,
'taxonomy'                 => 'category',
); 
$child_categories = get_categories($args );

Enfin, sélectionnez le premier élément s'il y en a:

if !empty($child_categories) $first_child = $child_categories[0];
1
cjbj