Woocommerce > 帐户 > 订单选项卡中的高级自定义字段值显示为空

问题描述 投票:0回答:1

这里有新海报,希望格式正确。我了解 WordPress,但对 php 非常陌生。

想法: 使用自定义字段将页面链接添加到产品中。一旦进行购买并在帐户页面上生成订单,该字段就会添加到订单页面。然后一列会输出此 URL,以便用户可以从仪表板访问该 URL。

我创建了一个 Woocommerce 产品,其中包含使用 ACF 创建的自定义字段。此自定义字段数据需要显示在帐户页面上订单选项卡下的新列中。我创建了列并将其链接到我的自定义字段,但它没有显示该字段中的数据,并且默认为“未给出 url”。

这是我关注的文章,但似乎对我不起作用。

**代码:**

add_filter( 'woocommerce_account_orders_columns', 'add_account_orders_column', 10, 1 );
function add_account_orders_column( $columns ){
    $order_actions  = $columns['order-actions']; // Save Order actions
    unset($columns['order-actions']); // Remove Order actions

    // Add your custom column key / label
    $columns['course_content_page_url'] = __( 'Course URL', 'woocommerce' );

    // Add back previously saved "Order actions"
    $columns['order-actions'] = $order_actions;

    return $columns;
}

// Display a custom field value from order metadata
add_action( 'woocommerce_my_account_my_orders_column_course_content_page_url', 'add_account_orders_column_rows' );
function add_account_orders_column_rows( $order ) {
    // Example with a custom field
    if ( $value = $order->get_meta( 'course_content_page_url' ) ) {
        esc_html_e( $value );
    } else {
        printf( '<small>%s</small>', __("no url given") );
    }
}

截图: Account dashboard with no value showing

有什么方法可以将此自定义字段数据也添加到订购电子邮件中吗?

wordpress woocommerce advanced-custom-fields
1个回答
0
投票

由于您在产品上使用高级自定义字段,订单本身没有任何相关元数据,您需要通过订单项,获取产品,然后从该产品中获取自定义字段。

在第二个功能中,您必须在

get_field()
功能中设置正确的 ACF 键。

尝试以下操作:

add_filter( 'woocommerce_account_orders_columns', 'add_account_orders_column', 10, 1 );
function add_account_orders_column( $columns ){
    $order_actions  = $columns['order-actions']; // Save Order actions
    unset($columns['order-actions']); // Remove Order actions

    // Add your custom column key / label
    $columns['course_url'] = __( 'Course URL', 'woocommerce' );

    // Add back previously saved "Order actions"
    $columns['order-actions'] = $order_actions;

    return $columns;
}

// Display a custom field value from order metadata
add_action( 'woocommerce_my_account_my_orders_column_course_url', 'add_account_orders_column_rows' );
function add_account_orders_column_rows( $order ) {
    $course_urls = array(); // Initialize

    // Loop though order items
    foreach ( $order->get_items() as $item ) {
        // Set the correct key For the ACF field below
        if ( $url = get_field( 'course-url', $item->get_product_id() ) ) {
            $course_urls[] = sprintf( '<a href="%s">%s</a>', esc_url($url), __('Link') );
        }
    }
    // Display
    if ( count($course_urls) > 0 ) {
        echo implode('<br>', $course_urls);
    } else {
        printf( '<small>%s</small>', __("no url given") );
    }
}

它可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.