我创建了一个快捷码,用于向其他帖子显示自定义的单个自定义帖子类型。代码如下:
function clients_shortcode(){
$output = \'\';
//Attributes
$defaults = array(
\'c_name\' => \'\',
\'c_session\' => \'\'
);
$atts = shortcode_atts($defaults, $atts);
$name = $atts[\'c_name\'];
$session = $atts[\'c_session\'];
$args = array(
\'post_type\' => \'client\',
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'client_name\',
\'value\' => $name,
\'compare\' => \'=\'
),
array(
\'key\' => \'session_number\',
\'value\' => $session,
\'compare\' => \'=\'
)
)
);
$client_sess = new WP_Query ($args);
if($client_sess->have_posts()): while($client_sess->have_posts()): $client_sess -> the_post();
$output .= \'<h1>\' . get_the_title() . \'</h1>\';
$output .= \'<div>\' . get_field(\'session_hypnosis\') . \'</div>\';
$output .= \'<div>\' . get_field(\'session_video\') . \'</div>\';
endwhile;
endif;
wp_reset_query();
return $output;
}
add_shortcode(\'clients\', \'clients_shortcode\');
输出没有显示任何内容,但是如果我像这样将代码更改为static
$args = array(
\'post_type\' => \'client\',
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'client_name\',
\'value\' => \'Nayan\',
\'compare\' => \'=\'
),
array(
\'key\' => \'session_number\',
\'value\' => 1,
\'compare\' => \'=\'
)
)
);
然后,短代码显示客户端Nayan和会话1的帖子。但是,当我将参数传递给shortcode时,它不起作用。
注意:我使用ACF生成自定义字段。
提前感谢
最合适的回答,由SO网友:Jacob Peattie 整理而成
您尚未定义$atts
, 因此,您的函数没有接收到用户传递的任何属性。这还不够:
$atts = shortcode_atts($defaults, $atts);
那只是结合
$atts
和
$defaults
进入
$atts
, 但是原来的
$atts
尚未定义。您需要接受
$atts
作为传递给函数的第一个参数:
function clients_shortcode( $atts ) {