Пользовательский цикл таксономии не возвращает ничего - PullRequest
0 голосов
/ 11 апреля 2019

Я установил пользовательскую таксономию (menu_category) и пользовательский тип записи (menu_item) в functions.php следующим образом:

/* Set up custom post type for Menu Items */
function create_menu_items_post_type() {

    $plugin_directory = plugins_url('images/', __FILE__ );
    register_post_type( 'menu_item',

        array(
        'labels' => array(
            'singular_name'     => __( 'Menu item'),
            'name'              => __( 'The Menu'),
            'add_new'           => __( 'Add menu item'),
            'add_new_item'      => __( 'Add menu item'),
            'edit_item'         => __( 'Edit menu item'),
            'new_item'          => __( 'New menu item'),
            'search_items'      => __( 'Search menu items'),
            'not_found'         => __( 'No menu items found'),
            'not_found_in_trash'=> __( 'No menu items found in trash'),
            'all_items'         => __( 'All menu items','sbr')
        ),
        'public'                => true,
        'has_archive'           => true,
        'rewrite'               => array('slug' => 'menu_item'),
        'publicly_queryable'    => true,
        'hierarchical'          => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'exclude_from_search'   => true,
        'query_var'             => true,
        'menu_position'         => 27,
        'can_export'            => true,
        'menu_icon'             => get_template_directory_uri() . '/images/system/menu.svg',
        'supports'              => array('title', 'revisions', 'author'),
        'capability_type'       => 'post',
        'taxonomies'            => array('menu_category'),
        'capabilities'          => array(
            'create_posts'          => 'edit_posts',
        ),
        'map_meta_cap'          => true,
        )
    );
}
add_action( 'init', 'create_menu_items_post_type' );


/* Set up custom taxonomy for Menu Categories */
function create_menu_category_taxonomy() {

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

    register_taxonomy(
        'menu_category',
        'menu_item',
        array(
            'label'         => __( 'Menu Category' ),
            'rewrite'       => array( 'slug' => 'menu_category' ),
            'hierarchical'  => true,
            'labels'        => $labels
        )
    );
}
add_action( 'init', 'create_menu_category_taxonomy' );

... и это прекрасно работает, когда я в WPadmin - я могу добавлять новые категории, сообщения и т. д.

Но на внешнем интерфейсе я пытаюсь вернуть список всех menu_category категорий и menu_item сообщений, таких как:

$the_menus = get_categories(array(
    'echo'             => 0,
    'hide_empty'       => false,
    'taxonomy'         => 'menu_category',
    'hierarchical'     => 1,
    'show_count'       => 0
)); ?>

<?php 

foreach ($the_menus as $the_menu) {

    $the_menu_args = array(
        'posts_per_page'    => -1,
        'post_type'         => 'menu_item',
        'showposts'         => -1,
        'post_status'       => 'publish',
        'cat'               => $the_menu->cat_ID
    );
    $term           = get_queried_object();
    $the_menu_tasks = new WP_Query($the_menu_args);
    $the_menu_slug  = $the_menu->slug;
    $the_menu_ID    = $the_menu->cat_ID;
    $page_slug      = $term->slug;
    ?>
    <li>
        <a href="<?php echo get_category_link( $the_menu_ID ); ?>">
            <?php echo $the_menu->cat_name; ?>
        </a>
    </li>
    <?php 
} 
wp_reset_postdata(); 

Проблема в том, что этот цикл ничего не возвращает.

Если я удаляю 'taxonomy' => 'menu_category' из $the_menus, а также удаляю 'post_type' => 'menu_item' из $the_menu_args, он возвращает все обычные категории и сообщения (вызнаете, обычные посты и категории).

Так что кажется, что он не работает, только когда я указываю пользовательскую таксономию и тип пользовательской записи.

Что я делаю не так?

PS: «Пункты меню», упомянутые здесь, предназначены для меню ресторана, которое я пытаюсь создать.Это не имеет ничего общего с меню WordPress: -P

1 Ответ

0 голосов
/ 11 апреля 2019

Чтобы получить сообщения из пользовательской таксономии, нам нужно передать налоговый запрос в аргументах Попробуйте приведенный ниже код. Это прекрасно работает на моем конце.

<?php
$the_menus = get_terms( array(
    'taxonomy' => 'menu_category',
    'hide_empty' => false,
    ));
foreach ($the_menus as $the_menu) {
    $args =  array(
        'post_type' => 'menu_item',
        'posts_per_page'    => -1,
        'post_status'       => 'publish',
        'tax_query' => array(
            array (
                'taxonomy' => 'menu_category',
                'field' => 'term_id',
                'terms' => $the_menu->term_id,
            )
        ),
    );
    $term           = get_queried_object();
    $the_menu_tasks = new WP_Query($args);
    $the_menu_slug  = $the_menu->slug;
    $the_menu_ID    = $the_menu->term_id;
    $page_slug      = $term->slug;
    ?>
    <!--  get category names here     -->
    <li>
        <a href="<?php echo get_term_link( $the_menu_ID ); ?>">
            <?php echo $the_menu->name; ?>
        </a>
    </li>
    <!--  get category names here   //END    --> 
    <?php 
    /*  GET posts according to custom taxonomy id   */
    if ($the_menu_tasks->have_posts()){
      while($the_menu_tasks->have_posts()) : $the_menu_tasks->the_post();

        echo get_the_title() .'<br />';
      endwhile;
    }else{
        echo "Sorry! Posts not found";

    }
    /*  GET posts according to custom taxonomy id  -- END  */
} 
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...