• 「ページを編集」時に「変更をプレビュー」を押すと、
    公開側にもその変更が反映されてしまいます。

    編集を中断した場合、変更まえの状態を公開側で見せておきたいのですが、
    これは無理なのでしょうか?

    「投稿」は「変更をプレビュー」を押しても、
    公開側には反映されていません。
    「ページ」の場合だけこのような状態になってしまいます。

    パーマリンクは「/%category%/%post_id%/」とカスタマイズしてあります。
    wordpressは2.9.1です。

    どなたか、このトラブル対処法ご存じの方いらっしゃいませんか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック投稿者 tomedia

    (@tomedia)

    原因を探ったのですが、
    ——————————————————-
    カスタムフィールドに入力したものは「変更をプレビュー」で公開側に反映される
    ——————————————————-
    ということがわかりました。

    本文欄に入力したものは「変更をプレビュー」をしても公開側に反映されていませんでした。
    本文欄に入るデータとカスタムフィールドに入るデータはどう違うのでしょうか?

    ご存じの方いらっしゃいませんでしょうか?

    モデレーター jim912

    (@jim912)

    tomediaさん、こんにちは。

    本文欄とカスタムフィールドのデータは、保存されるデータベースのテーブルが異なります。

    プレビューは、オートセーブ機能を利用して、最新のデータを一旦保存し、それを表示させているのですが、オートセーブ機能は、記事欄が属するpostsテーブルのみを対象としているため、カスタムフィールドのデータが保存されるpostmetaテーブルは対象とされていません。
    このため、カスタムフィールドは常に最新のデータが表示されてしまうことになります。

    余談になりますが、これと同じくして、リビジョンのデータを戻した場合でも、カスタムフィールドが対象外になってしまうという問題もあります。

    データベーステーブルの種類や、構造については、codexのデータベース概要を参照ください。

    本文はリビジョンで複数版管理されますが、
    カスタムフィールドの入力値は投稿のリビジョンには紐付けされず
    最新版の投稿にのみ紐付けされているからです。

    カスタムフィールドの値を更新すると update_post_meta() が呼ばれます。
    そこで、投稿の ID がリビジョンにならないように操作しています。

    function update_post_meta($post_id, $meta_key, $meta_value, $prev_value = '') {
      // make sure meta is added to the post, not a revision
      if ( $the_post = wp_is_post_revision($post_id) ) // ここでリビジョン判定!
        $post_id = $the_post;
    
      return update_metadata('post', $post_id, $meta_key, $meta_value, $prev_value);
    }

    トピック投稿者 tomedia

    (@tomedia)

    遅くなりまして、すみません。

    色々探っていたのですが、
    kzさんから頂いた
    post.phpのupdate_post_meta()を何とかしようと思いましたが、
    自分にはその知識が乏しく・・・。

    上記のご意見をもっと研究して、何とか解決策を見いだします。

    jim912さん、kzさんありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「ページの「変更をプレビュー」が公開側に反映されてしまう」には新たに返信することはできません。