Wordpress add_meta_box () garabeti

3 Cevap php

Aşağıdaki kod, bir kaç sayfa Bu süre için sopalarla ... yeniler sonra ancak benim sayfalardan birinde sayfa başlığı için benim değer boş geliyor tutar, neredeyse kusursuz çalışıyor, sonra boş sıfırlamak için görünür. Ben aşağıda kodu bir çatışma olması gerekir düşünüyorum, ama ben oldukça anlamaya olamaz.

Ben kullanıcı bir özel "yazı / sayfa başlığı giriş alanı) üzerinden mesajların yanı sıra sayfaları için özel bir sayfa başlığını ayarlamak için izin veriyorum. Herkes boş için sayfa başlığını sıfırlanması olabilir burada bariz bir sorun görebilir miyim?

// ===================
// = POST OPTION BOX =
// ===================

add_action('admin_menu', 'my_post_options_box');

function my_post_options_box() {
    if ( function_exists('add_meta_box') ) { 
      //add_meta_box( $id, $title, $callback, $page, $context, $priority );
        add_meta_box('post_header', 'Custom Post Header Code (optional)', 'custom_post_images', 'post', 'normal', 'low');
        add_meta_box('post_title', 'Custom Post Title', 'custom_post_title', 'post', 'normal', 'high');
        add_meta_box('post_title_page', 'Custom Post Title', 'custom_post_title', 'page', 'normal', 'high');
        add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', 'page', 'normal', 'core');
        add_meta_box('categorydiv', __('Page Options'), 'post_categories_meta_box', 'page', 'side', 'core');
    }
}

//Adds the custom images box
function custom_post_images() {
    global $post;
    ?>
    <div class="inside">
        <textarea style="height:70px; width:100%;margin-left:-5px;" name="customHeader" id="customHeader"><?php echo get_post_meta($post->ID, 'customHeader', true); ?></textarea>
        <p>Enter your custom html code here for the post page header/image area. Whatever you enter here will override the default post header or image listing <b>for this post only</b>. You can enter image references like so &lt;img src='wp-content/uploads/product1.jpg' /&gt;. To show default images, just leave this field empty</p>
    </div>
<?php
}

//Adds the custom post title box
function custom_post_title() {
    global $post;
    ?>
    <div class="inside">
        <p><input style="height:25px;width:100%;margin-left:-10px;" type="text" name="customTitle" id="customTitle" value="<?php echo get_post_meta($post->ID, 'customTitle', true); ?>"></p>
        <p>Enter your custom post/page title here and it will be used for the html &lt;title&gt; for this post page and the Google link text used for this page.</p>
    </div>
<?php
}


add_action('save_post', 'custom_add_save');

function custom_add_save($postID){
    if (!defined('DOING_AUTOSAVE') && !DOING_AUTOSAVE) {
        return $postID;
    }
    else
    {
        // called after a post or page is saved and not on autosave
        if($parent_id = wp_is_post_revision($postID))
        {
        $postID = $parent_id;
        }

        if ($_POST['customHeader']) 
        {
            update_custom_meta($postID, $_POST['customHeader'], 'customHeader');
        }
        else
        {
            update_custom_meta($postID, '', 'customHeader');
        }
        if ($_POST['customTitle']) 
        {
            update_custom_meta($postID, $_POST['customTitle'], 'customTitle');
        }
        else
        {
            update_custom_meta($postID, '', 'customTitle');
        }
    }

  }
    function update_custom_meta($postID, $newvalue, $field_name) {
    // To create new meta
    if(!get_post_meta($postID, $field_name)){
    add_post_meta($postID, $field_name, $newvalue);
    }else{
    // or to update existing meta
    update_post_meta($postID, $field_name, $newvalue);
    }
}
?>

3 Cevap

Ben özel alanlar otomatik kaydeder için birlikte geçmedi düşünmek gibi sisteme kaydetmek Wordpress otomobil de (böylece customHeader ve customTitle post değişkenleri kaydetmek bir oto sırasında boş olacaktır), bir sorun olabilir .

DOING_AUTOSAVE sabit ayarlandığında eğer tasarruf fonksiyonu kontrol edilmeli ve eğer öyleyse dönüş (bu eylemi sonrası kontrol için tercih gibi görünüyor). Böyle bir şey:

if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

Daha fazla bilgi için Bu bilet bak: http://core.trac.wordpress.org/ticket/10744

WordPress Codex büyük bir örnek ile, bir function reference for add_meta_box() var.

Ve evet, o kullanır


 if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
    return $post_id;

ve ben bunu doğru şekilde hayata düşünüyorum.

Bilginize, çözüm burada yayınlanan http://wordpress.org/support/topic/custom-post-type-information-disappearing benim için çalıştı ve ben çok daha şık olduğunu düşünüyorum.