Wordpress - Woocommerce插件开发

时间:2017-06-29 20:27:42

标签: php wordpress

我实际上正在为客户开发ERP,而且我对wordpress的开发非常新手。我将所有不同的类分开,添加新的选项卡和面板以选择产品类型,现在我尝试使用元数据将这些信息添加到数据库中,我想序列化我要添加的产品的信息然后序列化产品的信息和我创建的选项卡的信息。

这是我的代码:

<?php

/**
 * Created by PhpStorm.
 * User: Rockerz
 * Date: 15/06/17
 * Time: 21:18
 */
class WC_Product_Rental_Schedule_Tab_view {

public static function Inithook_schedule(){
    add_action( 'woocommerce_product_data_panels', 
['WC_Product_Rental_Schedule_Tab_view','Render_Schedule'] );
}

/**
 * XXX Rename it Render_Product_Tab_Form
 * Custom Tab Panels informations
 */
public static function Render_Schedule(){

        global $post;
        ?><div id='product_dyu' class='panel woocommerce_options_panel'>
        <div class='options_group'>
            <?php
            woocommerce_wp_text_input(
                array(
                    'id'            => 'date_in',
                    'label'         => __( 'Date in', 'woocommerce' ),
                    'desc_tip'      => 'true',
                    'description'   => __( 'Date in', 'woocommerce' ),
                    'type'          => 'date',
                )
            );
            woocommerce_wp_text_input(
                array(
                    'id'            => 'date_out',
                    'label'         => __( 'Date out', 'woocommerce' ),
                    'desc_tip'      => 'true',
                    'description'   => __( 'Date out', 'woocommerce' ),
                    'type'          => 'date',
                )
            );
            woocommerce_wp_select( array(
                    'id' => 'status',
                    'name' => 'status[]',
                    'class' => 'status',
                    'label' => __('Status', 'woocommerce'),
                    'options' => array(
                        '1' => 'Pending',
                        '2' => 'In-Stock',
                        '3' => 'Rent',
                        '4' => 'deprecated',
                        '5' => 'Sold',
                    ))
            );
            $users = get_users(array('fields'=>array('ID', 'user_nicename')));
            $selectUser = array(
                'id' => 'users',
                'name' => 'users[]',
                'class' => 'users',
                'label' => __('Users', 'woocommerce'),
            );

            foreach($users as $user){
                $selectUser['options'][$user->ID] = $user->user_nicename;
            }
            woocommerce_wp_select($selectUser);


            ?>
        </div>
        </div>
        <?php
    }
}

这是我想要添加到数据库的面板的信息。 我不知道如何使用meta将这些信息添加到数据库中,我所知道的是,在将其添加到数据库之前,我必须将所有这些信息序列化。

1 个答案:

答案 0 :(得分:0)

您可能不需要自己序列化任何内容。 WordPress用它的API抽象出来。看看update_post_meta()。用于将元数据添加到帖子(woocommerce产品是自定义帖子类型。)

所以你什么时候使用它?

您可以将其挂钩到保存产品时触发的woocommerce_process_product_meta挂钩。我不确定你为什么要为你的init使用静态函数,但我会假设你知道。那说加钩。

然后,您可以使用要挂钩的功能检查$_POST变量以查看输入的ID。这看起来像这样:

//This goes in you init or constructor
add_action( 'woocommerce_process_product_meta', array( __CLASS__, 'save_fields' ), 1, 2 );

//This processes and saves data in post_meta
function save_fields( $post_id, $product ) {
        $status = $_POST['status'];
    if ( ! empty( $status ) ) {
        update_post_meta( $post_id, '{META_KEY_NAME}', esc_attr( $status ) );
    }

}

额外提示:

除了我的回答,我看到你正在使用PhpStorm。我在学习Woocommerce时使用的最有价值的工具之一是PhpStorm的“去定义”功能。官方文档只是从DocBlocks自动生成,并留下了很多不足之处。我发现阅读和跳转代码非常宝贵。