เป็นไปได้ที่จะปิดการบันทึกอัตโนมัติสำหรับโพสต์ประเภทเดียวที่กำหนดเอง


10

ดังนั้นฉันจึงมีปัญหากับเขตข้อมูลที่กำหนดเองของฉันในประเภทโพสต์ที่กำหนดเองของฉัน ไม่ว่าจะด้วยเหตุผลใดก็ตามฟิลด์จะบันทึกและเคลียร์ค่อนข้างสุ่ม ... ฉันแน่ใจว่ามันไม่ได้สุ่ม แต่ฉันไม่แน่ใจว่าเกิดอะไรขึ้น นี่คือรหัสสำหรับประเภทโพสต์ที่กำหนดเองของฉัน:

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

ปรับปรุง:ดังนั้นฉันจึงทำการวิจัยมากขึ้นและคิดออก บันทึกอัตโนมัติ (การปรับปรุงแก้ไข aka) - โพสต์เมทาดาทาลบตัวเอง

เป็นไปได้ไหมที่จะปิดการบันทึกอัตโนมัติสำหรับโพสต์ประเภทเดียวและไม่ใช่ทั่วโลก?


2
คุณแก้ไขรหัสที่คุณโพสต์ไว้ด้านบนหรือไม่ เนื่องจากคุณไม่มีrevisionsในsupportsอาร์เรย์ดังนั้นการบันทึกอัตโนมัติจึงควรปิดการใช้งานสำหรับประเภทโพสต์ "Givings"
onetrickpony

คำตอบ:


17

นั่นเป็นเรื่องง่าย :)

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

ไม่สะอาดทั้งหมด จำเป็นต้องใช้สคริปต์นั้นหากคุณต้องการให้ post.js แสดงตัวอย่าง Permalink ในบรรทัดใต้อินพุตหัวเรื่อง มันเห็นได้ชัดเจนโดยเฉพาะอย่างยิ่งในการโพสต์ใหม่ตั้งแต่บรรทัด Permalink ยังคงมองไม่เห็นโดยไม่ต้องบันทึกอัตโนมัติ วิธีแก้ปัญหาคือการจัดคิวสคริปต์ที่ไม่สมบูรณ์ในวัตถุและฟังก์ชั่นที่จำเป็นของ autosave.js
kitchin

4

เห็นได้ชัดว่าการยกเลิกการลงทะเบียนจาวาสคริปต์อัตโนมัติจะหยุดการทำงานอัตโนมัติเป็นประจำ ไม่จำเป็นต้องปิดใช้งานความสามารถในการบันทึกอัตโนมัติที่จะเกิดขึ้นกับโพสต์ประเภทนั้น แต่จะหยุดการทำงานของการบันทึกสคริปต์แบบเนทีฟ

มันไม่ได้เป็นโซลูชั่นที่สมบูรณ์แบบ แต่ควรมีผลที่ต้องการ

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

หวังว่าจะช่วย ...

แก้ไข:ด้วยรหัสข้างต้นเมื่อบนหน้าจอการสร้างโพสต์สำหรับประเภทที่คุณควรเห็นต่อไปนี้ในแหล่งที่มาของหน้า ..

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

ตัวแปรไม่ใช่สิ่งที่เรากำลังดูที่นี่มันเป็นสคริปต์ที่ด้านล่างสังเกตเห็นว่า src ชี้ไปที่ใดเลย (ซึ่งเดิมชี้ไปที่ไฟล์ autosave.js)

คุณเห็นสิ่งที่คล้ายกับข้างต้นหรือ src ยังคงได้รับการเขียนด้วยเส้นทางไปยังไฟล์ autosave.js?

EDIT2:นี่คือสิ่งที่ฉันเห็นด้วยการตัดแบ่งสคริปต์ออก

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

โปรดสังเกตว่าสคริปต์การบันทึกอัตโนมัติยังคงถูกแยกอยู่ .. (ดังนั้นฉันยังไม่สามารถทำให้เกิดปัญหาของคุณได้อีก .. )

คุณวางรหัสที่ฉันให้ไว้ที่ไหน


ขอบคุณ !! เป็นไปได้หรือไม่ที่จะใส่โพสต์หลายประเภทไว้ในนั้น? หรือฉันต้องทำสิ่งนี้กับ CPT แต่ละอัน?
Marc

ความอัปยศ. มันใช้งานไม่ได้สำหรับ cpt เพียงครั้งเดียว ฉันยังคงได้รับสิ่งนี้: cl.ly/3gTR - ซึ่งเป็นการล้างฟิลด์ที่กำหนดเอง
Marc

ตรวจสอบแหล่งที่มาของหน้าและดูว่าไฟล์ autosave.js ยังคงอยู่หรือไม่หากยังอยู่ที่นั่นตัวกรองจะไม่ทำงานตามที่คาดไว้ (หรือฉันพลาดบางสิ่งบางอย่าง) .. แก้ไขอย่างรวดเร็ว: ดูเหมือนจะเหมาะกับฉัน ไม่เป็นไรคุณจำได้ว่าเปลี่ยนข้อความในโค้ดตัวอย่างเพื่อให้ตรงกับประเภทโพสต์ของคุณหรือไม่
t31os

ใช่ฉันจะลองอีกครั้งและดูที่มา แล้วถ้าฉันต้องการโพสต์หลายประเภทล่ะ
Marc

1
คุณบอกว่ามันไม่ได้เป็นโซลูชั่นที่สมบูรณ์แบบ แต่ก็ไม่ได้เป็นทางออกที่ดี :)
kovshenin

1

ฉันเพิ่งมีปัญหากับปลั๊กอินตัวใดตัวหนึ่งที่ฉันดูแลและเราตัดสินใจที่จะตรวจสอบว่าเราอยู่บนหน้าเว็บของเรา (ผลิตภัณฑ์ wpsc และไม่ใช่ในโพสต์หรือหน้า) จากนั้นเราก็ลงทะเบียนสคริปต์บันทึกอัตโนมัติ ,, ดังนั้น , ออก CPT คือ 'ผลิตภัณฑ์ wpsc' และฟังก์ชั่นของเรา (ลบรหัสที่ไม่เกี่ยวข้องดูเหมือนว่านี้:

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

กรุณาอย่าลงทะเบียนสคริปต์หลัก
kovshenin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.