Có thể tắt tự động lưu cho loại bài đăng tùy chỉnh duy nhất


10

Vì vậy, tôi gặp vấn đề với các trường tùy chỉnh trong loại bài đăng tùy chỉnh của mình. Vì bất kỳ lý do gì, các trường lưu và sau đó xóa một cách ngẫu nhiên ... Tôi chắc chắn đó không phải là ngẫu nhiên nhưng tôi không chắc điều gì đã kích hoạt điều này xảy ra. Đây là mã cho loại bài đăng tùy chỉnh của tôi:

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

Cập nhật: Vì vậy, tôi đã nghiên cứu thêm và tìm ra nó. Tự động lưu (còn gọi là Sửa đổi) - Đăng siêu dữ liệu sẽ tự xóa

Có thể tắt tự động lưu chỉ cho một loại bài đăng duy nhất và không phải trên toàn cầu?


2
bạn đã chỉnh sửa mã bạn đã đăng ở trên? Vì bạn không có revisionstrong supportsmảng, nên Autosaves sẽ bị vô hiệu hóa cho loại bài đăng "Tặng" của bạn
onetrickpony

Câu trả lời:


17

Đó là một điều dễ dàng :)

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

Không hoàn toàn sạch sẽ. Kịch bản đó là cần thiết nếu bạn muốn post.js thực hiện xem trước permalink trong dòng dưới tiêu đề đầu vào. Nó đặc biệt đáng chú ý trên các bài đăng mới, vì dòng permalink vẫn ẩn mà không có tự động lưu. Một cách giải quyết khác là liệt kê một tập lệnh khai thác các đối tượng và chức năng thiết yếu của autosave.js.
kitchin

4

Rõ ràng việc hủy đăng ký javascript tự động lưu về cơ bản sẽ dừng thói quen tự động chạy. Nó sẽ không nhất thiết vô hiệu hóa khả năng tự động xảy ra trên loại bài đăng đó, nhưng nó sẽ ngăn tập lệnh tự động lưu tự nhiên chạy.

Nó không phải là một giải pháp hoàn hảo nhưng nó sẽ có hiệu quả mong muốn.

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

Mong rằng sẽ giúp ...

EDIT: Với đoạn mã trên, khi trên màn hình tạo bài đăng cho loại đó, bạn sẽ thấy phần sau trong nguồn của trang ..

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

Các biến không phải là những gì chúng ta đang xem ở đây, đó là tập lệnh ở phía dưới, hãy chú ý src bây giờ không có điểm nào (điều này ban đầu chỉ vào tệp autosave.js).

Bạn có thấy một cái gì đó tương tự như ở trên không, hoặc src vẫn được ghi với đường dẫn đến tệp autosave.js?

EDIT2: Đây là những gì tôi thấy với các tập lệnh ghép nối tắt.

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

Lưu ý rằng tập lệnh tự động lưu vẫn đang bị loại trừ .. (cho đến nay tôi không thể tái tạo vấn đề của bạn) ..

Bạn đang đặt mã tôi cung cấp ở đâu?


Cảm ơn!! Có thể đặt nhiều loại bài đăng trong đó? Hay tôi phải làm điều này cho mỗi CPT?
Marc

Xấu hổ. Nó không hoạt động cho một cpt. Tôi vẫn nhận được điều này: cl.ly/3gTR - đang xóa các trường tùy chỉnh.
Marc

Kiểm tra nguồn của trang và xem liệu tệp autosave.js có còn ở đó không, nếu nó vẫn ở đó, thì bộ lọc không hoạt động như mong đợi (hoặc tôi đang thiếu một cái gì đó) .. NHANH CHÓNG: Có vẻ hoạt động với tôi tốt thôi, bạn có nhớ thay đổi văn bản trong mã mẫu để phù hợp với loại bài đăng của bạn không?
t31os

Vâng, tôi sẽ thử lại và xem nguồn. Và nếu tôi muốn làm nhiều loại bài thì sao?
Marc

1
Bạn nói rằng nó không phải là một giải pháp hoàn hảo, nhưng nó thậm chí không phải là một giải pháp tốt :)
kovshenin

1

Tôi chỉ gặp vấn đề với điều này trên một trong số các plugin tôi duy trì và chúng tôi quyết định chỉ kiểm tra xem chúng tôi có ở trên trang của chúng tôi không (trên wpsc-sản phẩm chứ không phải trên bài đăng hoặc trang) và sau đó chúng tôi chỉ đơn giản hủy đăng ký tập lệnh tự động ,, vì vậy, , ngoài CPT là 'sản phẩm wpsc' và chức năng của chúng tôi (loại bỏ mã không liên quan trông giống như thế này:

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

Xin vui lòng không hủy bỏ các kịch bản cốt lõi.
kovshenin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.