Alors voila j'ai fouiné un petit moment avant de trouver comment ajouter dynamiquement dans l'interface des menus de Wordpress les custom post types archives, et tout cela très proprement en quelques ligne de code.

Je vous recommende vivement de faire un tour sur ce petit tuto en anglais(malheureusement pour les monolingues) C'est ici que ça se passe.

en gros :

<?php

  /* La fonction pour ajouter une meta box au menu */
  add_action( 'admin_head-nav-menus.php', 'inject_cpt_archives_menu_meta_box' );
  function inject_cpt_archives_menu_meta_box() {
    add_meta_box( 'add-cpt', __( 'Ici votre nom de boite', 'default' ), 'wp_nav_menu_cpt_archives_meta_box', 'nav-menus', 'side', 'default' );
  }

  /* la fonction de la meta box en elle-même */
  function wp_nav_menu_cpt_archives_meta_box() {
    /* ici le tableaux vous sert a filtrer quel types de custom post type vous voulez afficher pour ma part j'ai seulement mis 'has_archive' => true*/ 
    $post_types = get_post_types( array( 'show_in_nav_menus' => true, 'has_archive' => true ), 'object' );    

    /* les propriétés de l'objet nécessaires pour le walker */
    foreach ( $post_types as &$post_type ) {
        $post_type->classes = array();
        $post_type->type = $post_type->name;
        $post_type->object_id = $post_type->name;
       /* le nom du titre du lien dynamiquement générer */
        $post_type->title = $post_type->labels->name . ' ' . __( 'Archive', 'default' );
        $post_type->object = 'cpt-archive';
    }

    $walker = new Walker_Nav_Menu_Checklist( array() );

    ?>
    <div id="cpt-archive" class="posttypediv">
      <div id="tabs-panel-cpt-archive" class="tabs-panel tabs-panel-active">
        <ul id="ctp-archive-checklist" class="categorychecklist form-no-clear">
          <?php
            echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $post_types), 0, (object) array( 'walker' => $walker) );
          ?>
        </ul>
      </div><!-- /.tabs-panel -->
    </div>
    <p class="button-controls">
      <span class="add-to-menu">
        <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" />
        <input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-ctp-archive-menu-item" id="submit-cpt-archive" />
      </span>
    </p>
    <?php
  }
 /* une petite blague de l'auteur pour tout ceux qui n'ont pas lu le code... a virer bien entendu */
  wp_die('You pasted the code without reading it...');

  /* récuprer les urls urls */
  add_filter( 'wp_get_nav_menu_items', 'cpt_archive_menu_filter', 10, 3 );
  function cpt_archive_menu_filter( $items, $menu, $args ) {
    /* modifie l'URL pour l'objet cpt-archive */
    foreach ( $items as &$item ) {
      if ( $item->object != 'cpt-archive' ) continue;
      $item->url = get_post_type_archive_link( $item->type );

      /* ajoute la class current-menu-item vous savez pourquoi ^^ */
      if ( get_query_var( 'post_type' ) == $item->type ) {
        $item->classes ]= 'current-menu-item';
        $item->current = true;
      }
    }

    return $items;
  }
?>

2 réponses


Merci pour cette info! Elle risque d'être utile pour les personnes intéressées !

neodin
Auteur

Je penses aussi, surtout pour ceux qui développe pour d'autre, genre les webdesigner etc, quand on veut un backoffice propre c'est l'idéal ^^