在页面模板中显示特定分类法(类别)
Show a specific taxonomy (Category) in a page template
我有一个名为短期课程的自定义 post 类型,我向其中添加了一个名为课程类型的自定义分类法,这使我能够对课程进行分类...
我正在尝试创建一个页面模板,该模板将显示具有单一分类法(类别)的所有课程。在这种情况下,我想显示所有已分配分类法(类别)Adobe 的课程...我尝试了一些不同的方法,但这是我的最新代码:
<?php
// get the custom post type's taxonomy terms
$custom_taxterms = wp_get_object_terms( $post->ID, 'adobe', array('fields' => 'ids') );
// arguments
$args = array(
'post_type' => 'short_courses',
'post_status' => 'publish',
'posts_per_page' => 20, // you may edit this number
'orderby' => 'rand',
'tax_query' => array(
array(
'taxonomy' => 'adobe',
'field' => 'id',
'terms' => $custom_taxterms
)
),
'post__not_in' => array ($post->ID),
);
$related_items = new WP_Query( $args );
// loop over query
if ($related_items->have_posts()) :
echo '<ul>';
while ( $related_items->have_posts() ) : $related_items->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
echo '</ul>';
endif;
// Reset Post Data
wp_reset_postdata();
?>
它什么都没拉...
我也试过这个代码:
<?php
$args = array(
'post_type' => 'short_courses',
'orderby' => 'title',
'order' => 'ASC',
'product_categories' => 'adobe'
);
$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_url = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail-size', true );
?>
<p><a href="<?php the_permalink(); ?>"><img src="<?php the_field('image'); ?>" alt="<?php the_title();?> graphic"></a></p>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<?php $products_count = $the_query->current_post + 1; ?>
<?php if ( $products_count % 4 == 0): ?>
<?php endif; ?>
<?php endwhile; endif; ?>
但是这段代码贯穿了所有的短期课程,而不仅仅是 Adobe 的...
谁能告诉我哪里出错了?
你注意到这条线了吗?
<?php if ( have_posts() ) : while
可以改成
吗
<?php if ( $the_query->have_posts() ) : while
看看是否应用了过滤器? WordPress 具有全局 post 函数,例如 get_the_title(),这可能会干扰您的自定义查询对象,例如您正在使用的对象 $ the_query.
我还建议您删除 while 之前的 if 语句,以提高代码的可读性。如果查询没有任何 posts,则 while 循环将不会在页面上产生任何输出,因此需要 if 语句。
整个代码就变成了
<?php
$args = array(
'post_type' => 'short_courses',
'orderby' => 'title',
'order' => 'ASC',
'product_categories' => 'adobe'
);
$the_query = new WP_Query( $args );
?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_url = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail-size', true );
?>
<p><a href="<?php the_permalink(); ?>"><img src="<?php the_field('image'); ?>" alt="<?php the_title();?> graphic"></a></p>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<?php $products_count = $the_query->current_post + 1; ?>
<?php if ( $products_count % 4 == 0): ?>
<?php endif; ?>
<?php endwhile; ?>
请确保您在 'product_categories' => 'adobe' 中使用的分类名称与您在 register_taxonomy 函数即确保你有 register_taxonomy('product_categories', array('short_courses'), $args ); 如果您在 product_categories 上还有其他内容,请在查询中使用它。希望这有帮助。
好的,我设法解决了这个问题 - 这只是一个小错误。在上面的第二批代码中,product_categories 的部分需要更改为 course_type!所以这是新的工作代码:
<?php
$args = array(
'post_type' => 'short_courses',
'orderby' => 'title',
'order' => 'ASC',
'course_type' => 'adobe'
);
$the_query = new WP_Query( $args );
?>
<?php if ( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_url = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail-size', true );
?>
<p><a href="<?php the_permalink(); ?>"><img src="<?php the_field('image'); ?>" alt="<?php the_title();?> graphic"></a></p>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<?php $products_count = $the_query->current_post + 1; ?>
<?php if ( $products_count % 4 == 0): ?>
<?php endif; ?>
<?php endwhile; endif; ?>
我有一个名为短期课程的自定义 post 类型,我向其中添加了一个名为课程类型的自定义分类法,这使我能够对课程进行分类...
我正在尝试创建一个页面模板,该模板将显示具有单一分类法(类别)的所有课程。在这种情况下,我想显示所有已分配分类法(类别)Adobe 的课程...我尝试了一些不同的方法,但这是我的最新代码:
<?php
// get the custom post type's taxonomy terms
$custom_taxterms = wp_get_object_terms( $post->ID, 'adobe', array('fields' => 'ids') );
// arguments
$args = array(
'post_type' => 'short_courses',
'post_status' => 'publish',
'posts_per_page' => 20, // you may edit this number
'orderby' => 'rand',
'tax_query' => array(
array(
'taxonomy' => 'adobe',
'field' => 'id',
'terms' => $custom_taxterms
)
),
'post__not_in' => array ($post->ID),
);
$related_items = new WP_Query( $args );
// loop over query
if ($related_items->have_posts()) :
echo '<ul>';
while ( $related_items->have_posts() ) : $related_items->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
echo '</ul>';
endif;
// Reset Post Data
wp_reset_postdata();
?>
它什么都没拉...
我也试过这个代码:
<?php
$args = array(
'post_type' => 'short_courses',
'orderby' => 'title',
'order' => 'ASC',
'product_categories' => 'adobe'
);
$the_query = new WP_Query( $args );
?>
<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_url = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail-size', true );
?>
<p><a href="<?php the_permalink(); ?>"><img src="<?php the_field('image'); ?>" alt="<?php the_title();?> graphic"></a></p>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<?php $products_count = $the_query->current_post + 1; ?>
<?php if ( $products_count % 4 == 0): ?>
<?php endif; ?>
<?php endwhile; endif; ?>
但是这段代码贯穿了所有的短期课程,而不仅仅是 Adobe 的...
谁能告诉我哪里出错了?
你注意到这条线了吗?
<?php if ( have_posts() ) : while
可以改成
吗<?php if ( $the_query->have_posts() ) : while
看看是否应用了过滤器? WordPress 具有全局 post 函数,例如 get_the_title(),这可能会干扰您的自定义查询对象,例如您正在使用的对象 $ the_query.
我还建议您删除 while 之前的 if 语句,以提高代码的可读性。如果查询没有任何 posts,则 while 循环将不会在页面上产生任何输出,因此需要 if 语句。
整个代码就变成了
<?php
$args = array(
'post_type' => 'short_courses',
'orderby' => 'title',
'order' => 'ASC',
'product_categories' => 'adobe'
);
$the_query = new WP_Query( $args );
?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_url = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail-size', true );
?>
<p><a href="<?php the_permalink(); ?>"><img src="<?php the_field('image'); ?>" alt="<?php the_title();?> graphic"></a></p>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<?php $products_count = $the_query->current_post + 1; ?>
<?php if ( $products_count % 4 == 0): ?>
<?php endif; ?>
<?php endwhile; ?>
请确保您在 'product_categories' => 'adobe' 中使用的分类名称与您在 register_taxonomy 函数即确保你有 register_taxonomy('product_categories', array('short_courses'), $args ); 如果您在 product_categories 上还有其他内容,请在查询中使用它。希望这有帮助。
好的,我设法解决了这个问题 - 这只是一个小错误。在上面的第二批代码中,product_categories 的部分需要更改为 course_type!所以这是新的工作代码:
<?php
$args = array(
'post_type' => 'short_courses',
'orderby' => 'title',
'order' => 'ASC',
'course_type' => 'adobe'
);
$the_query = new WP_Query( $args );
?>
<?php if ( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_url = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail-size', true );
?>
<p><a href="<?php the_permalink(); ?>"><img src="<?php the_field('image'); ?>" alt="<?php the_title();?> graphic"></a></p>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<?php $products_count = $the_query->current_post + 1; ?>
<?php if ( $products_count % 4 == 0): ?>
<?php endif; ?>
<?php endwhile; endif; ?>