我正在制作一个自定义短代码,基本上只是为了返回我的自定义帖子类型,这是我的代码:
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 ) );
但我不确定这个的正确语法。
非常感谢任何帮助。
答案 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;
}
在默认帖子类型中应用的短代码:
自定义帖子类型:
结果:
有用的链接:
答案 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
意味着改变循环,但是当短信被解雇时,你已经在循环中了。