wordpress为每个自定义类型添加字段
问题描述:
我想为每个商店自定义帖子类型在WooCommerce产品中创建一个存储级别字段。 我已经创建了商店自定义帖子类型并向其添加了3个商店。每次有人添加商店时,我都想自动添加“商店的库存水平”字段,以便我可以在商店级检查库存。wordpress为每个自定义类型添加字段
我试图把自定义字段放在库存数量下的Products-> Inventory->右边。
我已经试过这样:
$post_type = 'store';
$tax = 'show-topic';
$inv_arg_terms = get_terms(array('orderby' => 'id', 'order' => 'ASC'));
if ($inv_arg_terms) {
$args = array(
'post_type' => $post_type,
'post_status' => 'publish',
'posts_per_page' => - 1,
'orderby' => 'title',
'order' => 'ASC'
); // END $args
$my_query = null;
$my_query = new WP_Query($args);
if ($my_query->have_posts()) {
while ($my_query->have_posts()) : $my_query->the_post();
add_action('woocommerce_product_options_inventory_product_data', 'wc_inventory_stock_product_field');
function wc_inventory_stock_product_field() {
woocommerce_wp_text_input(array('id' => 'stock_level_' . the_title(), 'class' => 'short wc_input_stock', 'label' => __('Stock Level at ' . the_title(), 'woocommerce') . ' (' . get_woocommerce_currency_symbol() . ')'));
}
add_action('save_post', 'wc_cost_save_product');
function wc_cost_save_product($product_id) {
// stop the quick edit interferring as this will stop it saving properly, when a user uses quick edit feature
if (wp_verify_nonce($_POST['_inline_edit'], 'inlineeditnonce'))
return;
// If this is a auto save do nothing, we only save when update button is clicked
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if (isset($_POST['stock_level_' . the_title()])) {
if (is_numeric($_POST['stock_level_' . the_title()]))
update_post_meta($product_id, 'stock_level_' . the_title(), $_POST['cost_price']);
} else delete_post_meta($product_id, 'stock_level_' . the_title());
}
endwhile;
} // END if have_posts loop
wp_reset_query();
} // END if $inv_arg_terms
,我得到这个:
Fatal error: Call to undefined function get_userdata() in .../wp-includes/query.php on line 4758
是什么,我想可能吗?我该如何解决它?
谢谢,感谢我能得到的每一个帮助。
答
终于搞定了。代码如下:
add_action('woocommerce_product_options_inventory_product_data', 'wc_stock_product_field');
add_action('woocommerce_process_product_meta', 'wc_stock_save_product');
function wc_stock_product_field() {
global $woocommerce, $post;
$post_type = 'store';
$args = array(
'post_type' => $post_type,
'post_status' => 'publish',
'posts_per_page' => - 1,
'orderby' => 'id',
'order' => 'ASC',
'caller_get_posts' => 1
); // END $args
$store_query = null;
$store_query = new WP_Query($args);
if ($store_query->have_posts()) {
while ($store_query->have_posts()) : $store_query->the_post();
woocommerce_wp_text_input(
array(
'id' => get_the_id() ,
'class' => 'short wc_input_stock',
'label' => __('Stock Level @ ' . get_the_title(), 'woocommerce')));
endwhile;
} // END if have_posts loop
wp_reset_query();
}
function wc_stock_save_product($product_id) {
// stop the quick edit interferring as this will stop it saving properly, when a user uses quick edit feature
if (wp_verify_nonce($_POST['_inline_edit'], 'inlineeditnonce'))
return;
// If this is a auto save do nothing, we only save when update button is clicked
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
$post_type = 'store';
$args = array(
'post_type' => $post_type,
'post_status' => 'publish',
'posts_per_page' => - 1,
'orderby' => 'id',
'order' => 'ASC',
'caller_get_posts' => 1
); // END $args
$store_query = null;
$store_query = new WP_Query($args);
if ($store_query->have_posts()) {
while ($store_query->have_posts()) : $store_query->the_post();
if (isset($_POST[get_the_id()])) {
if (is_numeric($_POST[get_the_id()]))
update_post_meta($product_id, get_the_id(), $_POST[get_the_id()]);
} else delete_post_meta($product_id, get_the_id());
endwhile;
} // END if have_posts loop
wp_reset_query();
}