您需要您的短代码来接受属性。具有属性的短代码如下所示:
[publication year="2017"]
然后在你的
add_shortcode
回调函数在函数的第一个参数中接收属性:
function wpse_279094_publication_shortcode( $atts ) {
echo $atts[\'year\'];
}
add_shortcode( \'publication\', \'wpse_279094_shortcode\' );
您希望能够说明不使用任何属性的用户,因此使用
shortcode_atts()
要填充的函数
$atts
如果未设置,则使用默认值。在您的用例中,当前年份似乎是一个合乎逻辑的默认值。所以看起来像:
function wpse_279094_publication_shortcode( $atts ) {
$atts = shortcode_atts(
array(
\'year\' => date(\'Y\')
),
$atts
);
}
add_shortcode( \'publication\', \'wpse_279094_shortcode\' );
总之,你的代码应该是这样的:
function wpse_279094_publication_shortcode(){
$atts = shortcode_atts( array( \'year\' => date(\'Y\') ), $atts );
$args = array(
\'post_type\' => \'publication\',
\'posts_per_page\' => -1,
\'meta_key\' => \'release-date\',
\'meta_value\' => $atts[\'year\'],
\'orderby\' => \'meta_value\',
\'order\' => \'DESC\',
\'post_status\' => \'publish\'
);
$query = new WP_Query( $args );
ob_start();
while ( $query->have_posts() ) : $query->the_post();
echo the_field( \'autor\' ). " (" ;
echo the_field( \'release-date\' ). ") ";
echo the_field( \'buch\' ). ". ";
echo \'<b>\' . get_the_title() . \'</b>\'. ", ";
echo the_field( \'verleger\' ). ". " ;
if ( get_field( \'seiten\' ) ) {
echo "S. ";
echo the_field( \'seiten\' ). ". <p />" ;
}
echo \'<p>\';
echo \' \';
endwhile;
wp_reset_postdata();
return ob_get_clean();
}
add_shortcode( \'publication\', \'wpse_279094_publication_shortcode\' );
现在您可以使用
[publication year="2017"]
,
[publication year="2012"]
获取不同年份的出版物,或
[publication]
获取当年的出版物。
还要注意我对您的代码所做的另一项更改。在代码中echo
编辑您的输出。短代码需要return
它们的输出,否则内容不会出现在正确的位置。
一种方法是建立一个大字符串:
$output = get_the_title();
$output .= get_the_content();
return $output;
但我觉得这很麻烦。相反,我使用
ob_start()
它将“捕获”所有输出,而不将其回显到屏幕上。那么,我
return
ob_get_clean()
返回捕获的输出。