Php 在电子商务管理订单列表自定义列中显示签出字段值
我被一项任务困住了。我想在woocommerce后端的shop order列中添加一个额外的列。 如果客户在签出时选中复选框字段,则此额外列应显示回显输出 因此,添加额外的列并不难。我是这样做的Php 在电子商务管理订单列表自定义列中显示签出字段值,php,wordpress,woocommerce,checkout,orders,Php,Wordpress,Woocommerce,Checkout,Orders,我被一项任务困住了。我想在woocommerce后端的shop order列中添加一个额外的列。 如果客户在签出时选中复选框字段,则此额外列应显示回显输出 因此,添加额外的列并不难。我是这样做的 add_filter('manage_edit-shop_order_columns', 'invoice_order_overview'); function invoice_order_overview($columns) { $new_columns = (is_array($columns))
add_filter('manage_edit-shop_order_columns', 'invoice_order_overview');
function invoice_order_overview($columns) {
$new_columns = (is_array($columns)) ? $columns : array();
unset($new_columns['order_actions']);
//edit this for you column(s)
//all of your columns will be added before the actions column
$new_columns['MY_COLUMN_ID_2'] = 'Extra Column';
//stop editing
$new_columns['order_actions'] = $columns['order_actions'];
return $new_columns;
}
现在我想在这个新增的专栏中展示一些东西。签出页面上复选框的功能如下所示。它已经在订单编辑页面显示回显输出
// Add custom checkbox field to checkout
add_action( 'woocommerce_review_order_before_submit', 'my_custom_checkout_field' );
function my_custom_checkout_field() {
echo '<div id="my_custom_checkout_field">';
woocommerce_form_field( 'my_field_name', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('Rechnung beilegen? (Sonst nur Lieferschein)'),
), WC()->checkout->get_value( 'my_field_name' ) );
echo '</div>';
}
// Save the custom checkout field in the order meta, when checkbox has
been checked
add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 1 );
function custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['my_field_name'] ) )
update_post_meta( $order_id, 'my_field_name',
$_POST['my_field_name'] );
}
// Display the custom field result on the order edit page (backend)
when checkbox has been checked
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_field_on_order_edit_pages', 10, 1 );
function display_custom_field_on_order_edit_pages( $order ){
$my_field_name = get_post_meta( $order->get_id(), 'my_field_name',
true );
if( $my_field_name == 1 )
echo '<p style="background: #dba029; padding: 1em !important;
color: #fff; font-weight: 700;"><strong>Rechnung beilegen! </strong>
</p>';
}
但这在添加的列中给了我一个“未定义变量”错误
如果我只放echo'Rechnung beilegen!'将“Rechnung beilegen”输出到MY_COLUMN_ID_2中的每一行。
像这样:
add_action('manage_shop_order_posts_custom_column', 'invoice_order_overview_value', 2);
function invoice_order_overview_value($column) {
global $post;
if ($column == 'MY_COLUMN_ID_2') {
echo 'Rechnung beilegen!';
}
}
因此,问题是:
如何根据在$my\u field\u name
中选择的内容获取输出到my\u COLUMN\u ID\u 2
感谢您的帮助。以下重新访问的代码将添加一个自定义列,并将显示自定义签出字段“随附发票”值:
//将自定义复选框字段添加到签出
添加操作('woocommerce\u review\u order\u before\u submit'、'my\u custom\u checkout\u field');
函数my\u custom\u checkout\u field(){
回声';
woocommerce\u form\u字段('随附发票',数组(
'键入'=>'复选框',
'class'=>array('input-checkbox'),
“标签”=>uuuuuuuuuuuuuuuuuuu(“附上发票”(否则仅限送货单)”,
),WC()->结帐->获取价值(“随附发票”);
回声';
}
//选中复选框后,在订单元中保存自定义签出字段
添加操作('woocommerce\u checkout\u create\u order'、'save\u order\u custom\u meta\u data',10,2);
函数save_order_custom_meta_data($order,$data){
如果(isset($邮寄[''随附发票])
$order->更新元数据(“随附发票”、“1”);
}
//选中复选框后,在订单编辑页面(后端)上显示自定义字段结果
添加操作('woocommerce\u admin\u order\u data\u after\u billing\u address','display\u custom\u field\u on\u order\u edit\u pages',10,1);
功能显示\自定义\字段\在\订单\编辑\页面上($order){
如果($my_field_name=$order->get_meta(''u Included_invoice'))
echo'随附发票!;
}
//在管理订单列表中的“操作”列之前添加自定义列
添加过滤器(“管理编辑车间订单列”,“添加随附发票订单列”,10,1);
函数添加\随附\发票\订单\列($columns){
//Woocommerce自3.3版起的兼容性
$actions_key=isset($columns['wc_actions'])?'wc_actions':'order_actions';
$order_actions=$columns[$actions_key];
未设置($columns[$actions_key]);
$columns[“随附发票”]=“附件发票”、“商业发票”);
$columns[$actions\u key]=$order\u actions;
返回$columns;
}
//将数据显示到管理订单列表中的自定义列
添加操作('manage_shop_order_posts_custom_column','display_included_invoice_order_column_data');
功能显示\随附\发票\订单\列\数据($column){
全球$the_订单,$post;
如果($column==“随附发票”){
如果($enclosed\u invoice=$the\u order->get\u meta(“\u enclosed\u invoice”)){
echo(“是”、“woocommerce”);
}否则{
回声'-';
}
}
}
代码进入活动子主题(活动主题)的function.php文件。测试和工作
自Woocommerce 3.3版以来,管理订单列表操作列已被重命名为'wc\u actions'
,而不是'order\u actions'
在函数“invoice\u order\u overview\u value”中,尝试声明全局变量“$woocommerce”和“$order”以及“$post”。$woocommerce
已经不再需要了…
add_action('manage_shop_order_posts_custom_column', 'invoice_order_overview_value', 2);
function invoice_order_overview_value($column) {
global $post;
if ($column == 'MY_COLUMN_ID_2') {
echo 'Rechnung beilegen!';
}
}
// Add custom checkbox field to checkout
add_action( 'woocommerce_review_order_before_submit', 'my_custom_checkout_field' );
function my_custom_checkout_field() {
echo '<div id="my_custom_checkout_field">';
woocommerce_form_field( '_enclosed_invoice', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('Enclose invoice? (Otherwise only delivery note)'),
), WC()->checkout->get_value( '_enclosed_invoice' ) );
echo '</div>';
}
// Save the custom checkout field in the order meta, when checkbox has been checked
add_action( 'woocommerce_checkout_create_order', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( $order, $data ) {
if ( isset($_POST['_enclosed_invoice']) )
$order->update_meta_data('_enclosed_invoice', '1' );
}
// Display the custom field result on the order edit page (backend) when checkbox has been checked
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_field_on_order_edit_pages', 10, 1 );
function display_custom_field_on_order_edit_pages( $order ){
if( $my_field_name = $order->get_meta( '_enclosed_invoice' ) )
echo '<p style="background: #dba029; padding: 1em !important; color: #fff; font-weight: 700;"><strong>Enclosed invoice!</strong></p>';
}
// Add custom column before "Actions" column in admin orders list
add_filter('manage_edit-shop_order_columns', 'add_enclosed_invoice_order_column', 10, 1 );
function add_enclosed_invoice_order_column( $columns ) {
// Woocommerce compatibility since version 3.3
$actions_key = isset($columns['wc_actions']) ? 'wc_actions' : 'order_actions';
$order_actions = $columns[$actions_key];
unset($columns[$actions_key]);
$columns['enclosed_invoice'] = __("Enc. Invoice", "woocommerce");
$columns[$actions_key] = $order_actions;
return $columns;
}
// Display data to custom column in admin orders list
add_action( 'manage_shop_order_posts_custom_column' , 'display_enclosed_invoice_order_column_data' );
function display_enclosed_invoice_order_column_data( $column ) {
global $the_order, $post;
if( $column == 'enclosed_invoice' ) {
if( $enclosed_invoice = $the_order->get_meta( '_enclosed_invoice' ) ) {
echo __("Yes", "woocommerce");
} else {
echo ' - ';
}
}
}