단일 맞춤 게시물 유형에 대해 자동 저장을 사용 중지 할 수 있습니다


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

업데이트 : 그래서 더 많은 연구를하고 알아 냈습니다. 자동 저장 (일명 개정)- 메타 데이터 게시 자체 삭제

전 세계가 아닌 단일 게시물 유형에 대해서만 자동 저장을 사용 중지 할 수 있습니까?


2
위에 게시 한 코드를 편집 했습니까? 당신이 없기 때문에 revisionssupports배열, 자동 저장 귀하의 "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 미리보기를 수행하도록하려면 해당 스크립트가 필요합니다. 영구 링크 행은 자동 저장없이 보이지 않기 때문에 새 게시물에서 특히 눈에.니다. 해결 방법은 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

방금 유지 관리 한 플러그인 중 하나 에서이 문제가 발생하여 페이지 (postsc 또는 page가 아닌 wpsc-product)에 있는지 확인하기로 결정한 다음 자동 저장 스크립트를 등록 취소했습니다. , out CPT는 'wpsc-product'이며 우리의 기능 (관련되지 않은 코드 제거는 다음과 같습니다.

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.