Dimungkinkan untuk mematikan penyimpanan otomatis untuk jenis posting khusus tunggal

10

Jadi saya mengalami masalah dengan bidang khusus saya di jenis posting kustom saya. Untuk alasan apa pun, bidang menyimpan dan kemudian menghapus secara acak ... Saya yakin ini tidak acak, tetapi saya tidak yakin apa yang memicu ini terjadi. Berikut kode untuk jenis posting khusus saya:

    // 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];
}

Pembaruan: Jadi saya melakukan lebih banyak riset dan menemukan jawabannya. Simpan Otomatis (alias Revisi) - Pos metadata menghapus sendiri

Apakah mungkin untuk mematikan penyimpanan otomatis hanya untuk satu jenis posting dan tidak secara global?

Marc
sumber
2
apakah Anda mengedit kode yang Anda posting di atas? Karena Anda tidak memiliki revisionsdi dalam supportsarray, maka Autosave harus dinonaktifkan untuk jenis posting "Pemberian" Anda
onetrickpony

Jawaban:

17

Itu mudah :)

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' );
}
kovshenin
sumber
Tidak sepenuhnya bersih. Skrip itu diperlukan jika Anda ingin post.js melakukan pratinjau permalink pada baris di bawah input judul. Ini terutama terlihat pada posting baru, karena garis permalink tetap tidak terlihat tanpa penyimpanan otomatis. Solusinya adalah dengan membuat skrip yang bertopik pada objek-objek penting dan fungsi autosave.js.
dapur
4

Rupanya membatalkan pendaftaran javascript autosave pada dasarnya akan menghentikan rutin autosave berjalan. Itu tidak serta merta menonaktifkan kemampuan autosave untuk terjadi pada jenis posting itu, tetapi itu akan menghentikan skrip autosave asli berjalan.

Ini bukan solusi yang sempurna tetapi harus memiliki efek yang diinginkan.

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 );

Semoga itu bisa membantu ...

EDIT: Dengan kode di atas, ketika pada layar pembuatan posting untuk jenis itu Anda harus melihat yang berikut di sumber halaman ..

<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>

Variabelnya bukan apa yang kita cari di sini, ini skrip di bagian bawah, perhatikan src sekarang menunjuk ke mana-mana (ini awalnya menunjuk ke file autosave.js).

Apakah Anda melihat sesuatu yang mirip dengan di atas, atau apakah src masih ditulis dengan path ke file autosave.js?

EDIT2: Ini yang saya lihat dengan skrip concatenate off.

<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>

Perhatikan bahwa skrip penyimpanan otomatis masih dikecualikan .. (sejauh ini saya tidak dapat mereproduksi masalah Anda) ..

Di mana Anda menempatkan kode yang saya berikan?

t31os
sumber
Terima kasih!! Apakah mungkin untuk memasukkan beberapa jenis posting di sana? Atau apakah saya harus melakukan ini untuk setiap CPT?
Marc
Malu. Tidak berfungsi untuk satu cpt. Saya masih mendapatkan ini: cl.ly/3gTR - yang membersihkan bidang kustom.
Marc
Periksa sumber halaman dan lihat apakah file autosave.js masih ada, jika masih ada, maka filter tidak berfungsi seperti yang diharapkan (atau saya kehilangan sesuatu) .. EDIT CEPAT: Tampaknya berfungsi untuk saya baik-baik saja, apakah Anda ingat untuk mengubah teks dalam kode sampel agar sesuai dengan jenis posting Anda?
t31os
Ya saya akan coba lagi dan lihat sumbernya. Dan bagaimana jika saya ingin melakukan beberapa jenis posting?
Marc
1
Anda bilang itu bukan solusi yang sempurna, tapi itu bahkan bukan solusi yang bagus :)
kovshenin
1

Saya hanya punya masalah dengan ini pada salah satu plugin yang saya pertahankan, dan kami memutuskan untuk memeriksa apakah kami ada di halaman kami (produk wpsc dan bukan pada postingan atau halaman) dan kemudian kami hanya membatalkan registrasi script autosave ,, jadi, , out CPT adalah 'wpsc-product' dan fungsi kami (menghapus kode yang tidak terkait terlihat seperti ini:

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' );
fuxia
sumber
Tolong jangan deregister skrip inti.
kovshenin