在WooCommerce后端中将自定义字段添加为默认值,并填充以前的订单

问题描述

我知道问题的第一部分是可能的,但尚未找到如何在后端所有订单添加自定义字段,然后使用认值填充该字段。

我要创建一个名为“商家标识符”的自定义字段,然后使用名称(例如“ Company X”)填充该字段。

我查看了这段代码,该代码在结帐时添加了输入值,然后显示了订单摘要,但是我只需要将一个字段作为自定义字段添加到后端的每个订单中。

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process','my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set,if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ),'error' );
}


/**
 * Update the order Meta with field value
 */
add_action( 'woocommerce_checkout_update_order_Meta','my_custom_checkout_field_update_order_Meta' );

function my_custom_checkout_field_update_order_Meta( $order_id ) {
    if ( ! empty( $_POST['billing_phone_new'] ) ) {
        update_post_Meta( $order_id,'billing_phone_new',sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * display field value on the order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address','my_custom_checkout_field_display_admin_order_Meta',10,1 );

function my_custom_checkout_field_display_admin_order_Meta($order){
    echo '<p><strong>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(),true ) . '</p>';
}

自定义字段出现在所有新旧订单上之后,我可以添加内容并将其添加为计划的CSV导出中的一列(稍后再讲-我只需要实现第一部分)

我不确定是否需要先在结帐时使用认值来隐藏字段,还是不确定是否可以使用其他方法添加自定义字段以在后端的所有订单上显示该字段。

有人可以帮助吗?

谢谢

解决方法

对于新订单,您可以使用以下

import requests
from bs4 import BeautifulSoup

link = 'https://alta.registries.gov.ab.ca/spinii/logon.aspx'
lnotice = 'https://alta.registries.gov.ab.ca/spinii/legalnotice.aspx'
search_page = 'https://alta.registries.gov.ab.ca/SpinII/SearchSelectType.aspx'
map_page = 'http://alta.registries.gov.ab.ca/SpinII/mapindex.aspx'
map_find = 'http://alta.registries.gov.ab.ca/SpinII/mapfinds.aspx'
table_link = 'https://alta.registries.gov.ab.ca/SpinII/popupTitleSearch.aspx?title=628086906'

def get_content(s,link):   
    r = s.get(link)
    soup = BeautifulSoup(r.text,"lxml")
    payload = {i['name']:i.get('value','') for i in soup.select('input[name]')}
    payload['uctrlLogon:cmdLogonGuest.x'] = '80'
    payload['uctrlLogon:cmdLogonGuest.y'] = '20'

    r = s.post(link,data=payload)
    soup = BeautifulSoup(r.text,'') for i in soup.select('input[name]')}
    payload['cmdYES.x'] = '52'
    payload['cmdYES.y'] = '8'

    s.post(lnotice,data=payload)
    s.headers['Referer'] = 'https://alta.registries.gov.ab.ca/spinii/welcomeguest.aspx'
    
    s.get(search_page)
    s.headers['Referer'] = 'https://alta.registries.gov.ab.ca/SpinII/SearchSelectType.aspx'
    
    s.get(map_page)
    
    r = s.get(map_find)
    s.headers['Referer'] = 'http://alta.registries.gov.ab.ca/SpinII/mapfinds.aspx'
    soup = BeautifulSoup(r.text,'') for i in soup.select('input[name]')}
    payload['__EVENTTARGET'] = 'Finds$lstFindTypes'
    payload['Finds:lstFindTypes'] = 'Linc'
    payload['Finds:ctlLincNumber:txtLincNumber'] = '0030278592'
    
    r = s.post(map_find,data=payload)
    
    r = s.get(table_link)
    print(r.text)


if __name__ == "__main__":
    with requests.Session() as s:
        s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/86.0.4240.75 Safari/537.36'
        get_content(s,link)

对于现有订单,您可以执行以下功能,该功能在执行(查看任何页面-前端)后可能会被删除。

The only problem with this site is that it is unavailable in daytime for maintenance.