Tek bir özel gönderi türü için otomatik kaydetme özelliği kapatılabilir


10

Bu nedenle, özel yazı türümdeki özel alanlarla ilgili bir sorun yaşıyorum. Hangi nedenle olursa olsun, alanlar rastgele gelişir ve sonra rasgele temizlenir ... Eminim rastgele değil ama bunun gerçekleşmesini tetikleyen şeyden emin değilim. İşte benim özel yazı türü için kod:

    // Custom Post Type: Strategic Giving
add_action('init', 'giving_register');

function giving_register() {

  $labels = array(
    'name' => _x('Invest Items', 'post type general name'),
    'singular_name' => _x('Item', 'post type singular name'),
    'add_new' => _x('Add New', 'giving item'),
    'add_new_item' => __('Add New Item'),
    'edit_item' => __('Edit Item'),
    'new_item' => __('New Item'),
    'view_item' => __('View Item'),
    'search_items' => __('Search Items'),
    'not_found' =>  __('Nothing found'),
    'not_found_in_trash' => __('Nothing found in Trash'),
    'parent_item_colon' => ''
    );

  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'menu_icon' => get_stylesheet_directory_uri() . '/images/cpt-giving.png',
    'rewrite' => array( 'slug' => 'giving_items' ),
    'capability_type' => 'post',
    'hierarchical' => true,
    'menu_position' => null,
    'supports' => array('title','thumbnail','editor'),
    'paged' => false,
    ); 

  register_post_type( 'givings' , $args );
}

register_post_type( 'givings' , $args );

add_action("admin_init", "giving_admin_init");

function giving_admin_init(){
  add_meta_box("giving_info-meta", "Item Options", "giving_info", "givings", "side", "high");
}

function giving_info(){
  global $post;
  $custom = get_post_custom($post->ID);
  $amount = $custom["amount"][0];
  $monthly = $custom["monthly"][0];
  $user_entered_value = $custom["user_entered_value"][0];
  $item_name = $custom["item_name"][0];
  $special = $custom["special"][0];
  ?>
  <div style="text-align: right;">
    <p>
      <label for="amount"><strong>Amount:</strong></label>  
      <input style="width: 180px" type="text" name="amount" id="amount" value="<?php echo $amount; ?>" />
      <em>Example: 30.00</em>
    </p>
    <p>
      <label for="monthly"><strong>Monthly?</strong></label>  
      <?php if ($monthly == 'on') { ?>
        <input type="checkbox" name="monthly" id="monthly" checked="checked" />
      <?php } else { ?>
        <input type="checkbox" name="monthly" id="monthly" />
      <?php } ?>      
    </p>
    <p>
      <label for="special"><strong>Special Item?</strong></label>  
      <?php if ($special == 'on') { ?>
        <input type="checkbox" name="special" id="special" checked="checked" />
      <?php } else { ?>
        <input type="checkbox" name="special" id="special" />
      <?php } ?>      
    </p>
    <p>
      <label for="user_entered_value"><strong>Allow Giver To Enter Custom Value?</strong></label>  
      <?php if ($user_entered_value == 'on') { ?>
        <input type="checkbox" name="user_entered_value" id="user_entered_value" checked="checked" />
      <?php } else { ?>
        <input type="checkbox" name="user_entered_value" id="user_entered_value" />
      <?php } ?>      
    </p>
    <p>
      <label for="item_name"><strong>Item Name:</strong></label>              
      <input style="width: 180px" type="text" name="item_name" id="item_name" value="<?php echo $item_name; ?>" /><br />
      If item is a <em>per item</em> then enter the name of the singular item. <em>Example: Chair - which will be displayed as "30.00 per Chair"</em>
    </p>
    <p style="text-align: left;">
      Strategic Giving photo must be horizontal and uploaded/set as the <strong>Featured Image</strong> (see below).
      <em>Do not add photo to content area.</em>
    </p>
  </div>
  <?php }  

add_action('save_post', 'giving_save_details_amount');
add_action('save_post', 'giving_save_details_monthly');
add_action('save_post', 'giving_save_details_user_entered_value');
add_action('save_post', 'giving_save_details_item_name');
add_action('save_post', 'giving_save_details_special');

function giving_save_details_amount(){
  global $post;
  update_post_meta($post->ID, "amount", $_POST["amount"]);
}

function giving_save_details_monthly(){
  global $post;
  update_post_meta($post->ID, "monthly", $_POST["monthly"]);
}

function giving_save_details_user_entered_value(){
  global $post;
  update_post_meta($post->ID, "user_entered_value", $_POST["user_entered_value"]);
}

function giving_save_details_item_name(){
  global $post;
  update_post_meta($post->ID, "item_name", $_POST["item_name"]);
}

function giving_save_details_special(){
  global $post;
  update_post_meta($post->ID, "special", $_POST["special"]);
}

add_action("manage_pages_custom_column",  "givings_custom_columns");
add_filter("manage_edit-givings_columns", "givings_edit_columns");

function givings_edit_columns($columns){
  $columns = array(
    "cb" => "<input type=\"checkbox\" />",
    "title" => "Strategic Giving Item",
    "amount" => "Amount",
    "monthly" => "Monthly",
    "special" => "Special Item",
    "giving_image" => "Image"
    );

  return $columns;
}

function givings_custom_columns($column){
  global $post;

  switch ($column) {
    case "amount":
    $custom = get_post_custom();
    echo $custom["amount"][0];
    break;

    case "monthly":
    $custom = get_post_custom();
    $is_monthly = $custom["monthly"][0];
    if ($is_monthly == "on") {
      echo "Yes";
    };
    break;

    case "special":
    $custom = get_post_custom();
    $is_special = $custom["special"][0];
    if ($is_special == "on") {
      echo "Yes";
    };
    break;

    case "giving_image":
      echo get_the_post_thumbnail(NULL, 'staff_admin');
    break;
  }
}

function giving_amount(){
  $custom = get_post_custom();
  return $custom["amount"][0];
}

function giving_monthly(){
  $custom = get_post_custom();
  return $custom["monthly"][0];
}

function giving_special(){
  $custom = get_post_custom();
  return $custom["special"][0];
}

function giving_user_entered_value(){
  $custom = get_post_custom();
  return $custom["user_entered_value"][0];
}

function giving_item_name(){
  $custom = get_post_custom();
  return $custom["item_name"][0];
}

Güncelleme: Bu yüzden daha fazla araştırma yaptım ve anladım. Otomatik kaydetme (diğer adıyla Revizyonlar) - Meta verileri yayınla kendini siler

Otomatik kaydetmeyi genel olarak değil, yalnızca tek bir gönderi türü için kapatmak mümkün mü?


2
yukarıda yayınladığınız kodu düzenlediniz mi? Eğer yok çünkü revisionsiçinde supportsdizide, Autosaves böylece "TÖRENLERİ" post türü için devre dışı bırakılmalıdır
onetrickpony

Yanıtlar:


17

Bu kolay bir :)

add_action( 'admin_enqueue_scripts', 'my_admin_enqueue_scripts' );
function my_admin_enqueue_scripts() {
    if ( 'your_post_type' == get_post_type() )
        wp_dequeue_script( 'autosave' );
}

Tamamen temiz değil. Post.js'nin başlık girişinin altındaki satırda kalıcı bağlantı önizlemeleri yapmasını istiyorsanız bu komut dosyasına ihtiyaç vardır. Kalıcı bağlantı hattı otomatik kaydetme olmadan görünmez kaldığından özellikle yeni yazılarda fark edilir. Geçici çözüm, autosave.js'nin temel nesnelerinde ve işlevlerinde saplanan bir komut dosyasını sıralamaktır.
kitchin

4

Görünüşe göre otomatik kaydetme javascriptinin kaydının kaldırılması otomatik kaydetme rutininin çalışmasını durduracaktır. Bu kayıt türünde otomatik kaydetme yeteneğini devre dışı bırakmayabilir, ancak yerel otomatik kaydetme komut dosyasının çalışmasını durduracaktır.

Mükemmel bir çözüm değil, ancak istenen etkiye sahip olmalıdır.

function wpse5584_kill_autosave_on_postype( $src, $handle ) {
    global $typenow;
    if( 'autosave' != $handle || $typenow != 'your-post-type-here' )
        return $src;
    return '';
}
add_filter( 'script_loader_src', 'wpse5584_kill_autosave_on_postype', 10, 2 );

Umarım yardımcı olur...

DÜZENLEME: Yukarıdaki kodla, bu tür için yazı oluşturma ekranındayken sayfanın kaynağında aşağıdakileri görmelisiniz.

<script type='text/javascript'>
/* <![CDATA[ */
var autosaveL10n = {
    autosaveInterval: "60",
    previewPageText: "Preview this Page",
    previewPostText: "Preview this Post",
    requestFile: "http://yoursite/wp-admin/admin-ajax.php",
    savingText: "Saving Draft&#8230;",
    saveAlert: "The changes you made will be lost if you navigate away from this page."
};
try{convertEntities(autosaveL10n);}catch(e){};
/* ]]> */
</script>
<script type='text/javascript' src=''></script>

Değişkenler burada baktığımız şey değil, alt kısımdaki komut dosyası, src'nin artık hiçbir yere işaret etmediğini fark edin (bu aslında autosave.js dosyasını işaret ediyordu).

Yukarıdakine benzer bir şey görüyor musunuz, yoksa src hala autosave.js dosyasının yolu ile yazılıyor mu?

EDIT2: Bu bitiştirilmiş komut dosyaları ile gördüğüm şey.

<script type='text/javascript' src='http://example/wp-admin/load-scripts.php?c=0&amp;load=hoverIntent,common,jquery-color,schedule,wp-ajax-response,suggest,wp-lists,jquery-ui-core,jquery-ui-sortable,postbox,post,word-count,thickbox,media-upload&amp;ver=e1039729e12ab87705c047de01b94e73'></script>

Otomatik kaydetme komut dosyasının hala hariç tutulduğuna dikkat edin .. (şimdiye kadar sorununuzu yeniden oluşturamıyorum) ..

Sağladığım kodu nereye yerleştiriyorsunuz?


Teşekkürler!! Buraya birden fazla yazı tipi koymak mümkün müdür? Yoksa bunu her CPT için yapmak zorunda mıyım?
Marc

Utanç. Tek bir cpt için işe yaramadı. Hala bunu alıyorum: cl.ly/3gTR - özel alanları temizliyor.
Marc

Sayfanın kaynağını kontrol edin ve autosave.js dosyasının hala orada olup olmadığını görün, hala oradaysa, filtre beklendiği gibi çalışmıyor (veya bir şey eksikim) .. HIZLI DÜZENLEME: Benim için çalışıyor gibi görünüyor gayet iyi, örnek koddaki metni yazı türünüzle eşleşecek şekilde değiştirmeyi hatırladınız mı?
t31os

Evet, tekrar deneyeceğim ve kaynağa bakacağım. Peki birden fazla gönderi türü yapmak istersem ne olur?
Marc

1
Mükemmel bir çözüm olmadığını söyledin, ama iyi bir çözüm bile değil :)
kovshenin

1

Ben sadece bu benim eklentileri birinde bir sorun vardı, ve biz sadece bizim sayfalarda (wpsc-ürün ve posta veya sayfada değil) kontrol etmeye karar verdi ve sonra sadece otomatik kaydetme betiğinin kaydını sildik, yani, , CPT 'wpsc-ürünü' ve fonksiyonumuz (ilişkisiz kodu kaldırmak şuna benzer:

function admin_include_css_and_js_refac( $pagehook ) {
    global $post_type, $current_screen;
    if($post_type == 'wpsc-product' )
    wp_deregister_script( 'autosave' );         
}
add_action( 'admin_enqueue_scripts', 'admin_include_css_and_js_refac' );

Lütfen temel komut dosyalarının kaydını silme.
kovshenin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.