我看到了两个问题。一是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\' );