رفتن به مطلب
Siaavash

مشکل در متاباکس

پست های پیشنهاد شده

با استفاده از این آموزش یک متاباکس ساختم:

add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
    add_meta_box( 'my-meta-box-id', 'My First Meta Box', 'cd_meta_box_cb', 'post', 'normal', 'high' );
}


function cd_meta_box_cb()
{
    // $post is already set, and contains an object: the WordPress post
    global $post;
    $values = get_post_custom( $post->ID );
    $text = isset( $values['my_meta_box_text'] ) ? $values['my_meta_box_text'] : '';
    $selected = isset( $values['my_meta_box_select'] ) ? esc_attr( $values['my_meta_box_select'] ) : '';
    $check = isset( $values['my_meta_box_check'] ) ? esc_attr( $values['my_meta_box_check'] ) : '';
     
    // We'll use this nonce field later on when saving.
    wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
    ?>
    <p>
        <label for="my_meta_box_text">Text Label</label>
        <input type="text" name="my_meta_box_text" id="my_meta_box_text" value="<?php echo $text; ?>" />
    </p>
     
    <?php    
}


add_action( 'save_post', 'cd_meta_box_save' );
function cd_meta_box_save( $post_id )
{
    // Bail if we're doing an auto save
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
     
    // if our nonce isn't there, or we can't verify it, bail
    if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
     
    // if our current user can't edit this post, bail
    if( !current_user_can( 'edit_post' ) ) return;
     
    // now we can actually save the data
    $allowed = array( 
        'a' => array( // on allow a tags
            'href' => array() // and those anchors can only have href attribute
        )
    );
     
    // Make sure your data is set before trying to save it
    if( isset( $_POST['my_meta_box_text'] ) )
        update_post_meta( $post_id, 'my_meta_box_text', wp_kses( $_POST['my_meta_box_text'], $allowed ) );
         
}

 

به جز یک مورد همه موارد درسته!

اون یک مورد هم اینه که در صفحه ارسال/ویرایش مطلب بعد از اینکه باکس مربوطه رو پر می کنم و دکمه به روز رسانی رو می زنم، صفحه که دوباره لود می شه، داخل باکس متنی که نوشتم رو نمایش نمی ده! و کلمه "Array" نمایش داده شده!

مشکل از کجاست؟

به اشتراک گذاری این ارسال


لینک به ارسال

به جای کد بالا از این کد استفاده کنید.

<?php
function specials_posts(){
    add_meta_box('add_meta_title','آگهی ویژه','add_specials_posts','post','normal','high');
}
add_action('add_meta_boxes','specials_posts');

function add_specials_posts(){
    global $post;
?>
    <div class="">
        <?php global $post; ?>
        <table>
            <tr>
                <td>متن :</td>
                <td><input type="text" name="text" value="<?php echo	get_post_meta($post->ID,'_text',true); ?>" /></td>        
            </tr>
        </table>
    </div>
<?php
}
function save_post_information(){
    global $post;
    if(isset($_POST['text'])){
        update_post_meta($post->ID,'_text',$_POST['text']);        
    }          
}
add_action('save_post','save_post_information');     
?>

 

به اشتراک گذاری این ارسال


لینک به ارسال
در 14 دقیقه قبل، Mirrajabi گفته است :

به جای کد بالا از این کد استفاده کنید.


<?php
function specials_posts(){
    add_meta_box('add_meta_title','آگهی ویژه','add_specials_posts','post','normal','high');
}
add_action('add_meta_boxes','specials_posts');

function add_specials_posts(){
    global $post;
?>
    <div class="">
        <?php global $post; ?>
        <table>
            <tr>
                <td>متن :</td>
                <td><input type="text" name="text" value="<?php echo	get_post_meta($post->ID,'_text',true); ?>" /></td>        
            </tr>
        </table>
    </div>
<?php
}
function save_post_information(){
    global $post;
    if(isset($_POST['text'])){
        update_post_meta($post->ID,'_text',$_POST['text']);        
    }          
}
add_action('save_post','save_post_information');     
?>

 

ممنون.

فقط می شه توضیح بدید مشکل کد قبلی چی بود؟

و اینکه اگر مقدوره یک توضیح کوتاه در مورد این کدها بدید.

 

یک دراپ باکس و یک چک باکس هم دارم!

اونا رو چی کار کنم؟

ویرایش شده توسط Siaavash

به اشتراک گذاری این ارسال


لینک به ارسال
function specials_posts(){
    add_meta_box('add_meta_title','آگهی ویژه','add_specials_posts','post','normal','high');
}
add_action('add_meta_boxes','specials_posts');

function add_specials_posts(){
    global $post;
?>
    <div class="">
        <?php global $post; ?>
        <table>
            <tr>
                    <td> آگهی ویژه :</td>
                    <td><input type="checkbox" name="show_special" <?php if( get_post_meta($post->ID,'_show_special',true)) echo 'checked'; ?> value="1" /></td>
            </tr>

            <tr>
                <td>متن :</td>
                <td><input type="text" name="text" value="<?php echo get_post_meta($post->ID,'_text',true); ?>" /></td>        
            </tr>
            <tr>
                <td><label>لیبل : </label></td>
                <td>
              
               
                                <?php $up_date=get_post_meta($post->ID, '_update_postt', true); ?>
                                <select name="update_postt" id="update_postt" style="height:35px;width: 215px;">
                                  <option value="green" <?php if($up_date == 'green'){ echo 'selected';} ?>>سبز</option>
                                  <option value="blue" <?php if($up_date == 'blue'){ echo 'selected';} ?>>آبی</option>
                                  <option value="orange" <?php if($up_date == 'orange'){ echo 'selected';} ?>>نارنجی</option>
                                  <option value="yellow" <?php if($up_date == 'yellow'){ echo 'selected';} ?>>زرد</option>
                                  <option value="red" <?php if($up_date == 'red'){ echo 'selected';} ?>>قرمز</option>
                                  <option value="gray" <?php if($up_date == 'gray'){ echo 'selected';} ?>>خاکستری</option>
                                </select>
                    </td>
             </tr>
        </table>
    </div>
<?php
}
function save_video_information(){
    global $post;
    if(isset($_POST['text'])){
        update_post_meta($post->ID,'_text',$_POST['text']);        
    }
    if(isset($_POST['update_postt'])){
        update_post_meta($post->ID,'_update_postt',$_POST['update_postt']);
    }   
         update_post_meta($post->ID,'_show_special',$_POST['show_special']);          
}
add_action('save_post','save_video_information');     

به جای کد قبلی از این کد استفاده کنید. هم دراپ باکس و هم چک باکس اضافه شده .

مشکل از $post->id بود.

به اشتراک گذاری این ارسال


لینک به ارسال
در ۱ ساعت قبل، Mirrajabi گفته است :

function specials_posts(){
    add_meta_box('add_meta_title','آگهی ویژه','add_specials_posts','post','normal','high');
}
add_action('add_meta_boxes','specials_posts');

function add_specials_posts(){
    global $post;
?>
    <div class="">
        <?php global $post; ?>
        <table>
            <tr>
                    <td> آگهی ویژه :</td>
                    <td><input type="checkbox" name="show_special" <?php if( get_post_meta($post->ID,'_show_special',true)) echo 'checked'; ?> value="1" /></td>
            </tr>

            <tr>
                <td>متن :</td>
                <td><input type="text" name="text" value="<?php echo get_post_meta($post->ID,'_text',true); ?>" /></td>        
            </tr>
            <tr>
                <td><label>لیبل : </label></td>
                <td>
              
               
                                <?php $up_date=get_post_meta($post->ID, '_update_postt', true); ?>
                                <select name="update_postt" id="update_postt" style="height:35px;width: 215px;">
                                  <option value="green" <?php if($up_date == 'green'){ echo 'selected';} ?>>سبز</option>
                                  <option value="blue" <?php if($up_date == 'blue'){ echo 'selected';} ?>>آبی</option>
                                  <option value="orange" <?php if($up_date == 'orange'){ echo 'selected';} ?>>نارنجی</option>
                                  <option value="yellow" <?php if($up_date == 'yellow'){ echo 'selected';} ?>>زرد</option>
                                  <option value="red" <?php if($up_date == 'red'){ echo 'selected';} ?>>قرمز</option>
                                  <option value="gray" <?php if($up_date == 'gray'){ echo 'selected';} ?>>خاکستری</option>
                                </select>
                    </td>
             </tr>
        </table>
    </div>
<?php
}
function save_video_information(){
    global $post;
    if(isset($_POST['text'])){
        update_post_meta($post->ID,'_text',$_POST['text']);        
    }
    if(isset($_POST['update_postt'])){
        update_post_meta($post->ID,'_update_postt',$_POST['update_postt']);
    }   
         update_post_meta($post->ID,'_show_special',$_POST['show_special']);          
}
add_action('save_post','save_video_information');     

به جای کد قبلی از این کد استفاده کنید. هم دراپ باکس و هم چک باکس اضافه شده .

مشکل از $post->id بود.

الآن اگه چک باکس رو اول تیک بزنم و به روز رسانی کنم بعد بخوام تیک رو حذف کنم، نمی شه!

اون قسمت چک باکس شرطش کامل و درسته؟

به اشتراک گذاری این ارسال


لینک به ارسال

الآن اگه چک باکس رو اول تیک بزنم و به روز رسانی کنم بعد بخوام تیک رو حذف کنم، نمی شه!

من همین الان یک تیک زدم بروز رسانی کردم بعد تیک برداشتم دوباره بروزرسانی کردم تیک برداشته شد. مشکلی نبود.

اون طرف هم برای نمایش :

	       <?php
                global $post;
                if (get_post_meta($post->ID,'_show_special',true) == '1') {
                	echo 'نمایش پست';
                }	?>

 

ویرایش شده توسط Mirrajabi

به اشتراک گذاری این ارسال


لینک به ارسال
در 27 دقیقه قبل، Mirrajabi گفته است :

الآن اگه چک باکس رو اول تیک بزنم و به روز رسانی کنم بعد بخوام تیک رو حذف کنم، نمی شه!

من همین الان یک تیک زدم بروز رسانی کردم بعد تیک برداشتم دوباره بروزرسانی کردم تیک برداشته شد. مشکلی نبود.

اون طرف هم برای نمایش :


	       <?php
                global $post;
                if (get_post_meta($post->ID,'_show_special',true) == '1') {
                	echo 'نمایش پست';
                }	?>

 

این کدیه که من قرار دادم:

<td><input type="checkbox" name="show_special" <?php if( get_post_meta($post->ID,'_show_special',true)) echo 'checked'; ?> value="هشدار" /></td>

این کد وقتی برقرار باشه کد زیر رو برقرار می کنه درسته؟

echo 'checked'

در صورت عدم برقراری شرط چی؟!

به اشتراک گذاری این ارسال


لینک به ارسال
در 7 دقیقه قبل، Siaavash گفته است :

این کدیه که من قرار دادم:


<td><input type="checkbox" name="show_special" <?php if( get_post_meta($post->ID,'_show_special',true)) echo 'checked'; ?> value="هشدار" /></td>

این کد وقتی برقرار باشه کد زیر رو برقرار می کنه درسته؟


echo 'checked'

در صورت عدم برقراری شرط چی؟!

checked چون خودم تو کدهام نیاز داشتم  چون می خواستم جی کوئری استفاده کنم شما هم اگه نیاز دارید می تونید یک else اضافه کنید .

مثال:

                 <?php if( get_post_meta($post->ID,'_show_special',true)) {echo 'checked'; } else { echo 'notchecked';}?> value="هشدار" />

شما دقیقا می خواید چیکار کنید ؟

ببینید الان اگه تیک بزنید  مقدار get_post_meta($post->ID,'_show_special',true) ,هشدار  در دیتابیس ذخیره می کنه  ولی اگر تیک بردارید مقدار null ذخیره میشه .

به اشتراک گذاری این ارسال


لینک به ارسال
در 26 دقیقه قبل، Mirrajabi گفته است :

checked چون خودم تو کدهام نیاز داشتم  چون می خواستم جی کوئری استفاده کنم شما هم اگه نیاز دارید می تونید یک else اضافه کنید .

مثال:


                 <?php if( get_post_meta($post->ID,'_show_special',true)) {echo 'checked'; } else { echo 'notchecked';}?> value="هشدار" />

شما دقیقا می خواید چیکار کنید ؟

ببینید الان اگه تیک بزنید  مقدار get_post_meta($post->ID,'_show_special',true) ,هشدار  در دیتابیس ذخیره می کنه  ولی اگر تیک بردارید مقدار null ذخیره میشه .

می خوام اگر این باکس تیک خورد، یه متن (هشدار) داخل پست نمایش داده بشه و اگر تیک نخورد نمایش داده نشه اون عنوان.

اما با این کد هم همچنان تیک از بین نمی ره!

به اشتراک گذاری این ارسال


لینک به ارسال

پس همون کد قبلی باید بزارید. 

<?php
                global $post;
                if (get_post_meta($post->ID,'_show_special',true) == '1') {
                	echo 'نمایش پست';
                }	?>

ولی الان مهم تر از این باید برید تو دیتابیس این پست ببینید بعد ببینید  این چک باکس اصلا ذخیره میشه یا نه،  چون کد تست کردم برای من درست بود، باید ببینیم مشکل از کجاست.

به اشتراک گذاری این ارسال


لینک به ارسال
در 17 ساعت قبل، Mirrajabi گفته است :

پس همون کد قبلی باید بزارید. 


<?php
                global $post;
                if (get_post_meta($post->ID,'_show_special',true) == '1') {
                	echo 'نمایش پست';
                }	?>

ولی الان مهم تر از این باید برید تو دیتابیس این پست ببینید بعد ببینید  این چک باکس اصلا ذخیره میشه یا نه،  چون کد تست کردم برای من درست بود، باید ببینیم مشکل از کجاست.

در حال حاضر اگر تیک نخوره نمایش نمی ده عنوان مورد نظر رو، بعد از اینکه تیک خورد نمایش می ده اما دیگه نمی شه تیک رو ورداشت!

تو دیتابیس تو کدوم جدول رو باید چک کنم؟ تو جدول هایی که فکر می کردم باشه ندیدم همچین موردی رو!

 

ویرایش شده توسط Siaavash

به اشتراک گذاری این ارسال


لینک به ارسال

  توtable postmeta

 metakey='

_show_special

'

سرچ کنید.

به اشتراک گذاری این ارسال


لینک به ارسال
در 2 ساعت قبل، Mirrajabi گفته است :

  توtable postmeta

 metakey='


_show_special

'

سرچ کنید.

ذخیره شده و "هشدار" رو به عنوان value ذخیره کرده!

ویرایش شده توسط Siaavash

به اشتراک گذاری این ارسال


لینک به ارسال

خب خوبه،  حالا تیک بردارید بروز رسانی کنید  ببینید چی ذخیره میکنه؟ 

به اشتراک گذاری این ارسال


لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • مطالب مشابه

    • توسط Behzadea12
      سلام 
      چجوری میتونم پیوند یکتا مطالبم رو بر اساس یک متاباکس تنظیم کنم؟
    • توسط maraljoon
      سلام. وقت همگی بخیر
      آیا میشه متاباکسی ساخت که بصورت یک جدول باشه.که سطر و ستونش رو بشه هر زمانی ویرایش کرد و در فرانت اند نمایش داده بشه؟؟
      تونستم متاباکس بصورت یک فیلد تکست معمولی بسازم ولی ساخت جدول قابل ویرایش با محاسباتم جور در نمیاد.
      کدهایی که استفاده میکم:
      <?php add_action("add_meta_boxes", "add_custom_meta_box"); function add_custom_meta_box() { add_meta_box("custom-meta-box", "Custom Meta Box", "custom_meta_box_callback", "product", "advanced", "high", null); } function custom_meta_box_callback($object) { ?> <div> <label for="my_meta_box_text">Text Label</label> <input type="text" name="extra-info" rows="4" style="width:100%;" valeu="<?php echo get_post_meta($object->ID, "extra-info", true); ?>"/> </div> <?php } add_action( "save_post", "save_custom_meta_box" ); function save_custom_meta_box($post_id) { $meta_box_extra_info = ""; if (isset($_POST["extra-info"])) { $meta_box_extra_info = $_POST["extra-info"]; } update_post_meta($post_id, "extra-info", $meta_box_extra_info); } ?>  
    • توسط بویکا
      سلام خسته نباشید من یک متاباکس دارم با عنوان برند چطور می تونم ، کاری کنم که وقتی روی برند محصول کلیک کرد تمامی نوشته های که برند محصول یکی است برای من آرشیو کنه ؟
    • توسط milad021
      5
    • توسط jakob
      با عرض سلام
      دوستان من یه پست تایپ درست کردم واسه تیم ما
      بعد میخام متا باکس براش ایجاد کنم  که مثلا سمت شغلی رو بزنم و اینا
      چجوری باید ایجاد کنم ؟
×
×
  • اضافه کردن...