我有以下WP查询,它完美无缺。基本上它是如何工作的,在我的网站上我有不同的重点领域。当您单击其中一个焦点区域时,例如数学或科学。所有与数学或科学相关的教师都将被展示。
这是wp查询
function list_teacher_shortcode($atts){
global $post;
$schools = $post->ID;
$args = array(
'post_type' => 'teacher',
'meta_query' => array(
array(
'key' => 'areas_of_focus',
'value' => $schools,
'compare' => 'LIKE',
),
),
);
$schools_data_query = new WP_Query($args);
global $post;
$schools = $post->ID;
$content = '';
$content .= '<ul>';
while($schools_data_query->have_posts()) : $schools_data_query->the_post();
$content .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
endwhile;
$content .= '</ul>';
wp_reset_query();
return $content;
}
add_shortcode('list_teacher', 'list_teacher_shortcode');
现在我想把它变成一个短代码。这是我提出的,但它不起作用。无论我关注哪个领域,我都会点击相同的老师。
{{1}}
我对这个后端编程不是很擅长,但我假设它与之相关
全球$ post;
$ schools = $ post-&gt; ID;
我将它列在两个不同的区域,但我尝试从顶部和下部区域删除它仍然得到相同的结果。
答案 0 :(得分:1)
你正在使用全球$ post;在您的短代码中,它会占据页面上的最后一个帖子,因此您必须在短代码中发送帖子ID
echo do_shortcode('[list_teacher postID="'.$post->ID.'"]');
将其放入list_teacher_shortcode函数中。
$a = shortcode_atts( array(
'postID' => '',
), $atts );
$postID = $a['postID'];
然后你不需要这个代码(你使用它两次):
global $post;
$schools = $post->ID;
更新
您还可以在短代码中使用$ query-&gt; the_post()和wp_reset_post_data()。更多信息,请https://codex.wordpress.org/Function_Reference/wp_reset_postdata
更新2完整代码
将它放在您想要使用短代码的地方
echo do_shortcode('[list_teacher postID="'.$post->ID.'"]');
这是您的完整短代码
function list_teacher_shortcode($atts){
$a = shortcode_atts( array(
'postID' => '',
), $atts );
$schools = $a['postID'];
$args = array(
'post_type' => 'teacher',
'meta_query' => array(
array(
'key' => 'areas_of_focus',
'value' => $schools,
'compare' => 'LIKE',
),
),
);
$schools_data_query = new WP_Query($args);
$content = '';
$content .= '<ul>';
while($schools_data_query->have_posts()) : $schools_data_query->the_post();
$content .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
endwhile;
$content .= '</ul>';
wp_reset_query();
return $content;
}
add_shortcode('list_teacher', 'list_teacher_shortcode');
更新3
另外,你可以使用get_the_ID()描述是here 然后,您可以从短代码功能中删除属性,并且函数的第一行应如下所示:
$school = get_the_ID();