如何在WordPress中创建带有Repeater字段的ACF短码?

时间:2016-12-14 作者:raja

我想使用ACF Repeater字段创建一个短代码,所以我找到了这段代码,当我尝试在我的网站上应用它时,它不起作用。我正在使用genesis框架。

我的目标是使用ACF Repeater字段和post或page中的显示表创建一个短代码。

这是我在函数中的代码。php:

    function menu_loop () { 

    echo    \'<div class="entry-content dishes">\';
// check if the repeater field has rows of data
        if( have_rows(\'menu_sections\') ):

            // loop through the rows of data
            while ( have_rows(\'menu_sections\') ) : the_row();

                // display a sub field value

                echo \'<h2>\' . get_sub_field(\'section_title\') . \'</h2>\';
                if ( have_rows(\'sections_items\'));?>

                    <table>

                        <thead>
                            <tr>
                                <td class="ja_name">Name</td>
                                <td class="ja_description">Description</td>
                                <td class="ja_price">Price</td>
                            </tr>
                        </thead>  

                    <?php while (have_rows(\'section_items\') ): the_row(); ?>

                        <tr>
                            <td><?php the_sub_field(\'dish_names\'); ?></td>
                            <td><?php the_sub_field(\'dish_description\'); ?></td>
                            <td>$ <?php the_sub_field(\'dish_price\'); ?></td>
                        </tr>

                    <?php endwhile;?>

                    </table> <?php 

            endwhile;

         else : 

            // no rows found

        endif; ?></div>
add_shortcode(\'testimonials\', \'menu_loop\');

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

使用短代码时,需要返回代码。此外,您没有关闭该功能。

尝试以下操作:

function menu_loop() {

    $menu = \'<div class="entry-content dishes">\';

    // check if the repeater field has rows of data
    if (have_rows(\'menu_sections\')):

        // loop through the rows of data
        while (have_rows(\'menu_sections\')) : the_row();

            // display a sub field value

            $menu .= \'<h2>\' . get_sub_field(\'section_title\') . \'</h2>\';
            if (have_rows(\'sections_items\')) :

                $menu .= \'<table><thead><tr><td class="ja_name">Name</td><td class="ja_description">Description</td><td class="ja_price">Price</td></tr></thead>\';

                while (have_rows(\'section_items\')): the_row();
                    $menu .= \'<tr><td>\' . the_sub_field(\'dish_names\') . \'</td><td>\' . the_sub_field(\'dish_description\') . \'</td><td>$ \' . the_sub_field(\'dish_price\') . \'</td></tr>\';
                endwhile;

                $menu .= \'</table> \';

            else :
                // no rows found
            endif;

        endwhile;

    else :
        //echo \'no rows found\';
    endif;

    $menu .= \'</div>\';
    // Code
    return $menu;
}

add_shortcode(\'testimonials\', \'menu_loop\');

我只是再次检查了你的代码。。。您正在响应while语句中的\\u sub\\u字段。那可能会把事情搞砸。如果上述代码将字段放错位置,请尝试更改\\u sub\\u字段,以在while语句中获取\\u sub\\u字段(x3问题)。