WooCommerce:自定义域和电子邮件短代码,EC_CUSTOM_FIELD

时间:2017-09-01 作者:user92979

如何向Woocommerce产品添加自定义字段,并使该字段出现在购买生成的电子邮件中?

关于这方面的文档很少,其中一半似乎来自多年前代码结构不同的时候。

1 个回复
SO网友:user92979

经过多次努力,我们终于找到了答案。这是我们为自己编写的文档。非常令人失望的是,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>\';
}
这将打印出所有键及其值的列表,因此您无需猜测需要使用哪个键。

结束

相关推荐