WordPress : Je ne sais pas comment afficher les taxonomies personnalisées à partir d’un post_type personnalisé

Publié par Jean-Michel le

J’ai créé un post_type personnalisé appelé Events, où je peux afficher les événements ( URL:HTTP://localhost.com/events) qui sont chargés par l’archive-events.php que j’ai créé.

J’ai maintenant créé une taxonomie personnalisée appelée comtés que je souhaite utiliser pour filtrer les événements en fonction du comté dans lequel ils se trouvent. Je peux appliquer des comtés à des événements spécifiques, mais je ne sais pas comment les afficher. J’ai essayé de créer un taxonomy-counties.php

Mais je n’ai aucune idée de comment le tester ou le déboguer car si j’essaie d’aller HTTP://localhost.com/events/countyou HTTP://localhost.com/countycela me mène à un ‘404 Page Not Found’.

Voici le code que j’ai utilisé pour créer la taxonomie :

add_action('init', 'create_counties_hierarchical_taxonomy', 0);

function create_counties_hierarchical_taxonomy() {
    $labels = array(
    'name' => _x( 'Counties', 'taxonomy general name' ),
    'singular_name' => _x( 'County', 'taxonomy singular name' ),
    'search_items' => __( 'Search Counties' ),
    'all_items' => __( 'All Counties' ),
    'parent_item' => __( 'Parent County' ),
    'parent_item_colon' => __( 'Parent County:' ),
    'edit_item' => __( 'Edit County' ),
    'update_item' => __( 'Update County' ),
    'add_new_item' => __( 'Add New County' ),
    'new_item_name' => __( 'New County Name' ),
    'menu_name' => __( 'Counties' ),
    );

    // Register Taxonomy
    register_taxonomy('counties',array('events'), array(
    'hierarchical' => true,
    'labels' => $labels,
    'show_ui' => true,
    'show_admin_column' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'county' ),
  ));
}

J’ai essayé de parcourir la documentation du développeur WordPress, mais malheureusement, je n’ai pas été en mesure de comprendre cela et j’ai trouvé une réponse.

Merci!

Solution n°1 trouvée

Ok, j’ai travaillé pour vous:

Tout d’abord, j’ai enregistré le type de message personnalisé et la taxonomie :

add_action('init', 'my_init');
add_action('admin_init', 'my_admin_init');

function my_admin_init() {
    $role = get_role( 'administrator' );
  $role->add_cap( 'edit_event' );
  $role->add_cap( 'read_event' );
  $role->add_cap( 'delete_event' );
  $role->add_cap( 'edit_events' );
  $role->add_cap( 'read_events' );
  $role->add_cap( 'delete_events' );
  $role->add_cap( 'edit_others_events' );
  $role->add_cap( 'publish_events' );
  $role->add_cap( 'read_private_events' );
  $role->add_cap( 'delete_private_events' );
  $role->add_cap( 'delete_published_events' );
  $role->add_cap( 'edit_private_events' );
  $role->add_cap( 'edit_published_events' );
  $role->add_cap( 'create_events' );
  $role->add_cap( 'delete_others_events' );
  $role->add_cap( 'delete_others_event' );
}
function my_init() {
    global $post;
    $labels = array(
        'name'                => __( 'event', 'webto' ),
        'singular_name'       => __( 'Header component', 'webto' ),
        'menu_name'           => __( 'Event', 'webto' ),
        'parent_item_colon'   => __( 'Parental:', 'webto' ),
        'all_items'           => __( 'event', 'webto' ),
        'view_item'           => __( 'View', 'webto' ),
        'add_new_item'        => __( 'Add new event', 'webto' ),
        'add_new'             => __( 'Add new', 'webto' ),
        'edit_item'           => __( 'Edit event', 'webto' ),
        'update_item'         => __( 'Update event ', 'webto' ),
        'search_items'        => __( 'Find event', 'webto' ),
        'not_found'           => __( 'Not found', 'webto' ),
        'not_found_in_trash'  => __( 'Not found in the bin', 'webto' ),
    );
    $args = array(
        'labels'              => $labels,
        'supports'            => array('title'),
        'public'              => false,
        'publicly_queryable' => false,
        'capability_type' => array('event', 'events'),
        'map_meta_cap' => true,
        'show_in_menu' => true,
        'rewrite' => array( 'slug' => 'events' ),
        'query_var' => true,
        'show_in_rest' => false,
        'show_ui' => true,
        'hierarchical' => false,
        'menu_position'       => 1,
        'menu_icon'           => 'dashicons-welcome-widgets-menus',
    );
    register_post_type( 'events', $args );

    $labels = array(
        'name' => _x( 'county', 'taxonomy general name' ),
        'singular_name' => _x( 'county', 'taxonomy singular name' ),
        'search_items' => __( 'Search county' ),
        'all_items' => __( 'All counties' ),
        'parent_item' => __( 'Parent county' ),
        'parent_item_colon' => __( 'Parent county:' ),
        'edit_item' => __( 'Edit county' ),
        'update_item' => __( 'Update county' ),
        'add_new_item' => __( 'Add New county' ),
        'new_item_name' => __( 'New county Name' ),
        'menu_name' => __( 'counties' )
    );

    // Register Taxonomy
    register_taxonomy('county', array('events'), array(
        'hierarchical' => true,
        'public'        => true,
        'publicly_queryable'        => true,
        'labels' => $labels,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => true
    ));
    flush_rewrite_rules();
}

J’ai obtenu ce qui suit :

entrez la description de l'image ici

Créez vos messages et attribuez-leur des comtés

entrez la description de l'image ici

Les comtés sur la page des comtés auront des liens pour afficher

Nous pouvons créer une page d’archives pour des comtés spécifiques

taxonomy-county.php

Affichez également vos publications

// templates/your-template/taxonomy-county.php
<?php
global $post;
$county = get_queried_object();


$args = array(
  'post_type' => 'events',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => $county->taxonomy,
      'field' => 'term_id',
      'terms' => $county->term_id
    )
  )
);
// Get posts by current county
$events = get_posts($args);

// All counties
$all_counties = get_terms($county->taxonomy);

foreach($all_counties as $county) {
    $args = array(
      'post_type' => 'events',
      'numberposts' => -1,
      'tax_query' => array(
        array(
          'taxonomy' => $county->taxonomy,
          'field' => 'term_id',
          'terms' => $county->term_id
        )
      )
    );
    // get posts by county
    $events = get_posts($args);
}

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *