単一のカスタム投稿タイプの自動保存をオフにすることが可能


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でタイトル入力の下の行にパーマリンクプレビューを実行する場合に必要です。パーマリンクの行は自動保存なしでは見えないため、新しい投稿では特に目立ちます。回避策は、autosave.jsの重要なオブジェクトと関数をスタブするスクリプトをエンキューすることです。
kitchin

4

どうやら自動保存JavaScriptの登録を解除すると、基本的に自動保存ルーチンの実行が停止します。その投稿タイプで自動保存が実行される機能が必ずしも無効になるわけではありませんが、ネイティブの自動保存スクリプトの実行が停止されます。

これは完璧なソリューションではありませんが、望ましい効果が得られるはずです。

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

ええ、もう一度やり直してソースを調べます。また、複数の投稿タイプを実行したい場合はどうなりますか?
2010

1
あなたはそれは完璧な解決策ではないと言いましたが、それは良い解決策ではありません:)
kovshenin

1

私が保持しているプラ​​グインの1つでこれに問題があったため、ページ(wpsc-productであり、postまたはpageではない)であるかどうかを確認し、自動保存スクリプトの登録を解除しただけなので、 、アウト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.