带有ACF中继器字段的WooCommerce自定义选项卡

时间:2017-11-18 作者:John Ashley Nohay

我正在为我的附加自定义WooCommerce选项卡的内容使用高级自定义字段的转发器。中继器位于组字段内。我设法显示转发器字段之外的自定义字段。现在问题是我的中继器字段中的字段。中继器字段未显示。这是我在函数中使用的代码。php

//添加自定义选项卡

add_filter( \'woocommerce_product_tabs\', \'dl_custom_product_designer_tab\' );
function dl_custom_product_designer_tab( $tabs ) {
    // ensure ACF is available
    if ( !function_exists( \'have_rows\' ) )
        return;

    if ( get_field(\'designer\') ) {
        $tabs[] = array(
            \'title\' => \'DESIGNER\',
            \'priority\' => 50,
            \'callback\' => \'dl_custom_designer_tab\'
        );
    }
    return $tabs;
}

function dl_custom_designer_tab() {
    $designer = get_field(\'designer\');
        echo \'<p>\'.$designer[\'designer_image\'].\'</p>\';
        echo \'<p>\'.$designer[\'designer_name\'].\'</p>\';
        echo \'<p>\'.$designer[\'designer_short_description\'].\'</p>\';
        // loop through the rows of data
        $achievements = get_field(\'designer_achievements\');
        if( $achievements ) {
            // loop through the rows of data
            echo \'<ul>\';
            foreach($achievements as $achievement){
                // display a sub field value
                echo \'<li>\'.$achievement[\'achievement\'].\'</li>\';
            }
            echo \'</ul>\';
        }
}

3 个回复
SO网友:RossAlexander

我认为您需要将get\\u sub\\u field()用于repeater字段(designer\\u成就),将get\\u field()用于其父字段。请看一下ACF documentation 对于中继器字段的子字段。

您还需要使用have\\u rows()循环,如文档中所述。

if( have_rows(\'parent_field\') ):

    while( have_rows(\'parent_field\') ) : the_row();

        $value = get_sub_field(\'sub_field\');

    endwhile;

endif;

SO网友:Lovin Nagi

replace $achievements = get_field(\'designer_achievements\'); to $achievements = get_sub_field(\'designer_achievements\');

SO网友:ZecKa

我试图这样做,最终找到了一个解决方案。您可以这样做:

这意味着您的产品有一个转发器字段“选项卡”,其中包含一个子字段“标题”和一个子字段“内容”。

add_filter( \'woocommerce_product_tabs\', \'prefix_other_products_tab\' );
function prefix_other_products_tab( $tabs ) {
    global $product;
    $additional_tabs = get_field(\'tabs\', $product->get_id());
    foreach($additional_tabs as $index => $custom_tab){
        $slug = sanitize_title($custom_tab[\'title\']);
        $tabs[$slug+$index] = array(
            \'title\' => $custom_tab[\'title\'],
            \'priority\'  => 120,
            \'content\' => $custom_tab[\'content\'],
            \'callback\'  => function($tab_name, $tab){
                global $product;
                echo $tab[\'content\'];
            },
        );
    }
    return $tabs;
}

结束
带有ACF中继器字段的WooCommerce自定义选项卡 - 小码农CODE - 行之有效找到问题解决它

带有ACF中继器字段的WooCommerce自定义选项卡

时间:2017-11-18 作者:John Ashley Nohay

我正在为我的附加自定义WooCommerce选项卡的内容使用高级自定义字段的转发器。中继器位于组字段内。我设法显示转发器字段之外的自定义字段。现在问题是我的中继器字段中的字段。中继器字段未显示。这是我在函数中使用的代码。php

//添加自定义选项卡

add_filter( \'woocommerce_product_tabs\', \'dl_custom_product_designer_tab\' );
function dl_custom_product_designer_tab( $tabs ) {
    // ensure ACF is available
    if ( !function_exists( \'have_rows\' ) )
        return;

    if ( get_field(\'designer\') ) {
        $tabs[] = array(
            \'title\' => \'DESIGNER\',
            \'priority\' => 50,
            \'callback\' => \'dl_custom_designer_tab\'
        );
    }
    return $tabs;
}

function dl_custom_designer_tab() {
    $designer = get_field(\'designer\');
        echo \'<p>\'.$designer[\'designer_image\'].\'</p>\';
        echo \'<p>\'.$designer[\'designer_name\'].\'</p>\';
        echo \'<p>\'.$designer[\'designer_short_description\'].\'</p>\';
        // loop through the rows of data
        $achievements = get_field(\'designer_achievements\');
        if( $achievements ) {
            // loop through the rows of data
            echo \'<ul>\';
            foreach($achievements as $achievement){
                // display a sub field value
                echo \'<li>\'.$achievement[\'achievement\'].\'</li>\';
            }
            echo \'</ul>\';
        }
}

3 个回复
SO网友:RossAlexander

我认为您需要将get\\u sub\\u field()用于repeater字段(designer\\u成就),将get\\u field()用于其父字段。请看一下ACF documentation 对于中继器字段的子字段。

您还需要使用have\\u rows()循环,如文档中所述。

if( have_rows(\'parent_field\') ):

    while( have_rows(\'parent_field\') ) : the_row();

        $value = get_sub_field(\'sub_field\');

    endwhile;

endif;

SO网友:Lovin Nagi

replace $achievements = get_field(\'designer_achievements\'); to $achievements = get_sub_field(\'designer_achievements\');

SO网友:ZecKa

我试图这样做,最终找到了一个解决方案。您可以这样做:

这意味着您的产品有一个转发器字段“选项卡”,其中包含一个子字段“标题”和一个子字段“内容”。

add_filter( \'woocommerce_product_tabs\', \'prefix_other_products_tab\' );
function prefix_other_products_tab( $tabs ) {
    global $product;
    $additional_tabs = get_field(\'tabs\', $product->get_id());
    foreach($additional_tabs as $index => $custom_tab){
        $slug = sanitize_title($custom_tab[\'title\']);
        $tabs[$slug+$index] = array(
            \'title\' => $custom_tab[\'title\'],
            \'priority\'  => 120,
            \'content\' => $custom_tab[\'content\'],
            \'callback\'  => function($tab_name, $tab){
                global $product;
                echo $tab[\'content\'];
            },
        );
    }
    return $tabs;
}

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请