Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将Woocommerce产品字段的默认值设置为“所有产品”_Php_Wordpress_Woocommerce - Fatal编程技术网

Php 将Woocommerce产品字段的默认值设置为“所有产品”

Php 将Woocommerce产品字段的默认值设置为“所有产品”,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我使用为我的产品创建了一个自定义字段,但我需要为此字段设置一个默认值。 我已经创造了数百个产品,我需要有这个领域的更新,以及在这些。然后我使用这个值来订购产品 以下是全部代码: // Display Fields add_action('woocommerce_product_options_general_product_data', 'woocommerce_product_custom_fields'); // Save Fields add_action('woo

我使用为我的产品创建了一个自定义字段,但我需要为此字段设置一个默认值。 我已经创造了数百个产品,我需要有这个领域的更新,以及在这些。然后我使用这个值来订购产品

以下是全部代码:

// Display Fields
    add_action('woocommerce_product_options_general_product_data', 'woocommerce_product_custom_fields');
    // Save Fields
    add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');
    function woocommerce_product_custom_fields()
    {
        global $woocommerce, $post;
        echo '<div class="product_custom_field">';
        // Custom Product Text Field
        woocommerce_wp_text_input(
            array(
                'id' => 'priority',
                'placeholder' => 'Priority of the product - values a>b',
                'label' => __('Priority of the product', 'woocommerce'),
                'desc_tip' => 'true',
                //'default' => '0',
            )
        );
        echo '</div>';
    }

    function woocommerce_product_custom_fields_save($post_id)
    {
        // Custom Product Text Field
        $woocommerce_custom_product_text_field = $_POST['priority'];
        if (!empty($woocommerce_custom_product_text_field))
            update_post_meta($post_id, 'priority', esc_attr($woocommerce_custom_product_text_field));
    }

    function cw_add_postmeta_ordering_args( $args_sort_cw ) {
      $cw_orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) :
            apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
      switch( $cw_orderby_value ) {
           case 'priority':
                $args_sort_cw['orderby'] = 'meta_value';
                $args_sort_cw['order'] = 'asc';
                $args_sort_cw['meta_key'] = 'priority';
                break;
      }
      return $args_sort_cw;
    }
    add_filter( 'woocommerce_get_catalog_ordering_args', 'cw_add_postmeta_ordering_args' );
    function cw_add_new_postmeta_orderby( $sortby ) {
       $sortby['priority'] = __( 'Recommended', 'woocommerce' );
       return $sortby;
    }
    add_filter( 'woocommerce_default_catalog_orderby_options', 'cw_add_new_postmeta_orderby' );
    add_filter( 'woocommerce_catalog_orderby', 'cw_add_new_postmeta_orderby' );
//显示字段
添加操作(“woocommerce\u product\u options\u general\u product\u data”、“woocommerce\u product\u custom\u fields”);
//保存字段
添加操作('woocommerce\u process\u product\u meta'、'woocommerce\u product\u custom\u fields\u save');
功能商业\产品\自定义\字段()
{
全球$woocmerce,$post;
回声';
//自定义产品文本字段
woocommerce_wp_text_输入(
排列(
“id”=>“优先级”,
'占位符'=>'产品优先级-值a>b',
“标签”=>“‘产品优先级’、‘商业’”,
'desc_tip'=>'true',
//“默认值”=>“0”,
)
);
回声';
}
功能商业\产品\自定义\字段\保存($post\u id)
{
//自定义产品文本字段
$woocommerce\u custom\u product\u text\u field=$\u POST['priority'];
如果(!空($WOOMerce\u custom\u product\u text\u field))
更新发布元数据($post\u id,'priority',esc\u attr($woocommerce\u custom\u product\u text\u field));
}
函数cw\u添加\u后验\u排序\u参数($args\u排序\u cw){
$cw\U orderby\U value=isset($\U GET['orderby'])?wc\U clean($\U GET['orderby']):
应用过滤器('woocommerce\u default\u catalog\u orderby',获取选项('woocommerce\u default\u catalog\u orderby');
开关($cw\U orderby\U值){
案件“优先权”:
$args_sort_cw['orderby']='meta_value';
$args_sort_cw['order']='asc';
$args_sort_cw['meta_key']='priority';
打破
}
返回$args\u sort\u cw;
}
添加过滤器('woocommerce'u get'u catalog'u ordering'u args'、'cw'u add'u postmeta'u ordering'u args');
功能cw\U添加\U新\U邮递员\U订购人($sortby){
$sortby['priority']=_uu('Recommended','woocommerce');
返回$sortby;
}
添加过滤器(“woocommerce\u默认\u目录\u订购者\u选项”,“cw\u添加\u新的\u邮递员\u订购者”);
添加过滤器(“woocommerce\u catalog\u orderby”、“cw\u add\u new\u Posteta\u orderby”);
我找不到有效的解决方案,所以我恳请你给我一个建议。我所期望的是,每个现有产品都将设置此值,并且在创建新产品时,将显示默认值。然后,应该根据该值对其进行排序。谢谢你的帮助

根据第一个答案进行编辑:
数据库中的数据不会更新。在前端,我只能看到我手动更改的产品,而不能看到使用此功能添加了0的产品。当我尝试将更改后的值更改回0时,它不会更新。实际上,我只需要一个函数来刷新所有产品,以便将值存储到数据库中。

我要做的是在
woocommerce\u wp\u text\u input
参数中使用
value
参数。然后,您可以将当前值或默认值传递给它(如果还不存在)

还通过
woocommerce\u admin\u process\u product\u object添加了新的保存例程

// Display Fields
add_action('woocommerce_product_options_general_product_data', 'so_63588126_product_custom_fields');
// Save Fields
add_action('woocommerce_admin_process_product_object', 'so_63588126_product_custom_fields_save');


function so_63588126_product_custom_fields()
{
    global $product_object;

    $value = $product_object->get_meta( 'weight', true );

    if ( ! $value ) {
        $value = 0;
    }

    echo '<div class="product_custom_field">';
    // Custom Product Text Field
    woocommerce_wp_text_input(
        array(
            'id' => 'weight',
            'placeholder' => 'Weight of the product - values a>b',
            'label' => __('Weight of the product', 'your-textdomain'),
            'desc_tip' => 'true',
            'value' => $value 
        )
    );
    echo '</div>';
}

function so_63588126_product_custom_fields_save( $product )
{
    // Custom Product Text Field
    $woocommerce_custom_product_text_field = $_POST['weight'];
    if ( ! empty( $_POST['weight'] ) ) {
        $product->update_meta_data( 'weight', sanitize_text_field( wp_unslash( $_POST['weight'] ) ) );
    } else {
        $product->update_meta_data( 'weight', 0 );
    }

}
//显示字段
添加操作(“商业、产品、选项、常规、产品、数据”、“so、63588126、产品、自定义、字段”);
//保存字段
添加操作(“商业、管理、流程、产品、对象”、“so、产品、自定义、字段、保存”);
函数so_63588126_产品_自定义_字段()
{
全局$product\u对象;
$value=$product\u object->get\u meta('weight',true);
如果(!$value){
$value=0;
}
回声';
//自定义产品文本字段
woocommerce_wp_text_输入(
排列(
'id'=>'weight',
'占位符'=>'产品重量-值a>b',
“标签”=>“‘产品重量’、‘您的文本域’”,
'desc_tip'=>'true',
“值”=>$value
)
);
回声';
}
函数so_63588126_产品_自定义_字段_保存($product)
{
//自定义产品文本字段
$woocommerce\u custom\u product\u text\u field=$\u POST['weight'];
如果(!空($_POST['weight'])){
$product->update_meta_数据('weight',sanitize_text_字段(wp_unslash($_POST['weight'])));
}否则{
$product->更新元数据('weight',0);
}
}
附加说明:

我使用了
$product\u object->update\u meta\u data()
,因为WooCommerce(从3.0开始)更喜欢在对象上使用CRUD(创建、读取、更新、删除)方法
update\u post\u meta()
仍然有效,但如果/当Woo决定为产品和产品meta使用自定义表时,CRUD将成为未来的证明

了解有关CRUD的更多信息:

关于文本域。。。这是自定义代码,因此为了正确翻译,您需要使用自己独特的文本域,而不是“woocommerce”

阅读有关文本域的更多信息:


最后,
sanitize\u text\u field()
intval()
对于数字来说更好。。。通过在
woocommerce\u wp\u text\u input()
args中将
type
参数设置为
'number'
,将输入设置为数字输入类型。

我要做的是使用
woocommerce\u wp\u text\u input
参数中的
值。然后,您可以将当前值或默认值传递给它(如果还不存在)

还通过
woocommerce\u admin\u process\u product\u object添加了新的保存例程

// Display Fields
add_action('woocommerce_product_options_general_product_data', 'so_63588126_product_custom_fields');
// Save Fields
add_action('woocommerce_admin_process_product_object', 'so_63588126_product_custom_fields_save');


function so_63588126_product_custom_fields()
{
    global $product_object;

    $value = $product_object->get_meta( 'weight', true );

    if ( ! $value ) {
        $value = 0;
    }

    echo '<div class="product_custom_field">';
    // Custom Product Text Field
    woocommerce_wp_text_input(
        array(
            'id' => 'weight',
            'placeholder' => 'Weight of the product - values a>b',
            'label' => __('Weight of the product', 'your-textdomain'),
            'desc_tip' => 'true',
            'value' => $value 
        )
    );
    echo '</div>';
}

function so_63588126_product_custom_fields_save( $product )
{
    // Custom Product Text Field
    $woocommerce_custom_product_text_field = $_POST['weight'];
    if ( ! empty( $_POST['weight'] ) ) {
        $product->update_meta_data( 'weight', sanitize_text_field( wp_unslash( $_POST['weight'] ) ) );
    } else {
        $product->update_meta_data( 'weight', 0 );
    }

}
//显示字段
添加操作(“商业、产品、选项、常规、产品、数据”、“so、63588126、产品、自定义、字段”);
//保存字段
添加行动('wo