【问题标题】:Display in backend the option label from a dropdown checkout field in Woocommerce在后端显示来自 Woocommerce 下拉结帐字段的选项标签
【发布时间】:2018-06-21 10:43:27
【问题描述】:

我在 woocommerce 的结帐中创建了一个下拉字段,并为每个人指定了一个命名键。我的问题是如何保存命名密钥并将它们显示在我的后端。 到目前为止,我无法显示命名键。

function cloudways_custom_checkout_fields($fields){
$fields['cloudways_extra_fields'] = array(

        'cloudways_dropdown' => array(
            'type' => 'select',
            'options' => array( 'freudige_anlaesse' => __( 'Freudige Anlässe' ), 'traurige_anlaesse' => __( 'Traurige Anlässe' ), 'testamentsspende' => __( 'Testamentsspende' ), 'stiftungen' => __( 'Stiftungen' ), 'unternehmen' => __( 'Unternehmen' ) ),
            'required'      => true,
            'label' => __( 'Grund Ihrer Spende' )
            )
        );

return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'cloudways_custom_checkout_fields' );

function cloudways_extra_checkout_fields(){

$checkout = WC()->checkout(); ?>

<div class="col-2">
<h3><?php _e( 'Verwendungszweck' ); ?></h3>

<?php
   foreach ( $checkout->checkout_fields['cloudways_extra_fields'] as $key => $field ) : ?>

        <?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>

    <?php endforeach; ?>
</div>

<?php }
    add_action('woocommerce_checkout_after_customer_details','cloudways_extra_checkout_fields'  );

我在这里保存数据。

//SAVE THE DATA
function cloudways_save_extra_checkout_fields( $order_id, $posted ){
// don't forget appropriate sanitization if you are using a different field type
if( isset( $posted['cloudways_text_field'] ) ) {
    update_post_meta( $order_id, '_cloudways_text_field', sanitize_text_field( $posted['cloudways_text_field'] ) );
}

if( isset( $posted['cloudways_dropdown'] ) && in_array( $posted['cloudways_dropdown'], array( 'freudige_anlaesse' , 'traurige_anlaesse', 'testamentsspende', 'stiftungen', 'unternehmen' ) ) ) {

    update_post_meta( $order_id, '_cloudways_dropdown', $posted['cloudways_dropdown'] );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'cloudways_save_extra_checkout_fields', 10, 2 );

在这里,我尝试在订单管理面板中显示数组。我得到了要显示的数组的第一个部分,但没有显示与该值关联的命名键。 如何显示命名键?

function kia_display_order_data_in_admin( $order ){  ?>
<div class="order_data_column">
    <h4><?php _e( 'Verwendungszweck' ); ?></h4>
    <?php 
         echo '<p><strong>' . __( 'Grund der Spende: ' ) . '</strong>'. get_post_meta( $order->id, '_cloudways_dropdown', true ) . '</p>';?>

</div>

【问题讨论】:

  • 你应该用钩子添加完整的功能。请记住“寻求调试帮助的问题必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。” ...实际上是您的代码不可测试,因为它是。
  • 我拿了代码 sn-ps 因为代码发布功能与代码视图混淆了
  • 请尝试更新您的代码,使其完整:在第一个 sn-p 中,钩子和函数丢失。在第二个和第三个 sn-ps 中,钩子丢失了。没有它,人们就无法猜测和帮助您。
  • 谢谢你的帮助,我编辑了。

标签: php arrays wordpress woocommerce checkout


【解决方案1】:

更新 2 - 我重新查看了您的代码,进行了一些更改,删除了不必要的代码,并使自定义字段值显示在管理订单编辑页面中:

function spende_options_array(){
    return array( 'freudige_anlaesse' => __( 'Freudige Anlässe' ), 'traurige_anlaesse' => __( 'Traurige Anlässe' ), 'testamentsspende' => __( 'Testamentsspende' ), 'stiftungen' => __( 'Stiftungen' ), 'unternehmen' => __( 'Unternehmen' ) );
}

add_filter( 'woocommerce_checkout_fields', 'add_custom_checkout_field' );
function add_custom_checkout_field($fields){
    $fields['extra_fields'] = array( 'spende_dropdown' => array(
        'type'     => 'select',
        'label'    => __( 'Grund Ihrer Spende' ),
        'options'  => spende_options_array(),
        'required' => true,
    ) );

    return $fields;
}

add_action('woocommerce_checkout_after_customer_details','add_extra_checkout_field'  );
function add_extra_checkout_field(){
    $checkout = WC()->checkout();
    ?>
    <div class="col-2">
    <h3><?php _e( 'Verwendungszweck' ); ?></h3>
    <?php

    foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) :
        woocommerce_form_field( $key, $field, $checkout->get_value( $key ) );
    endforeach;
    ?>
    </div>
    <?php
}

add_action( 'woocommerce_checkout_create_order', 'save_extra_checkout_fields', 10, 2 );
function save_extra_checkout_fields( $order, $posted ){
    if( isset( $posted['spende_dropdown'] ) && in_array( $posted['spende_dropdown'], array( 'freudige_anlaesse' , 'traurige_anlaesse', 'testamentsspende', 'stiftungen', 'unternehmen' ) ) ) {
        $order->update_meta_data( '_spende_dropdown', $posted['spende_dropdown'] );
    }
}

add_action( 'woocommerce_admin_order_data_after_order_details', 'display_order_custom_meta_data_in_admin' );
function display_order_custom_meta_data_in_admin( $order ){
    $spende_options = spende_options_array();
    $key = get_post_meta( $order->get_id(), '_spende_dropdown', true );
    ?>
    <div class="order_data_column">
        <h4><?php _e( 'Verwendungszweck' ); ?></h4>
        <p><strong><?php _e( 'Grund der Spende: ' ); ?></strong><?php echo $spende_options[$key]; ?></p>
    </div>
    <?php
}

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

这将显示从订单管理编辑页面的下拉列表中选择的&lt;option&gt; 标签

【讨论】:

  • 对我来说没有变化我得到“freudige_anlaesse”但我想在管理订单编辑页面中得到“Freudige Anlässe”
  • @MoniqueMolitor 我已经重新更新了我的代码,再试一次。
  • 你能不能这么好,告诉我一些代码把它放在我的电子邮件模板中?使用旧代码它可以工作(我只是从管理订单编辑页面复制代码)但遗憾的是这并不容易。
  • @MoniqueMolitor 这取决于你想在哪里拥有代码。如果您可以更明确,可以在答案中进行更新。
  • 在过去,我只是有一些带有插入 php 的 html 和一个可以单独插入到任何 woocommerce 电子邮件模板中的回声。但具体来说,我希望它显示在电子邮件订单详细信息和客户发票中。
猜你喜欢
  • 2021-03-23
  • 2019-07-28
  • 2021-07-25
  • 2022-01-20
  • 2021-05-28
  • 2015-04-19
  • 2017-03-21
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多