将WP查询转换为ShortCode Wordpress

时间:2015-12-04 15:41:19

标签: php wordpress shortcode wp-query

我有以下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;

我将它列在两个不同的区域,但我尝试从顶部和下部区域删除它仍然得到相同的结果。

1 个答案:

答案 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();