实际上,我正在为一个客户开发一个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
}
}这是我想要添加到数据库中的面板信息。我不知道如何将这些信息添加到元数据库中,我只知道在将其添加到数据库中之前,我必须序列化所有这些信息。
发布于 2017-06-30 05:46:35
您可能不需要自己序列化任何东西。WordPress通过其API对此进行了抽象。调查一下update_post_meta()。用于将元数据添加到帖子(woocommerce产品是一种自定义的帖子类型)。
那么你什么时候使用它呢?
您可以将其挂接到保存产品时触发的woocommerce_process_product_meta挂钩。我不确定您为什么要在init中使用静态函数,但我将假定您知道。也就是说,添加钩子。
然后,您可以使用所挂接的函数来检查$_POST变量,以获取输入的ids。它看起来像这样:
//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自动生成的,还有很多需要改进的地方。我发现通读和跳过代码是非常有价值的。
https://stackoverflow.com/questions/44834423
复制相似问题