Come ottenere il nome della categoria primaria nella nuova versione di WordPress

5 giu 2016, 11:02:52
Visualizzazioni: 41.2K
Voti: 4

C'è una nuova funzionalità in WordPress che introduce la categoria primaria. Quando selezioni una categoria, può essere specificata una categoria primaria.

La mia domanda è come posso ottenere il nome della categoria primaria utilizzando le funzioni core di WordPress?

Se non esiste una funzione specifica, potete aiutarmi a ottenere la prima categoria figlio della categoria principale?

Per esempio:
- categoria principale
-- categoria figlio 1
-- categoria figlio 2
-- categoria figlio 3

Ho bisogno di ottenere -- categoria figlio 1.

Grazie per il vostro aiuto.

6
Commenti

Categoria principale? Puoi aiutarmi a trovare un articolo e questo nuovo concetto di categoria principale?

Sumit Sumit
5 giu 2016 11:23:33

Installa l'ultima versione di WordPress, poi aggiungi un nuovo articolo, seleziona più categorie e una di queste può essere impostata come categoria principale

MMTDesigner MMTDesigner
5 giu 2016 12:00:37

O forse mi sbaglio ed è un plugin che mi sta dando questa opzione?!

MMTDesigner MMTDesigner
5 giu 2016 12:01:38

Non lo vedo. Ti riferisci a questo https://yoast.com/yoast-seo-3-1/ ?

Sumit Sumit
5 giu 2016 12:15:51

@MMTdesigner È Yoast SEO che fornisce la funzionalità di 'categoria primaria'. La stanno utilizzando per il breadcrumb. Non fa parte del core di WordPress. :)

Mayeenul Islam Mayeenul Islam
5 giu 2016 12:18:58

potresti rispondere alla seconda domanda?

MMTDesigner MMTDesigner
5 giu 2016 12:52:34
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 7
0

Ho modificato la funzione MMT Designer. Questa versione funziona meglio per me:

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();
    }
}
1 ott 2018 02:38:59
0

Vedo che questa domanda sta ricevendo molta attenzione nell'ultimo anno, ho pensato di rispondere nel modo corretto.

Non esiste una categoria primaria predefinita in WordPress, ma se hai installato il plugin Yoast SEO apparirà una nuova funzionalità nella selezione delle categorie dei Singoli Articoli nell'area di amministrazione, permettendoti di scegliere una categoria primaria.

Per ottenere quella categoria primaria puoi usare la seguente funzione che ho creato:

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;
        }
        return '';

    }
    return $wpseo_primary_term->get_primary_term();
}
}

Prima controlla se Yoast SEO è installato e attivo, poi tenta di ottenere la categoria primaria. Se Yoast non è installato, recupera tutte le categorie e restituisce la prima.

Nota come questa funzione funzioni anche per i custom post type con tassonomie personalizzate.

Alla fine questa funzione restituisce l'ID della categoria (termine). Se vuoi ottenere l'oggetto della categoria (termine) puoi usare get_term($ID, $taxonomy) passando l'ID.

Nuova modifica:

Se stai usando Rank Math e vuoi ottenere la tassonomia primaria impostata con questo plugin, il seguente codice potrebbe aiutarti:

   if (class_exists('RankMath')) {
        $primary_tax = get_post_meta( $post_id, 'rank_math_primary_category', true );
        if (!empty($primary_tax)) {
            return get_term( $primary_tax, $taxonomy );
        }
    }

Suggerisco di aggiungerlo dopo l'istruzione if di Yoast.

21 mag 2018 17:12:38
1

Per rispondere alla tua seconda domanda: get_categories() ti permette di passare una serie di argomenti, uno dei quali riguarda le categorie figlie.

Per prima cosa ottieni la categoria genitore. Ho usato get_category_by_slug qui, ma potresti usare qualsiasi altro metodo per ottenerla, ad esempio la funzione di Yoast per recuperare la categoria principale.

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

Poi ottieni tutte le categorie figlie:

$args = array(
'type'                     => 'post',
'child_of'                 => $category->term_id,
'orderby'                  => 'name',
'order'                    => 'ASC', // o qualsiasi ordine preferisci
'hide_empty'               => FALSE,
'hierarchical'             => 1,
'taxonomy'                 => 'category',
); 
$child_categories = get_categories($args );

Infine seleziona il primo elemento se esiste:

if !empty($child_categories) $first_child = $child_categories[0];
5 giu 2016 18:13:37
Commenti

Carri armati, questo è un bel modo per farlo, ho trovato altri metodi ma credo che il tuo sia più efficiente. Grazie mille.

MMTDesigner MMTDesigner
6 giu 2016 07:42:22
0

questa funzione non è per WordPress ma per il plugin SEO, puoi utilizzare la seguente funzione

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

if (class_exists('WPSEO_Primary_Term')){
    // Mostra la categoria primaria di Yoast se è abilitata e impostata
    $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];  //ottieni la prima categoria

    }
    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;
}

questa funzione è stata scritta da lab21.gr

13 ago 2018 16:36:53
0

Una soluzione nativa di Wordpress per restituire la categoria genitore corrente.

function primary_categories($arr_excluded_cats) {

if($arr_excluded_cats == null) {
    $arr_excluded_cats = array();
}

$post_cats = get_the_category();

$args = array(
  'orderby' => 'name',
  'order' => 'ASC',
  'parent' => 0
);

    $primary_categories = get_categories($args);

    foreach ($primary_categories as $primary_category) {

        foreach ($post_cats as $post_cat) {
            if(($primary_category->slug == $post_cat->slug) && (!in_array($primary_category->slug, $arr_excluded_cats))) {
                return $primary_category->slug;
            }
        }
    }
}

//se hai più di due categorie genitore associate al post, puoi eliminare quelle che non vuoi qui
$dont_return_these = array(
        'receitas','enciclopedico'
    );

//usa la funzione in questo modo:
echo primary_categories($dont_return_these);

Commenti:

  • se hai solo una categoria genitore per post, passa null invece dell'array
  • se desideri un output diverso dallo slug, modifica questo in return $primary_category-> slug;
18 set 2019 19:24:04
0

Ho appena refattorizzato la risposta di Eqhes. Un codice un po' più pulito :)

if (!function_exists('get_primary_taxonomy_id')) {
    function get_primary_taxonomy_id($post_id, $taxonomy) {
        $prm_term = '';
        $wpseo_primary_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)) {
            return $wpseo_primary_term->get_primary_term();
        }

        $term = wp_get_post_terms($post_id, $taxonomy);

        if (isset($term) && !empty($term)) {
            return $term[0]->term_id;
        }

        return '';
    }
}
12 feb 2022 10:19:39
4
-1

Utilizzo il plugin sCategory Permalink https://wordpress.org/plugins/scategory-permalink/

// Ottiene l'ID della categoria primaria associata al post  
$category_primary_id = get_post_meta(get_the_ID(), '_category_permalink', true);  

// Verifica se è presente un ID categoria  
if (!empty($category_primary_id)) {  
    // Recupera i dettagli della categoria  
    $category = get_category($category_primary_id);  
    // Stampa il nome della categoria per debug  
    var_dump($category->name);  
}  
31 mar 2017 16:24:14
Commenti

Cos'è _category_permalink? Non conosco questa metakey. Dove devo inserire questo codice? Potresti modificare la tua risposta usando il link di modifica sopra e aggiungere alcuni dettagli alla tua risposta, per favore?

Howdy_McGee Howdy_McGee
31 mar 2017 17:26:07

> Cos'è category_permalink ? Ogni categoria primaria per il post viene salvata come _category_permalink

Serge Andreev Serge Andreev
4 apr 2017 11:26:31

> Non conosco questa metakey. Usa una query SQL per trovare tutte le metakey per il post: SELECT * FROM postmeta WHERE post_id = ID

Serge Andreev Serge Andreev
4 apr 2017 11:27:19

> Dove devo inserire questo codice? Ad esempio, puoi inserire questo codice in wp-content/themes/<your-theme>/single.php o in un altro file PHP, dove mostri il nome della categoria Principale per l'articolo

Serge Andreev Serge Andreev
4 apr 2017 11:27:24