Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取Woocommerce中管理订单编辑页面上的嵌套自定义字段元数据_Php_Wordpress_Woocommerce_Checkout_Orders - Fatal编程技术网

Php 获取Woocommerce中管理订单编辑页面上的嵌套自定义字段元数据

Php 获取Woocommerce中管理订单编辑页面上的嵌套自定义字段元数据,php,wordpress,woocommerce,checkout,orders,Php,Wordpress,Woocommerce,Checkout,Orders,在woocommerce中,我在结帐页面上添加了基于购物车计数的自定义字段 // Adding Custom Fields based on Cart Count add_action( 'woocommerce_before_checkout_billing_form', 'srd_custom_einstiegswahl'); function srd_custom_einstiegswahl($checkout){ global $woocommerce; $items = $woo

在woocommerce中,我在结帐页面上添加了基于购物车计数的自定义字段

// Adding Custom Fields based on Cart Count

add_action( 'woocommerce_before_checkout_billing_form', 'srd_custom_einstiegswahl');

function srd_custom_einstiegswahl($checkout){

global $woocommerce;
$items = $woocommerce->cart->get_cart();

$i = 1;

foreach($items as $item => $values) { 
    $_product = $values['data']->post;
    $quantity = $values['quantity'];
    $x = 1;

    while ($x <= $quantity) {
            // Add fields here
            echo '<h6>Reiseteilnehmer '.$x . '</h6>';
            woocommerce_form_field( 'attendee_surname_'.$x, array(
                    'type'          => 'text',
                     'class'         => array('checkout_vorname'),
                    'label'         => __('Vorame'),
                    'placeholder'   => __(''),
                    'required'      => true
              ), $checkout->get_value( 'attendee_surname_'.$x ));
            woocommerce_form_field( 'attendee_name_'.$x, array(
                    'type'          => 'text',
                    'class'         => array('checkout_nachname'),
                    'label'         => __('Nachname'),
                    'placeholder'       => __(''),
                    'required'      => true
              ), $checkout->get_value( 'attendee_name_'.$x ));
            echo '<select name=einstiegswahl'.$x .'>';
            // Select field populated by Custom Product Meta
            echo '<option value="" style="display:none"> Bitte wählen Sie Ihren Einstiegsort </option>';

            // Loop through cart items
             foreach ( WC()->cart->get_cart() as $cart_item ) {
            // Get the custom field data
             $einstiegsorte = get_post_meta( $cart_item[ 'product_id' ], '_einstiegsorte', true );
            if( ! empty($einstiegsorte) ){
            // if it's multiline we split it in an array
            $select_field_items = explode( "\n", $einstiegsorte );
            // If the array has more than one item
                if( sizeof( $select_field_items ) > 1 ){
                     foreach( $select_field_items as $value )
                         echo '<option value="'. $value .'">' . $value . '</option>';
                } 
            // If there is only one line
                else {
                // we clean it
                $value = str_replace('\n', '', $einstiegsorte);
                echo '<option value="'. $value .'">' . $value . '</option>';
                    }
                }
            }

            echo '</select>'; $checkout->get_value( 'einstiegswahl'.$x );
        $x++;
    }

    $i++;
}   
}


// Process the checkout

add_action('woocommerce_checkout_process', 'srd_teilnehmer_fields_process');

function srd_teilnehmer_fields_process() {
global $woocommerce;
$items = $woocommerce->cart->get_cart();

$i = 1;

foreach($items as $item => $values) { 
    $_product = $values['data']->post;
    $quantity = $values['quantity'];
    $x = 1;

    for($x = 1; $x <= $quantity; $x++ ) {
    //while ($x <= $quantity) {
            if (!$_POST['attendee_surname_'.$x] || !$_POST['attendee_name_'.$x] || !$_POST['einstiegswahl'.$x]) wc_add_notice( __( 'Bitte wählen Sie Ihren Einstiegsort', 'woocommerce' ), 'error' );

        }
    }
}

// Update the order meta with field value

add_action('woocommerce_checkout_update_order_meta', 'srd_teilnehmer_update_order_meta');

function srd_teilnehmer_update_order_meta( $order_id ) {

global $woocommerce;
$items = $woocommerce->cart->get_cart();

$i = 1;

foreach($items as $item => $values) { 
    $_product = $values['data']->post;
    $quantity = $values['quantity'];
    $x = 1;

    for($x = 1; $x <= $quantity; $x++ ) {
            if ( $_POST['attendee_name_'.$x] ) update_post_meta( $order_id, 'attendee_surname_'.$x , sanitize_text_field($_POST['attendee_name_'.$x]) );
            if ($_POST['attendee_surname_'.$x]) update_post_meta( $order_id, 'attendee_name_'.$x, esc_attr($_POST['attendee_surname_'.$x]));
            if ($_POST['einstiegswahl'.$x]) update_post_meta( $order_id, ' Teilnehmer Einstiegsort' .$x, esc_attr($_POST['einstiegswahl'.$x]));


  }}}
//根据购物车数量添加自定义字段
添加行动(“结帐前的woocommerce”账单“srd\U custom\u einstiegswahl”);
函数srd_custom_einnstiegswahl($checkout){
全球商业;
$items=$woocommerce->cart->get_cart();
$i=1;
foreach($items作为$item=>$values){
$\u product=$values['data']->post;
$quantity=$values['quantity'];
$x=1;
而($x“文本”,
'class'=>array('checkout\u vorname'),
“标签”=>“'Vorame'”,
“占位符”=>”,
“必需”=>true
),$checkout->get_value('attendee_姓氏.$x));
woocommerce_表单_字段('attendee_name_uu')。$x,数组(
'类型'=>'文本',
'class'=>array('checkout\u nachname'),
“标签”=>“'Nachname'”,
“占位符”=>”,
“必需”=>true
),$checkout->get_value('attendee_name.$x));
回声';
//选择由自定义产品元填充的字段
回音“bite wählen Sie Ihren Einstiegsort”;
//循环浏览购物车项目
foreach(WC()->cart->get_cart()作为$cart_项目){
//获取自定义字段数据
$einstiegsorte=get_post_meta($cart_item['product_id','einstiegsorte',true);
如果(!empty($einstiegsorte)){
//如果它是多行的,我们把它分成一个数组
$select\u field\u items=explode(“\n”,$einstiegsorte);
//如果数组中有多个项
如果(sizeof($select\u field\u items)>1){
foreach($value选择\字段\项目)
回显“.$value.”;
} 
//如果只有一行
否则{
//我们打扫它
$value=str_replace('\n','$einstiegsorte);
回显“.$value.”;
}
}
}
回显“”;$checkout->get_值('einstiegswahl'.$x);
$x++;
}
$i++;
}   
}
//处理结帐
添加操作('woocommerce\u checkout\u process'、'srd\u teilnehmer\u fields\u process');
函数srd_teilnehmer_fields_process(){
全球商业;
$items=$woocommerce->cart->get_cart();
$i=1;
foreach($items作为$item=>$values){
$\u product=$values['data']->post;
$quantity=$values['quantity'];
$x=1;
对于($x=1;$x get_cart());
$i=1;
foreach($items作为$item=>$values){
$\u product=$values['data']->post;
$quantity=$values['quantity'];
$x=1;
对于($x=1;$x获取数量();
foreach($items作为$item=>$values){
$order_quantity=$values['quantity'];
$x=1;
而($x id,'attender\u name.$x,true)。”

; } }}
如何在管理订单编辑页面中获取和显示这些自定义字段值?
如何在电子邮件通知中显示该自定义字段值


任何帮助都将不胜感激。

您的代码中有一些错误,使事情变得有点复杂

在管理商店订单编辑页面(右栏)中,最好将与会者预订数据显示为自定义元框

因此,我完全重新审视了您的代码:

// Adding Custom Fields based on Cart Count
add_action( 'woocommerce_before_checkout_billing_form', 'srd_custom_einstiegswahl');
function srd_custom_einstiegswahl( $checkout ){

    $count = 1;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        $options       = array( '' => __("Bitte wählen Sie Ihren Einstiegsort") ); 
        $einstiegsorte = get_post_meta( $cart_item[ 'product_id' ], '_einstiegsorte', true );

        if( ! empty($einstiegsorte) ){
            $option_items = explode( "\n", $einstiegsorte );
            if( sizeof( $option_items ) > 1 ){
                foreach( $option_items as $value )
                    $options[$value] = $value;
            } else {
                $value = str_replace('\n', '', $einstiegsorte);
                $options[$value] = $value;
            }
        }

        // Loop through cart item quantity
        for($i = 1; $i <= $cart_item['quantity']; $i++ ) {

            $j = $count.'_'.$i;

            echo '<h6>Reiseteilnehmer '.$i . '</h6>';

            woocommerce_form_field( '_teilnehmer_vorame_'.$j, array(
                    'type'          => 'text',
                     'class'         => array('checkout_vorname'),
                    'label'         => __('Vorame'),
                    'required'      => true,
            ), $checkout->get_value( '_teilnehmer_vorame_'.$j ));

            woocommerce_form_field( '_teilnehmer_nachname_'.$j, array(
                    'type'          => 'text',
                    'class'         => array('checkout_nachname'),
                    'label'         => __('Nachname'),
                    'required'      => true,
            ), $checkout->get_value( '_teilnehmer_nachname_'.$j ));

            woocommerce_form_field( '_teilnehmer_einstiegswahl_'.$j, array(
                'type'          => 'select',
                'class'         => array('checkout_einstiegswahl'),
                'label'         => __('Einstiegswahl'),
                'required'      => true,
                'options'       => $options,
            ), $checkout->get_value( '_teilnehmer_einstiegswahl_'.$j ));
        }
        $count++;
    }
}

// Custom checkout fields validation
add_action('woocommerce_checkout_process', 'srd_teilnehmer_fields_process');
function srd_teilnehmer_fields_process() {
    $count = 1;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {

        // Loop through cart item quantity
        for($i = 1; $i <= $cart_item['quantity']; $i++ ) {

            $j = $count.'_'.$i;

            if (!$_POST['_teilnehmer_vorame_'.$j] || !$_POST['_teilnehmer_nachname_'.$j] || !$_POST['_teilnehmer_einstiegswahl_'.$j])
                wc_add_notice( __( 'Bitte wählen Sie Ihren Einstiegsort', 'woocommerce' ), 'error' );
        }
        $count++;
    }
}

// Update the order meta data with checkout custom fields values
add_action('woocommerce_checkout_create_order', 'srd_teilnehmer_checkout_create_order', 20, 2 );
function srd_teilnehmer_checkout_create_order( $order, $data ) {
    $count = 1;

    // Loop through cart item quantity
    foreach( WC()->cart->get_cart() as $cart_item ) {

        // Loop through item quantity
        for($i = 1; $i <= $cart_item['quantity']; $i++ ) {

            $j = $count.'_'.$i;

            if ( isset($_POST['_teilnehmer_vorame_'.$j]) )
                $order->update_meta_data( '_teilnehmer_vorame_'.$j , sanitize_text_field($_POST['_teilnehmer_vorame_'.$j]) );

            if ( isset($_POST['_teilnehmer_nachname_'.$j]) )
                $order->update_meta_data( '_teilnehmer_nachname_'.$j, sanitize_text_field($_POST['_teilnehmer_nachname_'.$j]) );

            if ( isset($_POST['_teilnehmer_einstiegswahl_'.$j]) )
                $order->update_meta_data( '_teilnehmer_einstiegswahl_'.$j, sanitize_text_field($_POST['_teilnehmer_einstiegswahl_'.$j]) );
        }
        $count++;
    }
}

// Adding Custom metabox in admin orders edit pages (on the right column)
add_action( 'add_meta_boxes', 'add_reiseteilnehmer_metabox' );
function add_reiseteilnehmer_metabox(){
    add_meta_box(
        'attendees',
        __('Reiseteilnehmer'),
        'reiseteilnehmer_inhalt',
        'shop_order',
        'side', // or 'normal'
        'default' // or 'high'
    );
}

// Adding the content for the custom metabox
function reiseteilnehmer_inhalt() {
    $order = wc_get_order(get_the_id());

    $count = 1;

    $key_labels = array( 'vorame', 'nachname', 'einstiegswahl' );

    // Loop through order items
    foreach ( $order->get_items() as $item ){

        echo '<h4 style="margin:1em 0 .5em;">Order item '.$count.'</h4>';

        // Loop through item quantity
        for($i = 1; $i <= $item->get_quantity(); $i++ ) {

            echo '<div style="background-color:#eee;padding:2px;margin-bottom:.4em;">
            <h4 style="margin:.5em 0;padding:2px;">Reiseteilnehmer '.$i.'</h4>
            <table style="text-align:left;margin-bottom:.7em;" cellpadding="2"><tbody>';

            $style = ' style="padding:2px 0;"';

            // Loop through attendee fields
            foreach( $key_labels as $key ){
                $value = get_post_meta( $order->get_id(), '_teilnehmer_'.$key.'_'.$count.'_'.$i, true );
                echo '<tr><th>'.ucfirst($key).':</th><td>'.$value.'</td></tr>';
            }

            echo '</tbody></table></div>';
        }
        $count++;
    }
}
//根据购物车数量添加自定义字段
添加行动(“结帐前的woocommerce”账单“srd\U custom\u einstiegswahl”);
函数srd_custom_einnstiegswahl($checkout){
$count=1;
//循环浏览购物车项目
foreach(WC()->cart->get_cart()作为$cart_项目){
$options=array(“”=>(bite wählen Sie Ihren Einstiegsort));
$einstiegsorte=get_post_meta($cart_item['product_id','einstiegsorte',true);
如果(!empty($einstiegsorte)){
$option\u items=explode(“\n”,$einstiegsorte);
if(sizeof($option_items)>1){
foreach($option\u项目为$value)
$options[$value]=$value;
}否则{
$value=str_replace('\n','$einstiegsorte);
$options[$value]=$value;
}
}
//循环检查购物车项目数量
对于($i=1;$i“文本”,
'class'=>array('checkout\u vorname'),
“标签”=>“'Vorame'”,
“必需”=>true,
),$checkout->get_value(''teilnehmer\u vorame'.$j));
woocommerce\u form\u字段(''teilnehmer\u nachname'.$j,数组(
'类型'=>'文本',
'class'=>array('checkout\u nachname'),
“标签”=>“'Nachname'”,
“必需”=>true,
),$checkout->get_value('u teilnehmer\u nachname.'$j));
woocommerce\u form\u字段(''teilnehmer\u einstiegswahl'.$j,数组(
'类型'=>'选择',
'class'=>数组('checkout_einstiegswahl'),
“标签”=>“'Einstiegswahl'),
“必需”=>true,
“选项”=>$options,
),$checkout->get_value('u teilnehmer\u einstiegswahl.$j));
}
$count++;
}
}
//自定义签出字段验证
添加操作('woocommerce\u checkout\u process'、'srd\u teilnehmer\u fields\u process');
函数srd_teilnehmer_fields_process(){
$count=1;
//循环浏览购物车项目
foreach(WC()->cart->get_cart()作为$cart_项目){
//循环检查购物车项目数量
对于($i=1;$i cart->get\u cart()作为$cart\u项目){
//循环项目数量
对于($i=1;$i更新元数据(''teilnehmer\u vorame'.$j,清理\u te
// Adding Custom Fields based on Cart Count
add_action( 'woocommerce_before_checkout_billing_form', 'srd_custom_einstiegswahl');
function srd_custom_einstiegswahl( $checkout ){

    $count = 1;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        $options       = array( '' => __("Bitte wählen Sie Ihren Einstiegsort") ); 
        $einstiegsorte = get_post_meta( $cart_item[ 'product_id' ], '_einstiegsorte', true );

        if( ! empty($einstiegsorte) ){
            $option_items = explode( "\n", $einstiegsorte );
            if( sizeof( $option_items ) > 1 ){
                foreach( $option_items as $value )
                    $options[$value] = $value;
            } else {
                $value = str_replace('\n', '', $einstiegsorte);
                $options[$value] = $value;
            }
        }

        // Loop through cart item quantity
        for($i = 1; $i <= $cart_item['quantity']; $i++ ) {

            $j = $count.'_'.$i;

            echo '<h6>Reiseteilnehmer '.$i . '</h6>';

            woocommerce_form_field( '_teilnehmer_vorame_'.$j, array(
                    'type'          => 'text',
                     'class'         => array('checkout_vorname'),
                    'label'         => __('Vorame'),
                    'required'      => true,
            ), $checkout->get_value( '_teilnehmer_vorame_'.$j ));

            woocommerce_form_field( '_teilnehmer_nachname_'.$j, array(
                    'type'          => 'text',
                    'class'         => array('checkout_nachname'),
                    'label'         => __('Nachname'),
                    'required'      => true,
            ), $checkout->get_value( '_teilnehmer_nachname_'.$j ));

            woocommerce_form_field( '_teilnehmer_einstiegswahl_'.$j, array(
                'type'          => 'select',
                'class'         => array('checkout_einstiegswahl'),
                'label'         => __('Einstiegswahl'),
                'required'      => true,
                'options'       => $options,
            ), $checkout->get_value( '_teilnehmer_einstiegswahl_'.$j ));
        }
        $count++;
    }
}

// Custom checkout fields validation
add_action('woocommerce_checkout_process', 'srd_teilnehmer_fields_process');
function srd_teilnehmer_fields_process() {
    $count = 1;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {

        // Loop through cart item quantity
        for($i = 1; $i <= $cart_item['quantity']; $i++ ) {

            $j = $count.'_'.$i;

            if (!$_POST['_teilnehmer_vorame_'.$j] || !$_POST['_teilnehmer_nachname_'.$j] || !$_POST['_teilnehmer_einstiegswahl_'.$j])
                wc_add_notice( __( 'Bitte wählen Sie Ihren Einstiegsort', 'woocommerce' ), 'error' );
        }
        $count++;
    }
}

// Update the order meta data with checkout custom fields values
add_action('woocommerce_checkout_create_order', 'srd_teilnehmer_checkout_create_order', 20, 2 );
function srd_teilnehmer_checkout_create_order( $order, $data ) {
    $count = 1;

    // Loop through cart item quantity
    foreach( WC()->cart->get_cart() as $cart_item ) {

        // Loop through item quantity
        for($i = 1; $i <= $cart_item['quantity']; $i++ ) {

            $j = $count.'_'.$i;

            if ( isset($_POST['_teilnehmer_vorame_'.$j]) )
                $order->update_meta_data( '_teilnehmer_vorame_'.$j , sanitize_text_field($_POST['_teilnehmer_vorame_'.$j]) );

            if ( isset($_POST['_teilnehmer_nachname_'.$j]) )
                $order->update_meta_data( '_teilnehmer_nachname_'.$j, sanitize_text_field($_POST['_teilnehmer_nachname_'.$j]) );

            if ( isset($_POST['_teilnehmer_einstiegswahl_'.$j]) )
                $order->update_meta_data( '_teilnehmer_einstiegswahl_'.$j, sanitize_text_field($_POST['_teilnehmer_einstiegswahl_'.$j]) );
        }
        $count++;
    }
}

// Adding Custom metabox in admin orders edit pages (on the right column)
add_action( 'add_meta_boxes', 'add_reiseteilnehmer_metabox' );
function add_reiseteilnehmer_metabox(){
    add_meta_box(
        'attendees',
        __('Reiseteilnehmer'),
        'reiseteilnehmer_inhalt',
        'shop_order',
        'side', // or 'normal'
        'default' // or 'high'
    );
}

// Adding the content for the custom metabox
function reiseteilnehmer_inhalt() {
    $order = wc_get_order(get_the_id());

    $count = 1;

    $key_labels = array( 'vorame', 'nachname', 'einstiegswahl' );

    // Loop through order items
    foreach ( $order->get_items() as $item ){

        echo '<h4 style="margin:1em 0 .5em;">Order item '.$count.'</h4>';

        // Loop through item quantity
        for($i = 1; $i <= $item->get_quantity(); $i++ ) {

            echo '<div style="background-color:#eee;padding:2px;margin-bottom:.4em;">
            <h4 style="margin:.5em 0;padding:2px;">Reiseteilnehmer '.$i.'</h4>
            <table style="text-align:left;margin-bottom:.7em;" cellpadding="2"><tbody>';

            $style = ' style="padding:2px 0;"';

            // Loop through attendee fields
            foreach( $key_labels as $key ){
                $value = get_post_meta( $order->get_id(), '_teilnehmer_'.$key.'_'.$count.'_'.$i, true );
                echo '<tr><th>'.ucfirst($key).':</th><td>'.$value.'</td></tr>';
            }

            echo '</tbody></table></div>';
        }
        $count++;
    }
}