我有带有子主题的模板,并且我编辑了子模板function.php
目标是创建简短的代码女巫将具有参数和模板文件的一部分
我的功能如下:
function my_shortcode($atts = array() ) {
extract(shortcode_atts(array(
'catid' => '5'
), $atts));
ob_start();
include(get_template_part('mynews-temp'));
return ob_get_clean();
}
add_shortcode('mynews', 'my_shortcode');
[mynews catid="5"]
短代码输出必须是类别为5的新闻查询
这是带有查询的模板部分
<?phpif ( ! defined( 'ABSPATH' ) ) {exit( 'Direct script access denied.' );}
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'mynews',
'tax_query' => array(
array(
'taxonomy' => 'newstypes',
'field' => 'tag_ID',
'terms' => array('$catid')
),),));
if( $posts ): ?>
<?php foreach( $posts as $post ):
setup_postdata( $post );?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><
<?php endforeach; ?>
<?php endif; wp_reset_postdata(); ?>
行不通找不到什么错误
P.S。当我使用子模板时,女巫是正确的:
include(get_template_part('mynews-temp'));
or include(locate_template('mynews-temp'));
答案 0 :(得分:0)
您可以像这样包含模板部分:get_template_part('mynews-temp')
。不需要include
,什么都不做。
您的其余代码运行良好。我唯一可以推荐的是简化您的代码,并获取所有常规 post
以查看问题是否出在 tax_query
中:
<?php
if ( ! defined( 'ABSPATH' ) ) {exit( 'Direct script access denied.' );}
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'post',
));
// 'tax_query' => array(
// array(
// 'taxonomy' => 'newstypes',
// 'field' => 'tag_ID',
// 'terms' => array('$catid')
// ),),));
if( $posts ): ?>
<?php foreach( $posts as $post ):
setup_postdata( $post );?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><
<?php endforeach; ?>
<?php endif; wp_reset_postdata(); ?>