Мое собственное отображение метабокса для всех типов сообщений или страниц

wordpress

215 просмотра

3 ответа

Я создал пользовательский тип записи «продукт», а также добавил несколько мета-блоков. Когда я добавляю страницу, пост, меню и любой тип поста, мои мета-поля показываются в верхней части страницы. Я хочу показать только тип поста продукта.

Код здесь.

тип сообщения является продуктом

function marbel_product_meta_fields() 
{
    add_meta_box( 'product_meta_box',
    'product Details',
    'display_product_meta_box',
    'product', 'normal', 'high'
    );
}
add_action( 'admin_init', 'marbel_product_meta_fields' );

function display_product_meta_box( $product) 
    {
        $price = get_post_meta( $product->ID, 'product_price', true ); 
        $proVari = get_post_meta( $product->ID, 'product_variant', true );  
        echo '<p class="product-price"> Product Price </p>'; 
        echo '<input type="text" name="product_price" placeholder="product price" value="'.$price.'" />';
        echo '<p class="product-price"><b> Product Variant </b></p>';  

               $varipro = explode('*',$proVari);
                    foreach( $varipro as $pv )
                    {   ?>
                        <div class="product-variant">                       
                        <input type="checkbox" name="deal_index[]" class="left-check" />
                        <input type="text" name="product_variant[]" value="<?php echo $pv; ?>" placeholder="Varient title" size="30%">
                        <input type="text" name="variant_price" placeholder="Varient price" value="" size="30%"> </div>
                    <?php  }    ?>
                    </br>
                    <input class="addmore button-primary" type="button" name="add_variant" value="Add Variant" onClick="addMoreVariant();" />
                    <input class="deleterow button-primary" type="button" name="del_variant" value="Delete" onClick="deleteRowVariant();" />
    <?php }
add_action( 'save_post', 'display_product_meta_box');

function add_product_fields( $productid, $product ) 
{
    if ( $product->post_type == 'product' ) 
    {
        if ( isset( $_POST['product_price'] ) && $_POST['product_price'] != '' ) 
        {
            update_post_meta( $productid, 'product_price', $_POST['product_price'] );  
        }

        if ( isset( $_POST['product_variant'] ) && $_POST['product_variant'] != '' ) 
        { 
            $productVariant =implode('*',$_POST['product_variant']);
            update_post_meta( $productid, 'product_variant', $productVariant); 
        }   
    }
}
add_action( 'save_post', 'add_product_fields', 10, 2 );

Пожалуйста, проверьте, где я не прав. Пожалуйста, помогите мне.

Автор: Husain Ahmed Источник Размещён: 08.11.2019 10:56

Ответы (3)


1 плюс

Решение

Уберите этот крючок. add_action( 'save_post', 'display_product_meta_box')Это точно сработает!

Автор: user6487497 Размещён: 20.08.2016 07:07

1 плюс

Попробуй это :

измените действие 'init' на 'add_meta_boxes'.

Изменить ниже:

add_action( 'admin_init', 'marbel_product_meta_fields' );

Заменить :

add_action( 'add_meta_boxes', 'marbel_product_meta_fields' );
Автор: vrajesh Размещён: 20.08.2016 06:05

1 плюс

Чтобы показать свой мета-блок всем типам постов, вы можете перебирать типы постов через структуру цикла, используя цикл foreach.

Попробуйте, как это, и это будет работать для вас.

foreach ( array( 'post', 'page', 'custom_whatever', 'whatever2' ) as $page )
    add_meta_box( 'id', 'whatever', $callback, $page, $context, $priority, $callback_args );
Автор: Naresh Kumar P Размещён: 20.08.2016 06:39
Вопросы из категории :
32x32