Adăugare tag-uri la un tip de postare personalizat în WordPress

9 sept. 2014, 14:45:42
Vizualizări: 16.4K
Voturi: 1

Folosesc framework-ul Cherry pe un site WordPress. Acesta vine cu un tip de postare personalizată care poate fi folosită pentru a adăuga 'Membri ai echipei' și pentru a crea pagini de personal etc.

Am nevoie să extind această funcționalitate pentru a putea adăuga tag-uri fiecărui 'membru al echipei', astfel încât să-i pot eticheta ca lucrând în departamentul a / b / c / etc.

Tipul de postare personalizată este înregistrat în fișierul theme-init.php folosind următorul cod:

/* Echipa noastră */
function my_post_type_team() {
register_post_type( 'team',
    array(
        'label'               => theme_locals("our_team"),
        'singular_label'      => theme_locals("our_team"),
        '_builtin'            => false,
        // 'exclude_from_search' => true, // Excludează din rezultatele căutării
        'capability_type'     => 'page',
        'public'              => true,
        'show_ui'             => true,
        'show_in_nav_menus'   => false,
        'menu_position'       => 5,
        'menu_icon'           => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
        'rewrite'             => array(
                                    'slug'       => 'team-view',
                                    'with_front' => FALSE,
                                ),
        'supports' => array(
                        'title',
                        'editor',
                    'thumbnail',
                    )
    )
);
}
add_action('init', 'my_post_type_team');

Doresc să adaug tag-uri la această postare, astfel încât atunci când adaug un nou membru al echipei, să pot să-l atribui unui departament prin adăugarea unui tag relevant. În prezent, caseta de editare a tag-urilor nu apare pe pagina de adăugare/editare.

Așadar, am adaptat codul de mai sus pentru a include o înregistrare de taxonomie astfel:

/* Echipa noastră */
function my_post_type_team() {
register_post_type( 'team',
    array(
        'label'               => theme_locals("our_team"),
        'singular_label'      => theme_locals("our_team"),
        '_builtin'            => false,
        // 'exclude_from_search' => true, // Excludează din rezultatele căutării
        'capability_type'     => 'page',
        'public'              => true,
        'show_ui'             => true,
        'show_in_nav_menus'   => false,
        'menu_position'       => 5,
        'menu_icon'           => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
        'rewrite'             => array(
                                    'slug'       => 'team-view',
                                    'with_front' => FALSE,
                                ),
        'supports' => array(
                        'title',
                        'editor',
                    'thumbnail',
                    )
    )
);
register_taxonomy(
    'team_tag',
    'team',
    array(
        'hierarchical'  => false,
        'label'         => theme_locals("tags"),
        'singular_name' => theme_locals("tag"),
        'rewrite'       => true,
        'query_var'     => true
    )
);
}
add_action('init', 'my_post_type_team');

Totuși, caseta de tag-uri încă nu apare pe pagina de editare din admin.

Orice ajutor în această privință va fi foarte apreciat.

2
Comentarii

Care este funcția acestor theme_locals

Pieter Goosen Pieter Goosen
9 sept. 2014 15:40:50

@PieterGoosen Sincer, nu am nicio idee. Probabil fac parte din framework (cherry framework).

Phill Healey Phill Healey
9 sept. 2014 16:35:02
Toate răspunsurile la întrebare 6
0

Se pare că problema a fost parțial cauzată de existența unui fișier theme-init.php în tema copil, care suprascria părți din fișierul theme-init.php din tema părinte / cadrul Cherry.

Am rezolvat problema adăugând următorul cod în fișierul theme-init.php al temei mele copil:

register_taxonomy('team_tag', 'team', array(
    'hierarchical' => false, 
    'label' => theme_locals("tags"), 
    'singular_name' => theme_locals("tag"), 
    'rewrite' => true, 
    'query_var' => true
    )
);
9 sept. 2014 16:33:44
4
register_post_type( 'team',
    array(
        'label'               => theme_locals("our_team"),
        'singular_label'      => theme_locals("our_team"),
        '_builtin'            => false,
        // 'exclude_from_search' => true, // Excludează din Rezultatele Căutării
        'capability_type'     => 'page',
        'public'              => true,
        'show_ui'             => true,
        'show_in_nav_menus'   => false,
        'menu_position'       => 5,
        'menu_icon'           => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
        'rewrite'             => array(
                                    'slug'       => 'team-view',
                                    'with_front' => FALSE,
                                ),
        'supports' => array(
                        'title',
                        'editor',
                    'thumbnail',
                    ),
        'taxonomies' => array('team_tag')
    )
);

Puteți observa că am adăugat parametrul taxonomies în funcția register_post_type.

Deși acest cod ar trebui să funcționeze, puteți încerca să creați relația mai târziu, cu acest cod:

add_action('init', 'add_tax_post_rel');

function add_tax_post_rel() {
    register_taxonomy_for_object_type('team_tag', 'team', 11);
}
9 sept. 2014 14:59:26
Comentarii

Mulțumesc pentru răspuns, dar asta nu face nimic. Dacă schimb 'team_tag' în 'tag' și apoi adaug 'tags' în array-ul de suport, primesc caseta de tag-uri în submeniu și pe pagina de editare. Totuși, aceasta folosește tag-urile globale ale site-ului.

Phill Healey Phill Healey
9 sept. 2014 15:26:05

@PhillHealey nu poate fi, tag-urile încorporate sunt sub taxonomia post_tag, nu tag

Pieter Goosen Pieter Goosen
9 sept. 2014 15:42:16

@PhillHealey, am adăugat o modalitate alternativă de a crea relația.

Tomás Cot Tomás Cot
9 sept. 2014 15:57:54

@PieterGoosen Ok, folosește aceleași etichete ca un alt tip de postare personalizată.

Phill Healey Phill Healey
9 sept. 2014 16:18:24
2

încearcă asta

register_taxonomy(
        'team_tag', 
        'team', 
        array( 
            'hierarchical'  => false, 
            'label'         => __( 'Etichete', CURRENT_THEME ), 
            'singular_name' => __( 'Etichetă', CURRENT_THEME ), 
            'rewrite'       => true, 
            'query_var'     => true 
        )  
    );
1 dec. 2015 09:01:40
Comentarii

Te rog să adaugi răspunsuri corecte, adică dacă adaugi cod, explică ce face codul tău și cum funcționează. Mulțumesc

Pieter Goosen Pieter Goosen
1 dec. 2015 10:49:47

Aceasta are cod aproape identic fără o definiție de funcție opacă la care utilizatorii nu au acces. În multe privințe, acesta ar trebui să fie codul folosit în răspunsul acceptat, deoarece se aplică tuturor platformelor WordPress, nu doar framework-ului Cherry, dacă nu există nicio explicație sau definiție a funcției. Chiar a stârnit o întrebare din partea ta.

MrMesees MrMesees
13 iun. 2017 15:03:07
0

Poți încerca această soluție:

add_action( 'init', 'create_client_tax' );
function create_client_tax() {
    register_taxonomy( 
            'client_tag', //taxonomia ta pentru etichete
            'client',  // Tipul tău de postare
            array( 
                'hierarchical'  => false, 
                'label'         => __( 'Etichete', CURRENT_THEME ), 
                'singular_name' => __( 'Etichetă', CURRENT_THEME ), 
                'rewrite'       => true, 
                'query_var'     => true 
            )  
        );
}

Poate că te va ajuta.

6 mar. 2018 20:22:17
0

De asemenea, îmi lipsea și caseta de etichete în ecranul de editare CPT din admin. A apărut după ce am adăugat 'show_in_rest' => true, în parametrii register_taxonomy().

29 iul. 2021 14:35:31
0

Dacă aveți nevoie să afișați etichete pentru un tip de postare personalizat - iată un bun exemplu https://jamper.online/vyvod-tegov-tags-dlya-kastomnyh-postov-custom-post-type

    function get_terms_by_custom_post_type( $post_type, $taxonomy ){
    $args = array( 'post_type' => $post_type);
    $loop = new WP_Query( $args );
    $postids = array();
    // construiește un array cu ID-urile postărilor
    while ( $loop->have_posts() ) : $loop->the_post();
        array_push($postids, get_the_ID());
    endwhile;
    // obține valorile taxonomiei bazate pe array-ul de ID-uri
    $taxonomies = wp_get_object_terms( $postids,  $taxonomy );
    wp_reset_postdata();
    return $taxonomies;
}
15 sept. 2023 12:55:41