在 WooCommerce 单一产品页面上使用 ACF true/false 字段

发布于 2025-01-10 00:28:07 字数 578 浏览 0 评论 0原文

我有一个 WooCommerce 网站,在单个产品页面中,我有一个自定义复选框,用于同意“添加到购物车”按钮之前的条款,但我尝试在仪表板中添加一个“真/假”字段,以便可以将该复选框移动到页面上的不同位置。

我的功能看起来像这样:

add_action( 'acf/init', "acf_move_checkbox", 10 );

function acf_move_checkbox() {
  
  $move_cart = get_field('move_cart');

    if ($move_cart) {

        add_action( 'woocommerce_after_single_product', "acf_product_terms", 10 );

    } else {

        add_action( 'woocommerce_before_add_to_cart_form', "acf_product_terms", 10 );

    }

// More code

}

什么也没有发生,我的做法是正确的还是偏离的?

I have a WooCommerce site and in the single product page I have a custom checkbox to agree to terms before the add to cart button, but I am trying to add a true/false field in the dashboard so that this checkbox can be moved to a different position on the page.

My functions look like this:

add_action( 'acf/init', "acf_move_checkbox", 10 );

function acf_move_checkbox() {
  
  $move_cart = get_field('move_cart');

    if ($move_cart) {

        add_action( 'woocommerce_after_single_product', "acf_product_terms", 10 );

    } else {

        add_action( 'woocommerce_before_add_to_cart_form', "acf_product_terms", 10 );

    }

// More code

}

And nothing is happening, am I along the right lines with this or way off?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

流星番茄 2025-01-17 00:28:08

虽然 acf/init 与 WordPress 的 init 操作类似,但我不会使用它。

初始化挂钩会不断执行......因为您想在单个产品页面上应用操作,所以最好使用仅适用于该页面的挂钩,并且仅在这些类型的页面上运行。

例如,您可以使用 woocommerce_single_product_summary 挂钩。在检索字段之前通过硬编码来测试字段也可能很有用。


所以你得到:

function action_woocommerce_single_product_summary() {
    // Get field
    //$move_cart = get_field( 'move_cart' );
    
    // Set true OR false
    $move_cart = false;

    // When true
    if ( $move_cart ) {
        add_action( 'woocommerce_after_single_product', 'my_callback_function', 9 );
    } else {
        add_action( 'woocommerce_before_add_to_cart_form', 'my_callback_function', 9 );
    }
}
add_action( 'woocommerce_single_product_summary', 'action_woocommerce_single_product_summary', 1 );

function my_callback_function() {
    echo '<p style="color: red; font-size: 20px;">Hello World!</p>';
}

如果上述步骤有效,你可以用所需的代码/字段替换硬编码字段

While acf/init is similar to the WordPress init action, I wouldn't use it.

Init hooks are performed constantly.. since you want to apply an action on the single product page it's best to use a hook that only applies to that page, and will only run on those kinds of pages.

For example you can use the woocommerce_single_product_summary hook. It might also be useful to test fields by hard coding before retrieving them.


So you get:

function action_woocommerce_single_product_summary() {
    // Get field
    //$move_cart = get_field( 'move_cart' );
    
    // Set true OR false
    $move_cart = false;

    // When true
    if ( $move_cart ) {
        add_action( 'woocommerce_after_single_product', 'my_callback_function', 9 );
    } else {
        add_action( 'woocommerce_before_add_to_cart_form', 'my_callback_function', 9 );
    }
}
add_action( 'woocommerce_single_product_summary', 'action_woocommerce_single_product_summary', 1 );

function my_callback_function() {
    echo '<p style="color: red; font-size: 20px;">Hello World!</p>';
}

If the above step works, you can replace the hard coded field with the desired code/field

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文