快捷码自定义查询不传递值

时间:2020-01-22 作者:Nayan Chowdhury

我创建了一个快捷码,用于向其他帖子显示自定义的单个自定义帖子类型。代码如下:

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生成自定义字段。

提前感谢

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

您尚未定义$atts, 因此,您的函数没有接收到用户传递的任何属性。这还不够:

$atts = shortcode_atts($defaults, $atts);
那只是结合$atts$defaults 进入$atts, 但是原来的$atts 尚未定义。您需要接受$atts 作为传递给函数的第一个参数:

function clients_shortcode( $atts ) {

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。