サポート » 使い方全般 » 下書き保存と投稿する順番の関係について

  • waterfull

    (@waterfull)


    記事を投稿する際、下書き保存という機能を利用することがあります。
    ただ、下書き保存を行うと、投稿した時の記事の順番が若干おかしくなります。

    どういうことかと言いますと、新着の順番を例に考えますが、
    1番目の記事を下書き保存し、2番目の記事と3番目の記事を
    普通に投稿したとします。
    その後、1番目の記事を投稿します。
    すると、本来は、2番目の記事、3番目の記事、1番目の記事というように、
    投稿した順番で記事が表示されると思ったのですが、
    実際は、1番目、2番目、3番目
    という順番で表示されていました。
    (つまり、下書き保存も投稿と同じ扱いとされていました。)

    私の希望としては、下書き保存は関係なく、
    実際に投稿した順番が新着順になるようにしたいです。
    話が散らかってしまって申し訳ないですが、方法や対策が
    分かる方がいらっしゃいましたら、ご回答いただけますと嬉しいです。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • 公開後、公開日時を編集することができます。

    投稿一覧画面で、タイトルをホバーすると表示される「クイック編集」をクリックすると、その投稿の概要を編集することができます。(編集画面内でも可能です)

    表示される編集項目の中の「日時」を編集することによって、新着の順番の制御が可能と思われます。

    これで回答になってますか?

    yah!!さん
    ご回答ありがとうございます。

    私も公開日時の変更については検討していたのですが、
    私が作成を目指しているサイトが投稿型のサイトということがありまして、
    ユーザーが自由に公開日時を変更できるのもどうかと思いまして、
    悩んでいる最中です。

    ご回答をいただいたにも関わらず、
    良いお返事をすることが出来ず、本当に申し訳ございません。

    初級者さんなのか上級さんなのか見誤ってしまい申し訳ありませんでした。

    方法としては二つ上げてみます。
    「公開状態」を「非公開」にして保存
    「公開状態」を「非公開」にしておくと、「公開」にしたら初期保存日時が公開日時となります。
    しかし、この場合、ログインユーザーには公開されます。

    post_date を強制的に書き換える
    投稿日時となるのは、post_dateなので、この値を初期投稿日時に変更すれば実現しそうです。投稿をDBに加える直前に実行されるwp_insert_post_data というフックが使えるものと思われます。

    ロジックの一案としては:
    1.初期下書き保存日時をカスタムフィールド(post_meta)に保存
    2.その値で $data[‘post_date’] を上書きしてDBに格納

    この場合、post_date_gmtのほうも処理が必要かもしれません。

    参考まで。

    yah!!さん、
    何度もご返事いただき、大変感謝いたします。
    私は、驚くほどの初心者ですので、お手柔らかにお願いしたいです。。

    まず、「公開状態」を「非公開」にして保存という点についてですが、
    これは一案として面白いと思い、検討を考えたのですが、
    非公開にする手間や、ログインユーザーに公開される点などを考慮すると、
    やはり難しいかと思われました。
    (自動的に非公開の状態で、ということだとまた話が変わるかもしれないと思いました。)

    また、post_dataを強制的に書き換えるという点ですが、
    大変すばらしいアイデアであると同時に、実現の可能性も高いと思い、
    yah!!さんが示してくださいましたwp_insert_post_dataを中心に調べました。
    そのところ、理屈というか筋道というかはある程度理解できました。
    しかし、post_date_gmtを使用する点などを含め、
    具体的にどのようなコードを書くのがよいか、という部分がわからず、
    結局手を出すことができない、という状況にあります。

    丁寧にご回答していただいたにも関わらず、期待通りの回答を提示することができず、
    本当に申し訳ございません。

    functions.phpに以下のコードをコピーペーストしていただけると
    初期下書き保存時の日時を、下書き更新時、公開時、公開後の改定時にもずっと保持し続けます。

    function filter_handler( $data , $postarr ) {
    
    	// 投稿IDの取得
    	$post_id = $postarr['ID'];
    
    	// 'initial_post_date'に格納された保存値を取得
    	$initial_post_date = get_post_meta($post_id, 'initial_post_date', true);
    
    	// 'initial_post_date'が空なら'post_date'を代入(初期下書き投稿の日時の記録)
    	if ( !$initial_post_date ) {
    		$initial_post_date = $data['post_date'];
    		add_post_meta($post_id, 'initial_post_date', $initial_post_date, true);
    	}
    
    	// 'initial_post_date'に保存した日時で投稿日時を上書き
    	$data['post_date'] = $initial_post_date;
    
    	// 上書きしたデータを処理に返す
      return $data;
    }
    
    add_filter( 'wp_insert_post_data', 'filter_handler', '99', 2 );

    世界標準時間のようなものですが、post_date_gmt(グリニッジ平均時)は考慮していません。おそらく実害はないものと思います。ちなみに、post_dateは原則として東京の時刻です。

    上記コード、十分にはテストしていませんので、検証していただけるでしょうか。

    一通りの回答が得られたと思われるようでしたら、「解決済み」にしていただけると助かります。

    いずれにしても参考まで。

    yah!!さん
    本当にご迷惑をおかけすると同時に、ご回答も遅くなり、
    大変申し訳ないです。

    yah!!さんが示してくださいましたコードを
    実際にfunctions.phpに貼り付けてみましたところ、
    特に変化は見られませんでした。
    (投稿した順番ではなく、下書き保存が優先されました。)
    プラグインの停止や、functions.phpの内容の修正なども行いましたが、
    特に変化は見られませんでした。

    また、私の文章力不足でyah!!さんの誤解を招いてしまったかもしれません。
    実際に機能させてみないと、まだ何とも言えないのですが、
    yah!!さんのご説明に添う形で考えると、
    初期下書き保存の日時と下書き更新時の日時を公開時の時間で上書きし、
    公開後の時間は、下書きや公開時など関係なく、投稿内容を修正するごとに上書きされる
    というスタイルが理想かと考えています。

    ただ、ある程度の枠組みをyah!!さんが示してくださっているにも関わらず、
    上記の私の理想的な内容にコードを変更することが出来ませんでした。

    お時間を割いていただいているにも関わらず、
    本当に申し訳ございません。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「下書き保存と投稿する順番の関係について」には新たに返信することはできません。