Wordpress短代码返回“数组”

时间:2012-12-17 15:19:40

标签: php wordpress

我正在制作一个自定义短代码,基本上只是为了返回我的自定义帖子类型,这是我的代码:

function shortcode_slider($atts, $content=null){  
    extract(shortcode_atts( array('id' => ''), $atts));  
    $return = $content;
    $return .= query_posts( array( 'post_status' => 'publish' , 'post_type' => 'slider'  ) );
    return $return;  
}  
add_shortcode('slider', 'shortcode_slider');

短代码除了一件事之外还可以正常工作 - 当它返回所有帖子时它也会返回列表顶部的“数组” - 任何想法为什么会发生这种情况?

此外,我希望能够使用“id”输入来指定类别,例如

 $return .= query_posts( array( 'post_status' => 'publish' , 'post_type' => 'slider', 'category' => $id  ) );

但我不确定这个的正确语法。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

首先,不要使用 query_posts 请检查:

在短代码案例中,我会选择get_posts。它将返回你需要的东西,不会弄乱循环。

值得注意的是,您并不需要提取属性,使用$atts['id']来完成工作。

按照正常工作的短代码查看评论:

add_shortcode( 'slider', 'shortcode_slider' );

function shortcode_slider( $atts, $content=null )
{  
    // Initialize variable and check for shortcode content
    $return = '';
    if( $content ) {
        $return = $content;
    }

    // Shortcode attribute: title="Lorem Ipsum"
    if( isset( $atts['title'] ) ) 
    {
        $return .= '<br><h2>' . $atts['title'] . '</h2>';
    }

    // Get our custom posts
    // 'category' is the category ID or a comma separated list of ID numbers
    $sliders = get_posts( array( 
        'post_status' => 'publish', 
        'post_type' => 'slider',
        'numberposts' => 10, 
        'order'=> 'ASC', 
        'orderby' => 'title',
        'category' => $atts['id']  
    ) );


    // Auxiliary variable, don't print <br> in the first element
    $first = '';

    // Iterate through the resulting array
    // and build the final output
    // Use $slide->post_author, ->post_excerpt, as usual
    //   $slide->ID can be used to call auxiliary functions 
    //   such as get_children or get_permalink
    foreach( $sliders as $slide ) 
    {
        $link = get_permalink( $slide->ID );
        $return .= 
            $first
            . '<a href="' . $link . '">'
            . $slide->post_title 
            . '</a>
        ';
        $first = '<br>';
    }

    return $return;  
}  

在默认帖子类型中应用的短代码:

  

shortcode

自定义帖子类型:

  

cpt

结果:

  

cpt shortcode result

有用的链接:

答案 1 :(得分:0)

似乎包含“数组”因为您首先使用$ content。要确定,你必须在帖子中发布你如何编写这个短代码,但这是一般的想法。你可能不需要这一行:

$return = $content;

如果您的短代码语法是[slider]some text[/slider],那么上面的行就可以了。

至于第二部分,您将在代码中使用$ atts ['id']检索id。您的短代码将是:

[slider id="5"]

答案 2 :(得分:0)

它打印数组的原因就在这里:

$return .= query_posts( ...

首先,将$return设置为内容字符串。然后,将query_posts()返回的数组附加到其中。我有点惊讶你没有得到“数组到字符串转换”错误,但也许你正在压制它们。

WordPress自动回声短代码,所以无论你return它都会回响。使用短代码来获取帖子可能不是最好的主意。短代码应该返回字符串。

这个答案感觉不完整,因为不清楚你想要完成什么。 query_posts意味着改变循环,但是当短信被解雇时,你已经在循环中了。