经过多次努力,我们终于找到了答案。这是我们为自己编写的文档。非常令人失望的是,Woocommerce懒得为此编写自己的文档(相反,只能链接到一个昂贵的插件)。
我没有添加关于为产品订单定制模板的部分,我没有这样做。
背景:PHP运行一堆代码来生成页面。之前运行了很多过滤器来“处理”数据并进行设置,然后在最后执行一个操作,基本上打印出结果页面的HTML。
在页面开始呈现之前,会运行“过滤器”。运行一个“操作”来编写页面,即写出生成的HTML以发送给webbrowser客户端。
您可以在Woocommerce提供的特定点添加自己的过滤器和操作(例如,在签出按钮之前打印一个按钮)。wordpress/woocommerce将在其中运行您的自定义功能,其中有指定的“挂钩”点。
要添加自己的自定义内容,请编辑文件:public\\u html/wp-content/themes/Divi-child/functions。phpand调用add\\u filter()或add\\u action(),使用:*woocommerce钩子的键名*要在该钩子点期间运行的函数的文本名。您的函数将添加到Woocommerce将在执行期间的特定时间点运行的列表中。
因此,自定义字段的步骤。例如“eye Color”,显示标题为“eye Color”,按键为“eye\\u Color”。
步骤1:向签出页面添加“操作”,以呈现此新字段
////////////////////
// (run this after \'order notes\') (call it
custom_WHATEVERKEY_checkout_field - same as function name)
// | |
// | |
// v v
add_action( \'woocommerce_after_order_notes\', \'custom_eye_colour_checkout_field\' );
// function name must match text above in add_action
function custom_eye_colour_checkout_field( $checkout ) {
// div id can be anything, you use this id to match CSS styling
// \'echo\' will \'print\' out HTML to the resulting page... this is the point of \'actions\'
echo \'<div id="custom_eye_colour_checkout_field"><h2>\' . __(\'Eye Colour\') . \'</h2>\';
// \'eye_colour\' is the key... \'class\' will be the CSS styling class
// Label is displayed in the order page,
// Placeholder is what is written in the little text box before user starts typing.
//
woocommerce_form_field( \'eye_colour\', array(
\'type\' => \'text\', // could be a number or something else, page will help validate
\'class\' => array(\'my-field-class form-row-wide\'), // CSS style class
\'label\' => __(\'Eye Colour (whatever you like in the title)\'),
\'placeholder\' => __(\'Enter the eye colour you would like, display in the entry text box\'),
), $checkout->get_value( \'eye_colour\' ));
// note the eye_colour key at the bottom line here
// and finish the little HTML enclosing div.
echo \'</div>\';
}
第2步:从用户那里输入键入的“眼睛颜色”,并将其与订单详细信息一起存储用户将点击“下订单”,这是一个普通的HTML表单,它将按照web世界的惯例通过HTTP POST字段提交所有键入的详细信息。
因此,我们必须引入该字段,并用键将其“附加”到订单中。这是通过一个“动作”完成的,不确定具体的机制或何时执行。
请注意,下面的文本键**在此处,
update_post_meta( $order_id, \' ** eye_colour ** \', sanitize_text_field( $_POST[\'eye_colour\'] ) );
不需要与POST键相同,它是附加到订单的键。但是,让我们继续保持不变。请注意,我们通常使用这种类型的密钥命名,就像惯例一样。
add_action( \'woocommerce_checkout_update_order_meta\', \'custom_eye_colour_checkout_field_update_order_meta\' );
function custom_eye_colour_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST[\'eye_colour\'] ) ) {
update_post_meta( $order_id, \'eye_colour\', sanitize_text_field( $_POST[\'eye_colour\'] ) );
}
}
步骤3——在“订单编辑”页面中显示此字段,我假设该页面位于Wordpress的后端
add_action( \'woocommerce_admin_order_data_after_billing_address\', \'custom_eye_colour_checkout_field_display_admin_order_meta\', 10, 1 );
function custom_eye_colour_checkout_field_display_admin_order_meta($order){
echo \'<p><strong>\'.__(\'Eye Colour\').\':</strong> \' . get_post_meta( $order->id, \'eye_colour\', true ) . \'</p>\';
}
第4步——在电子邮件中显示魔幻雨舞的短代码是
[ec_custom_field key="eye_colour"]
将其放在Woocommerce“Email Customizer”的“Main Text”中,它将用用户在订单中键入的文本替换该区块。
步骤5--在订单编辑页面中显示此内容(显示在后端,您可以查看人们下达的所有订单)
同样,我们将在函数中添加一个钩子。php请注意,挂钩名称称为“woocommerce\\u admin\\u order\\u data\\u after\\u billing\\u address”,因此此信息将显示在“billing address”部分之后。可能还有一些其他挂钩,因此您可以在页面中的不同位置显示这些信息。
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>\'.__(\'Eye Colour\').\':</strong> \' . get_post_meta( $order->id, \'eye_colour\', true ) . \'</p>\';
}
步骤6——奖金级别——ec\\U custom\\U字段可以使用哪些字段不清楚[ec\\u custom\\u字段键=“???”]中需要什么代码部分因此,让我们在Wordpress后端的product order页面中显示这些字段的列表(即管理部分,您可以在其中查看人们下达的所有产品订单)。
同样,我们将在函数中添加一个钩子。php这一次,我们将打印出订单所附所有字段的列表(似乎是附在HTTP帖子上的)。
add_action( \'woocommerce_admin_order_data_after_billing_address\', \'debug_checkout_field_display_admin_order_meta\', 10, 1 );
function debug_checkout_field_display_admin_order_meta($order){
echo \'<p><strong>\'.__(\'(debug) List fields\').\':</strong>\';
$vals = get_post_meta( $order->id );
// Assume each value is a 1 element array, seems to be the situation.
foreach($vals as $key => $val) {
echo \'<br/>* <strong>\' . $key . \':</strong> \' . $val[0];
}
/* To print out all the elements in the value-keys...
foreach($vals as $key => $val) {
echo \'<br/>* <strong>\' . $key . \':</strong> \' . $val;
foreach($val as $key2 => $val2) {
echo \'<br/>** <strong>\' . $key2 . \':</strong> \' . $val2;
}
}
*/
echo \'<br/>Thats it.<br/>\';
echo \'</p>\';
}
这将打印出所有键及其值的列表,因此您无需猜测需要使用哪个键。