Intereting Posts
Лучший запрос вложений WordPress, чем этот Когда следует использовать add_action при регистрации / вставка сценариев Остановить wordpress от префикса URL Куда поместить код API? WP frontend выходных полей пользовательских текстовых полей, не соблюдающих разрывы строк. В admin это нормально Предельная контактная форма 7 крючок для конкретной формы captcha не работает в моем настраиваемом плагине Связанные сообщения отображаются случайным образом по тегу Почему я вижу «истину» рядом с этими метками времени? Зачем переписывать правило для страницы не для персонализированного сообщения типа post? измените $ content_width Как добавить атрибут к выводу с помощью wp_video_shortcode add_filter Отображать дочерние сообщения из определенной категории Какова наилучшая практика для ограничения раздела для зарегистрированных пользователей? получение содержимого страницы на AJAX

Категория пользовательских сообщений

Я создал тему с пользовательским типом сообщения, называемым «проект», и есть проблема. Я хочу показать 5 различных категорий типа пользовательских сообщений на странице в разных частях, например, сообщения, которые будут отображаться на страницах из соответствующих категорий. Есть ли решение?

Это мой пользовательский код типа сообщения с пользовательской таксономией

<?php /** * Registers a custom post type. */ function Project_post_type() { register_post_type( 'Project', array( 'labels' => array( 'name' => __('Project', 'text_domain'), 'singular_name' => __('Project', 'text_domain'), 'menu_name' => __('Project', 'text_domain'), 'name_admin_bar' => __('Project Item', 'text_domain'), 'all_items' => __('All Items', 'text_domain'), 'add_new' => _x('Add New', 'prefix_portfolio', 'text_domain'), 'add_new_item' => __('Add New Item', 'text_domain'), 'edit_item' => __('Edit Item', 'text_domain'), 'view_item' => __('View Item', 'text_domain'), 'search_items' => __('Search Items', 'text_domain'), 'not_found' => __('No items found.', 'text_domain'), 'not_found_in_trash' => __('No items found in Trash.', 'text_domain'), 'parent_item_colon' => __('Parent Items:', 'text_domain'), ), 'public' => true, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields', ), 'taxonomies' => array( 'Project_categories', ), 'menu_icon' => get_template_directory_uri() . '/img/project-icon.png', 'has_archive' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'Project', ), ) ); } add_action('init', 'Project_post_type'); /** * Registers a custom taxonomy. */ function Project_taxonomy() { register_taxonomy( 'Project_categories', array( 'Project', ), array( 'labels' => array( 'name' => _x('Categories', 'prefix_portfolio', 'text_domain'), 'singular_name' => _x('Category', 'prefix_portfolio', 'text_domain'), 'menu_name' => __('Categories', 'text_domain'), 'all_items' => __('All Categories', 'text_domain'), 'edit_item' => __('Edit Category', 'text_domain'), 'view_item' => __('View Category', 'text_domain'), 'update_item' => __('Update Category', 'text_domain'), 'add_new_item' => __('Add New Category', 'text_domain'), 'new_item_name' => __('New Category Name', 'text_domain'), 'parent_item' => __('Parent Category', 'text_domain'), 'parent_item_colon' => __('Parent Category:', 'text_domain'), 'search_items' => __('Search Categories', 'text_domain'), ), 'show_admin_column' => true, 'hierarchical' => true, 'rewrite' => array( 'slug' => 'portfolio/category', ), ) ); } add_action('init', 'Project_taxonomy', 0); function theme_prefix_rewrite_flush() { flush_rewrite_rules(); } add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' ); 

Вот мой код для отображения одной категории

 $args = array( 'post_type' => 'project', 'posts_per_page' => 200, 'cat' => 'Initiatieffase' ); $loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); echo '<li><a href="' . the_permalink() . '">' . the_post_thumbnail() . '</a></li>'; endwhile; wp_reset_query(); 

РЕДАКТИРОВАТЬ

Это моя новая функция типа сообщения

 <?php // Register Custom Post Type function project_post_type() { $labels = array( 'name' => _x( 'Projects', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Project', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Project', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), ); $args = array( 'label' => __( 'project_post_type', 'text_domain' ), 'description' => __( 'Project Description', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', ), 'taxonomies' => array( 'category', 'post_tag' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_icon' => get_template_directory_uri() . '/img/project-icon.png', 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'post', ); register_post_type( 'project_post_type', $args ); } // Hook into the 'init' action add_action( 'init', 'project_post_type', 0 ); // Register Custom Taxonomy function project_taxonomy() { $labels = array( 'name' => _x( 'Projects', 'Taxonomy General Name', 'text_domain' ), 'singular_name' => _x( 'Project', 'Taxonomy Singular Name', 'text_domain' ), 'menu_name' => __( 'Project', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'parent_item' => __( 'Parent Item', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'new_item_name' => __( 'New Item Name', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ), 'search_items' => __( 'Search Items', 'text_domain' ), 'add_or_remove_items' => __( 'Add or remove items', 'text_domain' ), 'choose_from_most_used' => __( 'Choose from the most used items', 'text_domain' ), 'not_found' => __( 'Not Found', 'text_domain' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'show_tagcloud' => true, ); register_taxonomy( 'project', array( 'post' ), $args ); } // Hook into the 'init' action add_action( 'init', 'project_taxonomy', 0 ); function theme_prefix_rewrite_flush() { flush_rewrite_rules(); } add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' ); 

и это функция шаблона

 <?php $args = array( 'post_type' => 'project', 'tax_query' => array( array( 'taxonomy' => 'Initiatieffase', 'field' => 'slug', 'terms' => 'bob' ) ) ); $query = new WP_Query( $args ); $loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></li> <?php endwhile; ?> <?php wp_reset_postdata(); ?> 

но он все еще ничего не показывает


Это моя новая функция типа сообщения

 <?php // Register Custom Post Type function project_post_type() { $labels = array( 'name' => _x( 'Projects', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Project', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Project', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), ); $args = array( 'label' => __( 'project_post_type', 'text_domain' ), 'description' => __( 'Project Description', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', ), 'taxonomies' => array( 'category', 'post_tag' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_icon' => get_template_directory_uri() . '/img/project-icon.png', 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'post', ); register_post_type( 'project_post_type', $args ); } // Hook into the 'init' action add_action( 'init', 'project_post_type', 0 ); // Register Custom Taxonomy function project_taxonomy() { $labels = array( 'name' => _x( 'Projects', 'Taxonomy General Name', 'text_domain' ), 'singular_name' => _x( 'Project', 'Taxonomy Singular Name', 'text_domain' ), 'menu_name' => __( 'Project', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'parent_item' => __( 'Parent Item', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'new_item_name' => __( 'New Item Name', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ), 'search_items' => __( 'Search Items', 'text_domain' ), 'add_or_remove_items' => __( 'Add or remove items', 'text_domain' ), 'choose_from_most_used' => __( 'Choose from the most used items', 'text_domain' ), 'not_found' => __( 'Not Found', 'text_domain' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'show_tagcloud' => true, ); register_taxonomy( 'project', array( 'post' ), $args ); } // Hook into the 'init' action add_action( 'init', 'project_taxonomy', 0 ); function theme_prefix_rewrite_flush() { flush_rewrite_rules(); } add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' ); 

и это функция шаблона

 <?php $args = array( 'post_type' => 'project', 'tax_query' => array( array( 'taxonomy' => 'Initiatieffase', 'field' => 'slug', 'terms' => 'bob' ) ) ); $query = new WP_Query( $args ); $loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a></li> <?php endwhile; ?> <?php wp_reset_postdata(); ?> 

но он все еще ничего не показывает

У вас серьезные проблемы с вашими соглашениями об именах, структурой ваших функций, неправильным использованием зарезервированных имен и неправильными значениями, переданными параметрам

Во-первых, обозначение ковенев. Названия функций должны быть строчными буквами, не должны начинаться с буквы, а слова должны быть разделены символом подчеркивания ( _ ). То же самое относится к пользовательским типам почтового типа и таксономии. Отбросьте заглавные буквы. То же самое касается правил перезаписи

Во-вторых, не создавайте несколько экземпляров, которые нужно подключить к одной и той же функции. Правильно сгруппируйте свой код вместе в одну функцию и добавьте эту функцию в свой предполагаемый крючок, в этом случае init

В-третьих, не используйте зарезервированные имена, даже для перезаписи пули. Это запутывает и может конфликтовать позже с иерархией шаблонов. В вашем случае вы используете category , которая является зарезервированным именем.

Наконец, посмотрите на код для правильных значений, которые должны быть переданы конкретному параметру. cat исключает только идентификаторы категории, а не слизняки или имена. BTW, вы используете пользовательскую таксономию, поэтому вам следует использовать параметр tax_query а не параметры категории.

Для справки

  • register_post_type

  • register_taxonomy

  • Зарезервированные имена

  • Стандарты кодирования – Соглашения об именах

  • WP_Query

РЕДАКТИРОВАТЬ

Одна вещь, которую я забыл добавить, wp_reset_query , предположительно, будет использоваться с query_posts , которую вы никогда не должны использовать. Всякий раз, когда вы используете WP_Query и get_posts , вам нужно сбросить свой пользовательский запрос с помощью wp_reset_postdata

EDIT 2

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

  • Когда вы создаете пользовательскую таксономию, и вам нужно, чтобы она функционировала как встроенные категории, вам нужно установить hierarchical значение true. Когда вы устанавливаете значение false, ваша пользовательская таксономия ведет себя как встроенные теги post

  • Всякий раз, когда вы создаете «категорию» в пользовательской таксономии, она называется термином.

  • Ваша таксономия называется project , но вы передаете « Initiatieffase (которая, я думаю, может быть термином project таксономии для параметра таксономии.

  • Когда вы устанавливаете поле в вашем tax_query в slug , вы должны использовать slug вашего термина в параметре terms , а не в имени термина.

  • Ваш собственный тип сообщения называется project_post_type но вы передаете project (который является вашим именем таксономии) параметру post_type в пользовательском запросе

Вот как выглядит ваш код

 <?php // Register Custom Post Type function create_cpt_and_ct() { $labels1 = array( 'name' => _x( 'Projects', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Project', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Project', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), ); $args1 = array( 'label' => __( 'project_post_type', 'text_domain' ), 'description' => __( 'Project Description', 'text_domain' ), 'labels' => $labels1, 'supports' => array( 'title', 'editor', 'thumbnail', ), 'taxonomies' => array( 'project' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_icon' => get_template_directory_uri() . '/img/project-icon.png', 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'post', ); register_post_type( 'project_post_type', $args1 ); $labels2 = array( 'name' => _x( 'Projects', 'Taxonomy General Name', 'text_domain' ), 'singular_name' => _x( 'Project', 'Taxonomy Singular Name', 'text_domain' ), 'menu_name' => __( 'Project', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'parent_item' => __( 'Parent Item', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'new_item_name' => __( 'New Item Name', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ), 'search_items' => __( 'Search Items', 'text_domain' ), 'add_or_remove_items' => __( 'Add or remove items', 'text_domain' ), 'choose_from_most_used' => __( 'Choose from the most used items', 'text_domain' ), 'not_found' => __( 'Not Found', 'text_domain' ), ); $args2 = array( 'labels' => $labels2, 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'show_tagcloud' => true, ); register_taxonomy( 'project', 'project_post_type', $args2 ); } // Hook into the 'init' action add_action( 'init', 'create_cpt_and_ct', 0 ); function theme_prefix_rewrite_flush() { flush_rewrite_rules(); } add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' ); 

И для вашего tax_query

 <?php $args = array( 'post_type' => 'project_post_type', 'tax_query' => array( array( 'taxonomy' => 'project', 'field' => 'slug', 'terms' => 'Initiatieffase' //THIS MUST BE YOUR TERM SLUG, NOT NAME ) ) ); $query = new WP_Query( $args ); $loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a> </li> <?php endwhile; wp_reset_postdata(); ?> 

ДОПОЛНИТЕЛЬНОЕ ЧТЕНИЕ

– Отладка в WordPress

ИЗМЕНИТЬ 3

Для правильного именования и правильного использования шаблонов перейдите и проверьте иерархию шаблонов в кодексе. Это должно помочь вам в будущем

Ваша единственная страница будет одиночной – {$ post_type} .php, которая переводится в single-project_post_type.php. То же самое касается вашей страницы архива.

Что касается вашей пользовательской страницы таксономии, вы можете использовать таксономию – $ taxonomy.php, которая переводится как taxonomy-project.php