#wordpress #custom-post-type #custom-wordpress-pages
#wordpress #пользовательский тип записи #пользовательские-wordpress-страницы
Вопрос:
Я пытаюсь создать шаблон для пользовательского типа записи и извлекать только одну категорию из этого типа записи под названием «заказано». Приведенный ниже код по какой-то причине извлекает все записи из пользовательского типа записи. Что я делаю не так?
<?php
/**
* Template Name: Portfolio Masonry Commissioned
*
* @package Ridge
* @since 1.0
*/
get_header();
?>
<div id="primary" class="content-area middle portfolio">
<main id="main" class="site-main " role="main">
<?php
// Don't show the description for the front page
if( is_page() ) {
while ( have_posts() ) : the_post(); ?>
<div id="portfolio-content">
<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>
</header>
<?php the_content(); ?>
</div>
<?php endwhile;
} // if
/**
* Set up the skills and projects
*
* @see inc/template-tags.php
*/
// Get the projects WP_Query object
$args = array(
'post_type' => 'project',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'ASC',
'cat' => 'commissioned',
);
$loop = new WP_Query( $args );
?>
<div id="projects" class="masonry">
<div class="thumbs clearfix">
<?php while ( $loop->have_posts()) : $loop->the_post();
global $ttrust_config;
// Get the skills for each project for the .js data attribute
$skills = ridge_get_tax( $post );
get_template_part( 'content', 'project-small-masonry' ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
</div><!-- .thumbs -->
</div><!-- #projects -->
</main><!-- .site-main -->
</div><!-- .content-area -->
<?php get_footer(); ?>
Обновление: вот как настроен CPT проектов.
public function project_init() {
// Define the settings
$settings = array(
'labels' => array(
'name' => __( 'Projects', $this->textdomain ),
'singular_name' => __( 'Project', $this->textdomain ),
'add_new' => __( 'Add New', $this->textdomain ),
'add_new_item' => __( 'Add New Project', $this->textdomain ),
'edit' => __( 'Edit', $this->textdomain ),
'edit_item' => __( 'Edit Project', $this->textdomain ),
'new_item' => __( 'New Project', $this->textdomain ),
'view' => __( 'View Project', $this->textdomain ),
'view_item' => __( 'View Project', $this->textdomain ),
'search_items' => __( 'Search Projects', $this->textdomain ),
'not_found' => __( 'No projects found', $this->textdomain ),
'not_found_in_trash' => __( 'No projects found in Trash', $this->textdomain ),
'parent' => __( 'Parent Project', $this->textdomain ),
),
'public' =>true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'menu_icon' => get_template_directory_uri(). '/img/blue-folder-stand.png',
'taxonomies' => array( 'skills' ),
'supports' => array( 'title', 'editor', 'thumbnail', 'comments', 'revisions', 'excerpt' ),
'rewrite' => array(
'slug' => 'project'
)
); // End $settings
Обновление: заработало!
$args = array(
'post_type' => 'project',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'ASC',
'tax_query' => array(
array (
'taxonomy' => 'skill',
'field' => 'slug',
'terms' => 'commissioned'
)
)
);
Комментарии:
1. Пользовательский тип записи, использовать таксономию в запросе вместо cat? Зависит от того, как настроен ваш CPT
2. @DanielVickers Похоже, CPT настроен на использование таксономий. Я отредактировал сообщение, чтобы включить код. Я попытался заменить
cat
наtaxonomy
, но страница по -прежнему удаляет все сообщения сprojects
.3. Нет проблем, рад, что у вас это работает 🙂
Ответ №1:
Просто добавьте 'category_name' => 'commissioned'
в $args
массив (вместо cat => ...
)
Комментарии:
1. Мне не нужно использовать
tax_query
, поскольку это CPT?
Ответ №2:
Получилось!
Вот как я излагаю свои аргументы.
$args = array(
'post_type' => 'project',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'ASC',
'tax_query' => array(
array (
'taxonomy' => 'skill',
'field' => 'slug',
'terms' => 'commissioned'
)
)
);