web-dev-qa-db-ja.com

メタボタルプラグインを使ったウコマース

私は私のeコマースソリューションとしてメタコマースとメタボックスプラグイン( http://www.deluxeblogtips.com/meta-box/ )を使ってメタボックスを実装するときの生活をもっと楽にしています。私はそれについて何の問題も抱えたことはありませんが、今私はwoocommerce製品投稿タイプに私自身のカスタムメタボックスを追加する必要があります....しかし、それは決して追加されません?私が昔ながらのadd_meta_boxの方法でメタボックスを追加し、メタボックスが正しく追加された場合....私はあなたがプラグインを使用することで問題が発生する理由があるかどうか疑問に思いましたか?これが私が使っているメタボックスをグローバルなmeta_boxes配列に追加するためのコードです。

global $meta_boxes;

$prefix = "esfproduct_";

// Aggregator metaboxes

$meta_boxes[] = array(
'id'    => 'additionalproductdetails',
'title' => 'Additional Details',
'pages' => array( 'product' ),
'context' => 'normal',
'priority' => 'side',
'fields' => array(
    array(
        'name' => 'Product Features',
        'id'   => "{$prefix}productfeatures",
        'type' => 'text'
    ),
)
);

あなたが提供できるあらゆる助けをありがとう!

1
FlimFlam

これが私が使っているメタボックスコードです。

// Add meta boxes with TinyMCE via wp_editor() function

// Define the custom box
add_action( 'add_meta_boxes', 'product_details_add' );                                                      
// Do something with the data entered
add_action( 'save_post', 'product_details_save' );
// Adds a box to the main column on the Product post_type edit screens
function product_details_add() {
    add_meta_box( 'product_details', 'Product Details', 'product_details_call', 'product', 'normal', 'high' );
}
// Prints the box content
function product_details_call( $post ) {
    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'product_details_noncename' ); 
    $field_value = get_post_meta( $post->ID, 'product_details_meta', false );
    wp_editor( $field_value[0], 'product_details_meta' );
}
// When the post is saved, saves our custom data
function product_details_save( $post_id ) {  
    // verify if this is an auto save routine. 
    // If it is our form has not been submitted, so we dont want to do anything
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
            return;
    // verify this came from the our screen and with proper authorization,
    // because save_post can be triggered at other times
    if ( ( isset ( $_POST['product_details_noncename'] ) ) && ( ! wp_verify_nonce( $_POST['product_details_noncename'], plugin_basename( __FILE__ ) ) ) )
            return;
    // Check permissions
    if ( ( isset ( $_POST['post_type'] ) ) && ( 'page' == $_POST['post_type'] )  ) {
        if ( ! current_user_can( 'edit_page', $post_id ) ) {
            return;
        }       
    }
    else {
        if ( ! current_user_can( 'edit_post', $post_id ) ) {
            return;
        }
    }
    // OK, we're authenticated: we need to find and save the data
    if ( isset ( $_POST['product_details_meta'] ) ) {
        update_post_meta( $post_id, 'product_details_meta', $_POST['product_details_meta'] );
    }   
}

////////////

ただし、get_post_meta()は私のテンプレートページのデータを返さないので、メタコンテンツを表示するためにもっと「直接」の方法を使用します。

<?php echo $product->product_custom_fields['product_details_meta'][0];?>

もちろん、これはあなたがテンプレートファイルのこのコードの上のどこかにglobal $product;も宣言していると仮定しています。

4
mroncetwice

私はあなたが使うコードは時代遅れだと思います。これは、 Meta Box の最新バージョンで動作するWooCommerce製品にメタボックスとカスタムフィールドを追加するコードです。

add_filter( 'rwmb_meta_boxes', 'your_prefix_meta_boxes' );
function your_prefix_meta_boxes( $meta_boxes ) {
    $prefix = 'esfproduct_';
    $meta_boxes[] = array(
        id' => 'additionalproductdetails',
        'title' => 'Additional Details',
        'context' => 'normal',
        'priority' => 'side',
        'fields'     => array(
            array(
                'name' => 'Product Features',
                'id'   => "{$prefix}productfeatures",
                'type' => 'text'
            ),
        ),
    );
    return $meta_boxes;
}
0
Anh Tran