【问题标题】:Searchable multiple product select custom field for WoocommerceWoocommerce 的可搜索多个产品选择自定义字段
【发布时间】:2019-02-01 01:55:19
【问题描述】:

我正在开发一个插件,我需要在其中显示一些自定义选择产品。到目前为止,我可以制作选项字段,但我如何将它们保存为选项字段,并使用逗号分隔的产品 ID 之类的。

45,78,55,48, 

这里是 WooCommerce 产品的可搜索多项选择选项的示例。

这是我的代码

function crp_select_products() {
    global $post, $woocommerce;
    $product_ids = array();
    ?>
    <div class="options_group">
        <?php if ( $woocommerce->version >= '3.0' ) : ?>
            <p class="form-field">
                <label for="related_ids"><?php _e( 'Search Products', 'woocommerce' ); ?></label>
                <select class="wc-product-search" multiple="multiple" style="width: 50%;" id="related_ids" name="related_ids[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations">
                    <?php
                        foreach ( $product_ids as $product_id ) {
                            $product = wc_get_product( $product_id );
                            if ( is_object( $product ) ) {
                                echo '<option value="' . esc_attr( $product_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $product->get_formatted_name() ) . '</option>';
                            }
                        }
                    ?>
                </select> <?php echo wc_help_tip( __( 'Select products are for sale product.', 'woocommerce' ) ); ?>
            </p>
        <?php endif; ?>
    </div>
    <?php
}

【问题讨论】:

  • 问更具体。你想在哪里存储什么,出于什么目的?
  • @radscheit 将此显示为插件选项字段。所以选定的产品 ID 可以保存为选项值,用逗号分隔。

标签: php wordpress woocommerce product custom-fields


【解决方案1】:

首先,您的函数中缺少一些东西,用于显示其中保存的数据。

之后,这个特殊字段需要显示在一个带有提交按钮的表单中。所以这取决于你在哪里使用你的功能。

下面是一个将自定义字段显示为自定义产品设置的示例,保存数据并在其中显示保存的数据:

function crp_get_product_related_ids() {
    global $post, $woocommerce;

    $product_ids = get_post_meta( $post->ID, '_related_ids', true );
    if( empty($product_ids) )
        $product_ids = array();
    ?>
    <div class="options_group">
        <?php if ( $woocommerce->version >= '3.0' ) : ?>
            <p class="form-field">
                <label for="related_ids"><?php _e( 'Search Products', 'woocommerce' ); ?></label>
                <select class="wc-product-search" multiple="multiple" style="width: 50%;" id="related_ids" name="related_ids[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations">
                    <?php
                        foreach ( $product_ids as $product_id ) {
                            $product = wc_get_product( $product_id );
                            if ( is_object( $product ) ) {
                                echo '<option value="' . esc_attr( $product_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $product->get_formatted_name() ) . '</option>';
                            }
                        }
                    ?>
                </select> <?php echo wc_help_tip( __( 'Select products are for sale product.', 'woocommerce' ) ); ?>
            </p>
        <?php endif; ?>
    </div>
    <?php
}

add_action( 'woocommerce_product_options_general_product_data', 'add_custom_fied_in_product_general_fields', 20 );
function add_custom_fied_in_product_general_fields() {
    global $post, $woocommerce;
    crp_get_product_related_ids();
}


add_action( 'woocommerce_process_product_meta', 'process_product_meta_custom_fied', 20, 1 );
function process_product_meta_custom_fied( $product_id ){
    if( isset( $_POST['crosssell_ids'] ) ){
        update_post_meta( $product_id, '_related_ids', array_map( 'intval', (array) wp_unslash( $_POST['related_ids'] ) ) );
    }
}

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

  • 感谢您的回答。可以将其显示为插件选项字段,而不是产品元数据。因此选定的产品 ID 可以保存为选项值,用逗号分隔。
  • @Firefog 是的,我想......你的实际问题太模糊了,你应该提供更多关于上下文和位置的信息,更多细节和更多相关代码。所以最好的办法是先尝试,如果需要使用允许重现问题的必要相关代码提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 2017-11-13
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多