wordpress为每个自定义类型添加字段


wordpress add field for every custom type

我想在WooCommerce Products中为每个Store自定义帖子类型创建一个库存级别字段。我已经创建了商店自定义帖子类型,并向其中添加了3个商店。我想在每次有人添加商店时自动添加一个"商店库存级别"字段,以便我可以检查商店级别的库存。

我正试图将自定义字段放在"产品"->"库存"->"存货数量"下。

我试过这个:

        $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

我得到了这个:

致命错误:调用中未定义的函数get_userdata()…/wp包含/query.php,第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();

}