根据 Wordpress 中选定的自定义分类显示自定义 Post
Show Custom Post based on selected custom taxonomy in Wordpress
在我正在构建的当前网站中,我构建了以下功能。
当前情况,以便更好地理解问题。
有一个名为博客的页面。此页面显示列表中的所有博客 (posts)。 post 拥有的所有类别都在旁边。用户可以select一个类别。一旦用户点击它,用户将转到 category.php 并查看所有具有该特定类别的 post。
我想创建相同的场景,但不是使用自定义 post 类型。我有一个模板部分; 'offer-list-template.php'
offer-list-template.php(这里我获取所有offer并显示);
<?php
// set up or arguments for our custom query
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query_args = array(
'post_type' => 'Offers',
'posts_per_page' => 10,
'paged' => $paged
);
// create a new instance of WP_Query
$the_query = new WP_Query( $query_args );
?>
<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); // run the loop ?>
<?php
//$objectData is used in post-listing-item.php
$objectData->title = get_the_title($post);
$objectData->content = get_the_content($post);
$objectData->permalink = get_the_permalink($post);
$objectData->thumbnail = get_the_post_thumbnail($post);
$objectData->posttype = get_post_type($post);
include(locate_template('template-parts/post-listing-item.php'));
?>
<?php endwhile; ?>
在同一个文件中有显示类别的旁边。 offer_category 是分类标准。
<?php $terms = get_terms( 'offer_category' );
foreach ( $terms as $term ) {
// The $term is an object, so we don't need to specify the $taxonomy.
$term_link = get_term_link( $term );
// If there was an error, continue to the next term.
if ( is_wp_error( $term_link ) ) {
continue;
}
// We successfully got a link. Print it out.
echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '</a><span>('. $term->count . ')</span></li>';
}
?>
</ul
结果是:
如果用户点击类别,它会转到:taxonomy-offer-category.php (taxonomy-slug.php)
这里我需要显示具有 selected 类别的 posts(post_type->优惠)。
注册自定义 post 类型:
//Register Custom post type for Offers.
function create_posttype_offer() {
$args = array(
'labels' => array(
'name' => __('Offers', ''),
'singular_name' => __('Offer'),
'all_items' => __('All Offers'),
'add_new_item' => __('Add New Offer'),
'edit_item' => __('Edit Offer'),
'view_item' => __('View Offer')
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'Offers'),
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'capability_type' => 'page',
'supports' => array('title', 'editor', 'thumbnail'),
'exclude_from_search' => true,
'menu_position' => 70,
'has_archive' => true,
'menu_icon' => 'dashicons-star-filled'
);
register_post_type('Offers', $args);
}
add_action( 'init', 'create_posttype_offer');
// Register Custom Categoeries for Custom Post Type Offers
function taxonomies_offer() {
$labels = array(
'name' => _x( 'Categories', 'taxonomy general name' ),
'singular_name' => _x( 'Category', 'taxonomy singular name' ),
'search_items' => __( 'Search Categories' ),
'all_items' => __( 'All Categories' ),
'parent_item' => __( 'Parent Category' ),
'parent_item_colon' => __( 'Parent Category:' ),
'edit_item' => __( 'Edit Category' ),
'update_item' => __( 'Update Category' ),
'add_new_item' => __( 'Add New Category' ),
'new_item_name' => __( 'New Category' ),
'menu_name' => __( 'Categories' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
);
register_taxonomy( 'offer_category', 'offers', $args );
}
add_action( 'init', 'taxonomies_offer', 0 );
当我使用默认的 post 类型并调用具有以下代码的 category.php 时,将显示带有 selected 类别的 post。但是对于自定义 post 类型,我找不到管理它的方法。
<?php if (have_posts() ) : while ( have_posts() ) : the_post(); // run the loop ?>
<?php
//$objectData is used in post-listing-item.php
$objectData->title = get_the_title($post);
$objectData->content = get_the_content($post);
$objectData->permalink = get_the_permalink($post);
$objectData->thumbnail = get_the_post_thumbnail($post);
$objectData->posttype = get_post_type($post);
include(locate_template('template-parts/post-listing-item.php'));
?>
<?php endwhile; ?>
这是 post-listing-item(视图)
<article class="post-item">
<figure>
<?php echo $objectData->thumbnail ?>
</figure>
<div class="content">
<a href="<?php echo $objectData->permalink ?>">
<h2><?php echo $objectData->title ?></h2>
</a>
<p><?php echo $objectData->content ?></p>
<div class="read-more-button">
<a href="<?php echo $objectData->permalink ?>">read more
<span>
<svg class="next-arrow"><use xlink:href="#next-arrow" /></svg>
</span>
</a>
</div>
</div>
</article>
据了解,您必须通过以下代码查询才能加载所有自定义分类 post:
$terms = get_terms(
array(
'taxonomy' => 'offer_category',
'hide_empty' => false,
)
);
foreach ($terms as $term){
$args = array(
'post_type' => 'Offers',
'tax_query' => array(
array(
'taxonomy' => 'offer_category',
'field' => 'slug',
'terms' => $term->slug,
),
),
);
$query = new WP_Query($args);
if($query->have_posts()): while($query->have_posts()): $query->the_post();
the_title();
the_content();
endwhile;
wp_reset_postdata();
endif;
}
希望这对你有用
找到了!
我从 url 中获得了分类法和 slug,并在查询中使用了它。
<?php
$term_slug = get_query_var( 'term' );
$taxonomyName = get_query_var( 'taxonomy' );
$the_query = new WP_Query( array(
'post_type' => 'offers',
'tax_query' => array(
array (
'taxonomy' => $taxonomyName,
'field' => 'slug',
'terms' => $term_slug,
)
),
));
?>
<ul>
<?php while($the_query->have_posts()) : $the_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; wp_reset_query(); ?>
</ul>
在我正在构建的当前网站中,我构建了以下功能。
当前情况,以便更好地理解问题。
有一个名为博客的页面。此页面显示列表中的所有博客 (posts)。 post 拥有的所有类别都在旁边。用户可以select一个类别。一旦用户点击它,用户将转到 category.php 并查看所有具有该特定类别的 post。
我想创建相同的场景,但不是使用自定义 post 类型。我有一个模板部分; 'offer-list-template.php'
offer-list-template.php(这里我获取所有offer并显示);
<?php
// set up or arguments for our custom query
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query_args = array(
'post_type' => 'Offers',
'posts_per_page' => 10,
'paged' => $paged
);
// create a new instance of WP_Query
$the_query = new WP_Query( $query_args );
?>
<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); // run the loop ?>
<?php
//$objectData is used in post-listing-item.php
$objectData->title = get_the_title($post);
$objectData->content = get_the_content($post);
$objectData->permalink = get_the_permalink($post);
$objectData->thumbnail = get_the_post_thumbnail($post);
$objectData->posttype = get_post_type($post);
include(locate_template('template-parts/post-listing-item.php'));
?>
<?php endwhile; ?>
在同一个文件中有显示类别的旁边。 offer_category 是分类标准。
<?php $terms = get_terms( 'offer_category' );
foreach ( $terms as $term ) {
// The $term is an object, so we don't need to specify the $taxonomy.
$term_link = get_term_link( $term );
// If there was an error, continue to the next term.
if ( is_wp_error( $term_link ) ) {
continue;
}
// We successfully got a link. Print it out.
echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '</a><span>('. $term->count . ')</span></li>';
}
?>
</ul
结果是:
如果用户点击类别,它会转到:taxonomy-offer-category.php (taxonomy-slug.php)
这里我需要显示具有 selected 类别的 posts(post_type->优惠)。
注册自定义 post 类型:
//Register Custom post type for Offers.
function create_posttype_offer() {
$args = array(
'labels' => array(
'name' => __('Offers', ''),
'singular_name' => __('Offer'),
'all_items' => __('All Offers'),
'add_new_item' => __('Add New Offer'),
'edit_item' => __('Edit Offer'),
'view_item' => __('View Offer')
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'Offers'),
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'capability_type' => 'page',
'supports' => array('title', 'editor', 'thumbnail'),
'exclude_from_search' => true,
'menu_position' => 70,
'has_archive' => true,
'menu_icon' => 'dashicons-star-filled'
);
register_post_type('Offers', $args);
}
add_action( 'init', 'create_posttype_offer');
// Register Custom Categoeries for Custom Post Type Offers
function taxonomies_offer() {
$labels = array(
'name' => _x( 'Categories', 'taxonomy general name' ),
'singular_name' => _x( 'Category', 'taxonomy singular name' ),
'search_items' => __( 'Search Categories' ),
'all_items' => __( 'All Categories' ),
'parent_item' => __( 'Parent Category' ),
'parent_item_colon' => __( 'Parent Category:' ),
'edit_item' => __( 'Edit Category' ),
'update_item' => __( 'Update Category' ),
'add_new_item' => __( 'Add New Category' ),
'new_item_name' => __( 'New Category' ),
'menu_name' => __( 'Categories' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
);
register_taxonomy( 'offer_category', 'offers', $args );
}
add_action( 'init', 'taxonomies_offer', 0 );
当我使用默认的 post 类型并调用具有以下代码的 category.php 时,将显示带有 selected 类别的 post。但是对于自定义 post 类型,我找不到管理它的方法。
<?php if (have_posts() ) : while ( have_posts() ) : the_post(); // run the loop ?>
<?php
//$objectData is used in post-listing-item.php
$objectData->title = get_the_title($post);
$objectData->content = get_the_content($post);
$objectData->permalink = get_the_permalink($post);
$objectData->thumbnail = get_the_post_thumbnail($post);
$objectData->posttype = get_post_type($post);
include(locate_template('template-parts/post-listing-item.php'));
?>
<?php endwhile; ?>
这是 post-listing-item(视图)
<article class="post-item">
<figure>
<?php echo $objectData->thumbnail ?>
</figure>
<div class="content">
<a href="<?php echo $objectData->permalink ?>">
<h2><?php echo $objectData->title ?></h2>
</a>
<p><?php echo $objectData->content ?></p>
<div class="read-more-button">
<a href="<?php echo $objectData->permalink ?>">read more
<span>
<svg class="next-arrow"><use xlink:href="#next-arrow" /></svg>
</span>
</a>
</div>
</div>
</article>
据了解,您必须通过以下代码查询才能加载所有自定义分类 post:
$terms = get_terms(
array(
'taxonomy' => 'offer_category',
'hide_empty' => false,
)
);
foreach ($terms as $term){
$args = array(
'post_type' => 'Offers',
'tax_query' => array(
array(
'taxonomy' => 'offer_category',
'field' => 'slug',
'terms' => $term->slug,
),
),
);
$query = new WP_Query($args);
if($query->have_posts()): while($query->have_posts()): $query->the_post();
the_title();
the_content();
endwhile;
wp_reset_postdata();
endif;
}
希望这对你有用
找到了!
我从 url 中获得了分类法和 slug,并在查询中使用了它。
<?php
$term_slug = get_query_var( 'term' );
$taxonomyName = get_query_var( 'taxonomy' );
$the_query = new WP_Query( array(
'post_type' => 'offers',
'tax_query' => array(
array (
'taxonomy' => $taxonomyName,
'field' => 'slug',
'terms' => $term_slug,
)
),
));
?>
<ul>
<?php while($the_query->have_posts()) : $the_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; wp_reset_query(); ?>
</ul>