我有一个结构化的博客帖子有类别,这些类别的slug与一些自定义帖子后标题相同。
我想使用这些匹配的slugs运行从帖子到自定义帖子页面的链接。
在single.php中我试图运行这段代码......但是不返回自定义帖子的信息,而是返回当前帖子的信息
<?php
$categories = get_the_category();
if ( ! empty( $categories ) ) {
foreach( $categories as $category ) {
$current_slug = $category->slug;
$args = array(
'post_type' => 'community',
'name' => $current_slug
);
$cat_query = new WP_Query($args);
if ( $cat_query->have_posts() ) {
the_title( sprintf( '<h3 class="post-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h3>');
wp_reset_postdata();
}
}
}
?>
我对这段代码的希望是 - >如果帖子被赋予了一个带有slug的类别:'cat-one'然后在帖子的顶部将是CAT ONE页面的链接(这是一个自定义的帖子类型页面,带有url .... / communities / cat-one。
这绝对应该是可能的。但是,您的代码存在一些问题,我已经清理了其他一些问题。
你已经设置了代码来循环遍历类别,但你在name
args中使用WP_Query()
,并且没有为结果设置循环。根据WP_Query()
文档,name
将返回一个帖子 - 如果你想要不止一个,(自WP 4.4起)你可以使用post_name__in
代替。此外,也就是代码中较大的问题是,你永远不会在$cat_query
中设置内部变量。我还添加了一个while
循环,因此它将吐出多个类别链接。
如果没有使用$query->the_post()
方法定义内部变量(或者将$post_id
参数传递给它们),像the_title()
和get_permalink()
这样的post变量函数将使用当前的帖子,这就是你现在所看到的。
这应该让你开始:
if( $categories = get_the_category() ){
foreach( $categories as $category ){
$args = array(
'post_type' => 'community',
'post_name__in' => $category->slug
);
$cat_query = new WP_Query( $args );
if( $cat_query->have_posts() ){
while( $cat_query->have_posts() ){
$cat_query->the_post();
the_title( sprintf( '<h3 class="post-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h3>');
}
wp_reset_postdata();
}
}
}