Use WP_Query in shortcode

时间:2015-07-31 作者:ExcellentSP

我正在尝试从前四篇文章中获取元信息,这些文章的元键等于Sedan,然后对这些文章的元进行格式化,以便设置图库类型的显示框。我相信这与我的方法有关,因为我仍处于学习曲线的陡峭部分。如有任何意见、建议或回答,将不胜感激。

使用此代码,我试图生成的HTML不会显示在前端。好像我什么都没做似的。

add_shortcode(\'sedan-tabs\',\'build_sedan_tabs\');
function build_sedan_tabs(){
    $args1 = array(
        \'meta_key\'   => \'vehicle-type\',
        \'meta_value\' => \'Sedan\',
        \'posts_per_page\' => \'4\'
    );
    $query1 = new WP_Query($args1);
    while ( $query1->have_posts() ) {
        $query1->the_post();
        $currentPostID = get_the_id();
        $querySedans =  \'<div class="col-sm-3><div class="display-car"><img src="\' . get_post_meta(get_the_id(),\'wpcf-vehicle-images\', true) . \'"/>\' . 
        \'<h3>\' . get_post_meta($currentPostID,\'wpcf-vehicle-year\', true) . \' \' . 
        get_post_meta($currentPostID,\'wpcf-vehicle-make\', true) . \' \' . 
        get_post_meta($currentPostID,\'wpcf-vehicle-model\', true) .\'</h3><p>\' .
        get_post_meta($currentPostID,\'wpcf-vehicle-mileage\', true) . \' \' . 
        get_post_meta($currentPostID,\'wpcf-vehicle-transmission\', true) . \'<br /><strong>\' . 
        get_post_meta($currentPostID,\'wpcf-vehicle-retail-price\', true) . \'</strong></p></div></div><a href="\' . get_permalink($currentPostID, false) . \'"></a>\';
        return get_the_id();
    }
}

1 个回复
最合适的回答,由SO网友:Marek 整理而成

你有两个主要问题

您正在构建的字符串是正确的,但它在循环的每次迭代中都会被覆盖,最后只保存最后一篇文章中的信息。您需要在循环外定义变量,然后在整个循环中将信息连接到该变量,以便显示所有帖子中的所有postdata

您返回的信息错误。您将在循环的第一次迭代之后返回post id。您应该在循环外返回包含帖子信息的字符串

我认为你的代码应该是这样的:

add_shortcode(\'sedan-tabs\',\'build_sedan_tabs\');
function build_sedan_tabs(){
    $querySedans = \'\';
    $args1 = array(
        \'post_type\'  => \'inventory\',
        \'meta_key\'   => \'vehicle-type\',
        \'meta_value\' => \'Sedan\',
        \'posts_per_page\' => \'4\'
    );
    $query1 = new WP_Query($args1);
    while ( $query1->have_posts() ) {
        $query1->the_post();
        $currentPostID = get_the_id();
        $vehicleImg = get_post_meta($currentPostID,\'vehicle-images\', true);
        $querySedans .=  \'<div class="col-sm-3"><div class="display-car"><img src="\' . $vehicleImg . \'"/>\' . 
        \'<h3>\' . get_post_meta($currentPostID,\'vehicle-year\', true) . \' \' . 
        get_post_meta($currentPostID,\'vehicle-make\', true) . \' \' . 
        get_post_meta($currentPostID,\'vehicle-model\', true) .\'</h3><p>\' .
        get_post_meta($currentPostID,\'vehicle-mileage\', true) . \' \' . 
        get_post_meta($currentPostID,\'vehicle-transmission\', true) . \'<br /><strong>\' . 
        get_post_meta($currentPostID,\'vehicle-retail-price\', true) . \'</strong></p></div></div><a href="\' . get_permalink($currentPostID, false) . \'"></a>\';
    }
    return $querySedans;
}

结束

相关推荐

自定义单一帖子类型不引用单一帖子类型.php文件

我已经定义了一个名为“Press”的自定义帖子类型,我正在尝试修改该自定义类型的单个帖子模板。single posts自定义文件称为“single press.php”我尝试使用if in\\u category(cat\\u number),get\\u template\\u part type语句。php&;它似乎给了我一个白色的屏幕而不是页面。。。这是我目前正在单曲中尝试的代码。php文件:<div class=\"row\"> <div class=\"c