如何使用 post ID 作为简码属性?

how to use the post ID in as a shortcode attribute?

我在 WordPress 中创建了自定义 post 类型。我想在短代码中使用 post ID,这样我就可以提取特定的 posts 来输出数据,这是一个使用高级自定义字段中的字段的图库。

到目前为止,这是我的函数:

function mbgc_gallery_shortcode( $atts ) {

    // $post_id = $atts['id'];

    extract( shortcode_atts(
        array(
            'id' => '',
        ), $atts )
    );

    $html_out = '123';

    // $post = get_post( $id );

    // if ( $post ) :

        if( have_rows('mbgc_gallery') ):

            $html_out .= '<div class="mbgc-gallery owl-carousel owl-theme">';

            while( have_rows('mbgc_gallery') ): the_row(); 

                // vars
                $image = get_sub_field('mbgc_image');
                $caption = get_sub_field('mbgc_caption');
                $title = get_sub_field('mbgc_title');
                $sub_title = get_sub_field('mbgc_sub_title');

                if ( $image ) :         
                    $html_out .= '<div class="mbgc-gallery-item">';

                        if ( $caption ) : 
                            $html_out .= '<div class="mbgc-slide-caption">';
                                $html_out .= '<h4>' . $caption . '</h4>';
                                $html_out .= '<div class="mbgc-slide-titles">';
                                    $html_out .= '<h6>' . $title . '</h6>';
                                    $html_out .= '<h6>' . $sub_title . '</h6>';
                                $html_out .= '</div>';
                            $html_out .= '</div>';
                        endif;

                        $html_out .= '<div class="mbgc-slide">';
                            $html_out .= '<img src="' . $image['url'] . '" alt="' . $image['alt'] . '" />';
                        $html_out .= '</div>';

                    $html_out .= '</div>';
                endif;

            endwhile;

            $html_out .= '</div>';

        endif;

    // endif;

    return $html_out;

}
add_shortcode('mbgc_gallery', 'mbgc_gallery_shortcode');

我希望短代码看起来像 [mbgc_gallery id="401"],例如。最主要的是我不确定如何在拉取ID的函数中准确地写它。

您需要将 ID 从短代码属性传递到 ACF have_rows() 函数,以便检索正确的数据。

<?php
function mbgc_gallery_shortcode( $atts ) {

    $attributes = shortcode_atts(
        array(
            'id' => null
        ), $atts );

        // $attributes['id'] is now the passed-in ID

        $html_out = '';

        if( have_rows('mbgc_gallery', $attributes['id']) ):

            $html_out .= '<div class="mbgc-gallery owl-carousel owl-theme">';

            while( have_rows('mbgc_gallery', $attributes['id']) ): the_row();

            // vars
            $image = get_sub_field('mbgc_image');
            $caption = get_sub_field('mbgc_caption');
            $title = get_sub_field('mbgc_title');
            $sub_title = get_sub_field('mbgc_sub_title');

            if ( $image ) :
                $html_out .= '<div class="mbgc-gallery-item">';

                if ( $caption ) :
                    $html_out .= '<div class="mbgc-slide-caption">';
                    $html_out .= '<h4>' . $caption . '</h4>';
                    $html_out .= '<div class="mbgc-slide-titles">';
                    $html_out .= '<h6>' . $title . '</h6>';
                    $html_out .= '<h6>' . $sub_title . '</h6>';
                    $html_out .= '</div>';
                    $html_out .= '</div>';
                endif;

                $html_out .= '<div class="mbgc-slide">';
                $html_out .= '<img src="' . $image['url'] . '" alt="' . $image['alt'] . '" />';
                $html_out .= '</div>';

                $html_out .= '</div>';
            endif;

        endwhile;

        $html_out .= '</div>';

    endif;

    return $html_out;

}
add_shortcode('mbgc_gallery', 'mbgc_gallery_shortcode');

像这样使用简码:[mbgc_gallery id="123"].

我个人不喜欢使用 extract() - 这会将数组变成单独的变量,根据数组元素键命名,并且会使调试变得困难。相反,只需像这样访问您的 ID:$attributes['id'] 如上所示。

祝你好运!