WordPress自定义字段:作者输入的帖子元数据
我正在审核一个 WordPress 网站 - 了解它当前的设置方式以及可以进行哪些改进。我注意到“播客”、“课程”和“目录”没有被创建为...
我有可变的产品,我添加了如下自定义字段: 函数 ab_preorder_variation_fields( $loop, $variation_data, $variation ) { 回声' 我有可变的产品,我添加了这样的自定义字段: function ab_preorder_variation_fields( $loop, $variation_data, $variation ) { echo '<div class="options_group form-row form-row-full">'; // Is Preordable woocommerce_wp_checkbox( array( 'id' => '_ab_preorder_checkbox[' . $variation->ID . ']', 'wrapper_class' => 'show_if_simple', 'label' => __(' Disponible à la précommande', 'woocommerce' ), 'description' => __( 'Disponible à la précommande', 'woocommerce' ), 'desc_tip' => true, 'value' => get_post_meta( $variation->ID, '_ab_preorder_checkbox', true ) ) ); // Custom Preorder Price woocommerce_wp_text_input( array( 'id' => '_ab_preorder_custom_price[' . $variation->ID . ']', 'label' => __( 'Prix à la précommande', 'woocommerce' ), 'placeholder' => '', 'desc_tip' => true, 'description' => __( "Prix à la précommande", 'woocommerce' ), 'type' => 'number', 'custom_attributes' => array( 'step' => 'any', 'min' => '0' ), 'value' => get_post_meta( $variation->ID, '_ab_preorder_custom_price', true ) ) ); // Date de livraison estimée woocommerce_wp_text_input( array( 'id' => '_ab_preorder_estimated_date[' . $variation->ID . ']', 'label' => __( 'Date de livraison estimé', 'woocommerce' ), 'placeholder' => '24/09/2021', 'desc_tip' => true, 'description' => __( "Date de livraison estimé", "woocommerce" ), 'value' => get_post_meta( $variation->ID, '_ab_preorder_estimated_date', true ) ) ); echo '</div>'; } add_action( 'woocommerce_product_after_variable_attributes', 'ab_preorder_variation_fields', 10, 3 ); // After all Variation fields function ab_preorder_variation_fields_saving( $post_id ){ // Is Preordable $woocommerce_text_field = $_POST['_ab_preorder_checkbox'][ $post_id ]; update_post_meta( $post_id, '_ab_preorder_checkbox', esc_attr( $woocommerce_text_field ) ); // Custom Preorder Price $woocommerce_text_field = $_POST['_ab_preorder_custom_price'][ $post_id ]; update_post_meta( $post_id, '_ab_preorder_custom_price', esc_attr( $woocommerce_text_field ) ); // Date de livraison estimée $woocommerce_text_field = $_POST['_ab_preorder_estimated_date'][ $post_id ]; update_post_meta( $post_id, '_ab_preorder_estimated_date', esc_attr( $woocommerce_text_field ) ); } 这是 WP Admin 中的结果: 这就是我想做的: 当客户选择变体时,我想要:如果变体库存数量为 0 并且选中了 _ab_preorder_checkbox 复选框,我想将产品价格设置为 100。 我尝试使用下面的代码,但它不起作用:/ function action_woocommerce_before_calculate_totals( $cart_object) { $cart_items = $cart_object->cart_contents; if ( ! empty( $cart_items ) ) { $price = 100; foreach ( $cart_items as $key => $value ) { if($value['data']['_ab_preorder_checkbox']=="yes") $value['data']->set_price( $price ); } } }; add_action( 'woocommerce_before_calculate_totals', 'action_woocommerce_before_calculate_totals', 10, 2 ); 有人可以帮我吗? 问候, 由于 woocommerce 不允许购买零库存的产品,因此您需要为相关产品设置“允许缺货”选项。 我重新审视了你的代码(特别是你的第二个函数)。 挂钩 woocommerce_before_calculate_totals 在您的情况下不方便。最好在产品上设置延期交货自定义价格。 以下内容将在启用复选框时设置变体的延期交货价格,并将其显示在相关变体上以及预计交货日期: // Admin Variation custom fields add_action( 'woocommerce_product_after_variable_attributes', 'ab_preorder_variation_fields', 10, 3 ); function ab_preorder_variation_fields( $loop, $variation_data, $variation ) { echo '<div class="options_group form-row form-row-full">'; // Is Preordable woocommerce_wp_checkbox( array( 'id' => '_ab_preorder_checkbox['.$loop.']', 'wrapper_class' => 'show_if_simple', 'label' => __(' Disponible à la précommande', 'woocommerce' ), 'description' => __( 'Disponible à la précommande', 'woocommerce' ), 'desc_tip' => true, 'value' => get_post_meta( $variation->ID, '_ab_preorder_checkbox', true ) ) ); // Custom Preorder Price woocommerce_wp_text_input( array( 'id' => '_ab_preorder_custom_price['.$loop.']', 'label' => __( 'Prix à la précommande', 'woocommerce' ), 'placeholder' => '', 'desc_tip' => true, 'description' => __( "Prix à la précommande", 'woocommerce' ), 'type' => 'number', 'custom_attributes' => array( 'step' => 'any', 'min' => '0' ), 'value' => get_post_meta( $variation->ID, '_ab_preorder_custom_price', true ) ) ); // Date de livraison estimée woocommerce_wp_text_input( array( 'id' => '_ab_preorder_estimated_date['.$loop.']', 'label' => __( 'Date de livraison estimé', 'woocommerce' ), 'desc_tip' => true, 'description' => __( "Date de livraison estimé", "woocommerce" ), 'type' => 'date', 'value' => get_post_meta( $variation->ID, '_ab_preorder_estimated_date', true ) ) ); echo '</div>'; } // Save admin Variations custom fields values add_action( 'woocommerce_admin_process_variation_object', 'ab_preorder_variation_fields_saving', 10, 2 ); function ab_preorder_variation_fields_saving( $variation, $loop ) { if( isset($_POST['_ab_preorder_checkbox'][$loop]) ) { $variation->update_meta_data( '_ab_preorder_checkbox', esc_attr($_POST['_ab_preorder_checkbox'][$loop]) ); } if( isset($_POST['_ab_preorder_custom_price'][$loop]) ) { $variation->update_meta_data( '_ab_preorder_custom_price', esc_attr($_POST['_ab_preorder_custom_price'][$loop]) ); } if( isset($_POST['_ab_preorder_estimated_date'][$loop]) ) { $variation->update_meta_data( '_ab_preorder_estimated_date', esc_attr($_POST['_ab_preorder_estimated_date'][$loop]) ); } } // Set the variation backorder price add_filter('woocommerce_product_variation_get_regular_price', 'custom_price', 99, 2 ); add_filter('woocommerce_product_variation_get_price', 'custom_price', 99, 2 ); function custom_price( $price, $product ) { if ( $product->get_stock_quantity() == 0 && $product->get_meta('_ab_preorder_checkbox') === 'yes' ) { $backorder_price = $product->get_meta('_ab_preorder_custom_price'); if( $backorder_price > 0 ) { $price = (float) $backorder_price; } } return $price; } // Display prefixed backorder price and estimated delivery on single product pages add_filter( 'woocommerce_available_variation', 'ab_available_variation_custom_field', 10, 3 ); function ab_available_variation_custom_field( $variation_data, $product, $variation ) { if ( $variation->get_stock_quantity() == 0 && $variation->get_meta('_ab_preorder_checkbox') === 'yes' ) { if ( $estimated_delivery_date = $variation->get_meta('_ab_preorder_estimated_date') ) { // Display estimated delivery date $variation_data['availability_html'] .= sprintf( '<p class="stock date-precommande">%s : %s</p>', __("Date de livraison estimée (précommande)", "woocommerce"), $estimated_delivery_date ); } // Displayed prefixed formatted price $variation_data['price_html'] = '<span class="price-prefix">'.__("Prix à la précommande", "") .'<span> : ' . wc_price( $variation_data['display_price'] ); } return $variation_data; } // Display on estimated delivery date on cart and checkout add_filter( 'woocommerce_get_item_data', 'display_acf_on_cart_and_checkout', 10, 2 ); function display_acf_on_cart_and_checkout( $cart_data, $cart_item ) { if ( $cart_item['variation_id'] > 0 && $cart_item['data']->get_stock_quantity() == 0 && $cart_item['data']->get_meta('_ab_preorder_checkbox') === 'yes' ) { if ( $estimated_delivery_date = $cart_item['data']->get_meta('_ab_preorder_estimated_date') ) { $custom_items[] = array( "name" => __("Date de livraison estimée", "woocommerce"), "value" => $estimated_delivery_date ); } } return $custom_items; } 代码位于活动子主题(或活动主题)的functions.php 文件中。已测试并有效。
购物车商品价格计算,基于 Woocommerce 中选择的“天”自定义字段
在 Woocommerce 中,我根据以下线程代码使用自定义字段来计算产品的价格:在 Woocommerce 3 中将产品自定义字段显示为订单项目。 // 在唱歌之前添加自定义字段...
根据 WooCommerce 中的自定义字段使用不同显示的产品属性标签名称
在 WooCommerce 中,我定义了添加/定义了一些产品属性及其名称,并且我编写了一些代码,这些代码应该允许我在可变产品级别定义替代属性标签名称。 S...
向 WooCommerce 管理优惠券设置添加自定义多选字段
在 Woocommerce 后端“添加 cupon”部分中,我想创建一个名为“免费产品”的额外自定义字段,其中有 2 个选项“是和否”。 如果是,那么是多产品
如何在 Wordpress Woocommerce 优惠券后端创建自定义字段
在 Woocommerce 后端“添加 cupon”部分中,我想创建一个名为“免费产品”的额外自定义字段,其中有 2 个选项“是和否”。 如果是,那么是多产品
我有一本自定义帖子类型的书,在它的参数中我有 'show_in_rest' => 真, 现在我想向其中添加一个自定义字段,如下所示: add_action( 'init', 'add_to_rest_test' ); 函数 add_to_rest_t...
我有两个“自定义字段”分配给我的帖子。这两个“自定义字段”具有相同的名称,但“值”不同。目前,我下面的代码仅显示其中一个链接。我正在尝试...
如何在Typescript中正确使用useField(Formik)?
当我尝试从我的传递所有道具(类型、占位符、类名等)时出现错误,我该如何修复它? ** 这是我的代码:** 当我尝试从我的<MyTextInput />传递所有道具(类型、占位符、类名等)时出现错误,我该如何修复它? ** 这是我的代码:** <MyTextInput label="Password:" name="password" placeholder="Enter your password" className="text-pink-600" /> 这是我的自定义输入组件: import { FieldHookConfig, useField } from 'formik'; import React from 'react'; interface IFieldProps { label?: string; } const MyTextInput: React.FC<IFieldProps & FieldHookConfig<string>> = ({ label, ...props }) => { const { name } = props; const [field, meta] = useField(props); // console.log({ field, meta, others }); return ( <div className="flex flex-col"> <label htmlFor={name}>{label}</label> <input id={name} type="text" {...field} {...props} /> // error here... </div> ); }; export default MyTextInput; ** 这是错误:** Type '{ ref?: LegacyRef<HTMLInputElement> | undefined; key?: Key | null | undefined; accept?: string | undefined; alt?: string | undefined; autoComplete?: HTMLInputAutoCompleteAttribute | undefined; ... 295 more ...; innerRef?: ((instance: any) => void) | undefined; } | { ...; } | { ...; }' is not assignable to type 'DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>'. Type '{ ref?: LegacyRef<HTMLSelectElement> | undefined; key?: Key | null | undefined; autoComplete?: string | undefined; disabled?: boolean | undefined; ... 275 more ...; checked?: boolean | undefined; }' is not assignable to type 'DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>'. Type '{ ref?: LegacyRef<HTMLSelectElement> | undefined; key?: Key | null | undefined; autoComplete?: string | undefined; disabled?: boolean | undefined; ... 275 more ...; checked?: boolean | undefined; }' is not assignable to type 'ClassAttributes<HTMLInputElement>'. Types of property 'ref' are incompatible. Type 'LegacyRef<HTMLSelectElement> | undefined' is not assignable to type 'LegacyRef<HTMLInputElement> | undefined'. Type '(instance: HTMLSelectElement | null) => void' is not assignable to type 'LegacyRef<HTMLInputElement> | undefined'. Type '(instance: HTMLSelectElement | null) => void' is not assignable to type '(instance: HTMLInputElement | null) => void'. Types of parameters 'instance' and 'instance' are incompatible. Type 'HTMLInputElement | null' is not assignable to type 'HTMLSelectElement | null'. Type 'HTMLInputElement' is missing the following properties from type 'HTMLSelectElement': length, options, selectedIndex, selectedOptions, and 4 more.ts(2322) (property) JSX.IntrinsicElements.input: React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> 我不想这样做:<input {...field} placeholder={props.placeholder} type={props.type} /> 我认为问题源于FieldHookConfig的定义: export type FieldHookConfig<T> = GenericFieldHTMLAttributes & FieldConfig<T>; 其中 GenericFieldHTMLAttributes 定义为 export type GenericFieldHTMLAttributes = | JSX.IntrinsicElements['input'] | JSX.IntrinsicElements['select'] | JSX.IntrinsicElements['textarea']; 基本上,TypeScript 会警告您,由于您使用的是 FieldHookConfig,因此您收到的属性总是有可能是 select 或 textarea 属性,这些属性与 input 不兼容。 我认为解决这个问题的最好方法是: import { FieldConfig, useField } from 'formik'; import React from 'react'; interface IFieldProps { label?: string; } const MyTextInput: React.FC<IFieldProps & FieldConfig<string> & JSX.IntrinsicElements['input']> = ({ label, ...props }) => { const { name } = props; const [field, meta] = useField(props); // console.log({ field, meta, others }); return ( <div className="flex flex-col"> <label htmlFor={name}>{label}</label> <input id={name} type="text" {...field} {...props} /> </div> ); }; export default MyTextInput; this should 将类型缩小为仅访问 input 属性。
在发送信封之前需要帮助使用动态数据预填充 DocuSign 模板文档字段
我目前正在开发一个项目,需要在发送信封之前用动态数据预填充 DocuSign 模板文档字段。我尝试过多种方法但都没有成功...
我在产品订单上添加了一个额外的字段,以便在订购特定产品时允许自定义注释: // 在单个产品页面显示自定义字段 函数 d_extra_product_field(){ $v...
WooCommerce PHP 获取额外产品字段的特定产品类别
WooCommerce 额外字段示例 我在产品订单上添加了一个额外的字段,以便在订购特定产品时允许自定义注释。但是,它为每个产品添加了这个字段。我
这是我当前的查询: query_posts(array_merge(array('tag' => $pagetag,'meta_key'=>优先级,'orderby' =>meta_value, 'order' =>'ASC','paged' => get_query_var('paged'))) ); 我的问题...
根据购物车总计向 WooCommerce 结账页面添加自定义字段
我正在尝试向 WooCommerce 结帐页面添加自定义字段,但我希望它仅在订单总数超过一定金额(假设为 500)时才出现。我已经考虑过修改表单。 .
我必须创建一个网站来销售课程注册,并且要做,所以我正在使用 WooCommerce。 单身人士和为其员工进行多次注册的公司都将参加 c...
如何将文本区域字段值添加到 WooCommerce 结账中的自定义表格?
我正在尝试在创建订单时将自定义文本区域输入写入自定义 WordPress 表中。不幸的是,自定义文本区域输入未保存在我的自定义表中。只有一个“;”...
如何将文本区域字段值添加到 WooCommerce 中的自定义表?
我正在尝试在创建订单时将自定义文本区域输入写入自定义 WordPress 表中。不幸的是,自定义文本区域输入未保存在我的自定义表中。只有一个“;”...
如何在wordpress中使用sql将自定义textarea输入值添加到自定义表?
我正在尝试在创建订单时将自定义文本区域输入写入自定义 WordPress 表中。不幸的是,自定义文本区域输入未保存在我的自定义表中。只有一个“;”...
在 WooCommerce 中添加自定义购物车项目数据数组作为订单项目元数据数组
我有此设置可以将产品的自定义元字段添加到订单中的商品中。 1:我使用 woocommerce_before_add_to_cart_button 创建一个自定义字段,它是一个具有多个文件的列表字段...
我有此设置可以将产品的自定义元字段添加到订单中的商品中。 1:我使用 woocommerce_before_add_to_cart_button 创建一个自定义字段,它是一个具有多个文件的列表字段...