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(); 


}