رفتن به مطلب

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

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

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
لینک به ارسال

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

لینک به ارسال

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

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

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

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

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

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

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

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

×
×
  • اضافه کردن...