如何获取分解数组中的特定字符串?

时间:2014-03-14 作者:Tai Sem

我有一个快捷码,试图从$args 下面的数组。

查询:

$args = array(
    //\'post_type\' => $posttype,
    \'post_type\' => explode( \', \', $posttype ),
);    
$myquery = new WP_Query( $args );
有条件的:

if ( $posttype == \'cpt_press\' ) :
    the_content();
else : 
    the_excerpt();
endif;
短代码:

[myquery posttype=\'cpt_press\']
在上面的条件中,我能够检索所有具有post类型的帖子\'cpt_press\' 如果I don\'t use explode. 我使用explode的原因是为了能够做到这一点:

[myquery posttype=\'cpt_press, cpt_two, cpt_three, cpt_etc\']
有什么帮助吗?

更新的代码块

function myshortcode( $params, $content = null ) {
    global $post;
    extract( shortcode_atts( array(
        \'posttype\'      => \'\',
        \'meta_key\'      => \'\',
        \'priority\'      => \'\',
        \'meta_compare\'  => \'\',
        \'layout\'        => \'rows\',
        \'cols\'          => 1, 
        \'tag\'           => \'\',
        \'count\'         => 10, 
        \'orderby\'       => \'date\',
        \'order\'         => \'DESC\'
    ), $params ) );   
    $args = array(
        \'post_type\' => explode( \',\', $posttype ),
     );    
    $myquery = new WP_Query( $args );  
    ob_start();       
    ?><div class="row"><?php    
    // The Loop
    if ( $myquery->have_posts() ) : while( $myquery->have_posts() ) : $myquery->the_post();    
        if ( $posttype == \'cpt_press\' ) :
            the_content();   
        else :
            the_excerpt();
        endif;
    endwhile; 
    endif;
    wp_reset_postdata();
    ?></div><?php 
    return ob_get_clean(); 
}    
add_shortcode( \'myquery\', \'myshortcode\' );    

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

我看到了两个问题。一是explode() 实际上没有指定正确的拆分字符串\', \', 有一个空格。

样本中写的内容:

\'post_type\' => explode( \',\', $posttype ),
示例短代码中写了什么:

[myquery posttype=\'cpt_press, cpt_two, cpt_three, cpt_etc\']
请注意,每个帖子类型之间都有一个逗号和一个空格。我会使用preg_split() 相反,为了允许在短代码中写入此值的方式具有一定的灵活性:

\'post_type\' => preg_split( \'/\\s*,\\s*/\', $posttype ),
这将允许在给定列表字符串中的post类型之间的每个逗号的任一侧使用任意数量的空格。

我看到的第二个问题是,给定的代码正在测试$posttype 变量,使其等于“cpt\\u press”`,即使它可以是逗号分隔的列表。

相反,请检查\'cpt_press\'$args[\'post_type\'], 数组,它将设置为posttype 短代码参数:

in_array( \'cpt_press\', $args[\'post_type\'] )
因此,更新后的代码为:

function myshortcode( $params, $content = null ) {
    global $post;
    extract( shortcode_atts( array(
        \'posttype\'      => \'\',
        \'meta_key\'      => \'\',
        \'priority\'      => \'\',
        \'meta_compare\'  => \'\',
        \'layout\'        => \'rows\',
        \'cols\'          => 1, 
        \'tag\'           => \'\',
        \'count\'         => 10, 
        \'orderby\'       => \'date\',
        \'order\'         => \'DESC\'
    ), $params ) );   
    $args = array(
        \'post_type\' => preg_split( \'/\\s*,\\s*/\', $posttype ),
     );    
    $myquery = new WP_Query( $args );  
    ob_start();       
    ?><div class="row"><?php    
    // The Loop
    if ( $myquery->have_posts() ) : while( $myquery->have_posts() ) : $myquery->the_post();    
        if ( in_array( \'cpt_press\', $args[\'post_type\'] ) ) :              
            the_content();   
        else :
            the_excerpt();
        endif;
    endwhile; 
    endif;
    wp_reset_postdata();
    ?></div><?php 
    return ob_get_clean(); 
}    
add_shortcode( \'myquery\', \'myshortcode\' );  

结束

相关推荐

Manipulated shortcode output

我开发的一个注册短代码的插件有问题。短代码返回一个包含有效HTML的字符串,但一些主题似乎操纵了短代码返回的HTML,我真的不明白原因是什么。例如,这是我的短代码的正确输出:<div class=\"tile\"> <a> <img src=\"0.jpg\" /> <div class=\"caption\"> <p>Kate</p> </div&