web-dev-qa-db-ja.com

定義済み/プリセットの日付で新しい投稿を追加する

現状

私が現在取り組んでいるプラグインは追加の投稿リスト表示です:あなたが以下のスクリーンショットで見ることができるようにカレンダー。

Admin Calendar View

MP6とハンドヘルドスクリーン幅の管理カレンダービュー。

目標

今毎日は投稿数だけを示しています。

追加したいのは新しい投稿を追加するためのリンクです。しかし、このリンクはだけでなく~/wp-admin/post-new.php?post_type=abcスクリーンに連れて行くべきですが、同様に定義済み投稿日 - から追加するべきですクリックした日.

考えられる解決策と問題

これまでにいくつかの選択肢があります。

  1. 公開メタボックスにフックして、どういうわけか日付を修正してみてください。
  2. メタボックスを削除し、それのクローンを作成し、クエリ変数からデータを受け取るために日付を置き換えるだけです(@Rarstのアイデア)。
  3. 「新規」リンクをクリックすると、独自の投稿ステータスと定義済みの日付でドラフトを追加し、ドラフトにリダイレクトします。ドラフトをwp cronジョブでクリーンアップします(@userabuserのアイデア)。

問題点

  1. メタボックスにフックするということは、preview_post_link-フィルタにコールバックを追加することを意味します。それからgmt_offsetフィルタを使って'pre_option_gmt_offset'-オプションをインターセプトする別のコールバックをアタッチして、現在の日付を返すようにtouch_time()内で行われる計算を変更します。問題は、計算式がtime() + ( $offset * HOURS_IN_SECONDS );であり、変更できる唯一の値が$offsetであるということです。
  2. メタボックスを交換することはすべてのtracチケットとコア変更を追跡することを意味するでしょう、そしてそれ故にそれほど将来の証拠ではないでしょう。
  3. 下書きを追加したり、それらを整理したりするための多大な努力が必要です。それからカスタム投稿ステータスを使用することにはまだ私の罠に満ちた分野があります。

任意のアイデアは大歓迎です。概念をさらに証明するコード。答えとしていくつかの有用なドラフトがあるとすぐに私は賞金を発表するつもりです。

1
kaiser

Chatで説明したように、最善の解決策はポイント3です。プログラムでwp_insert_postを使用してドラフト(またはカスタム投稿ステータス)を追加することで、他のパラメーターを設定できます。

  'post_date'      => [ Y-m-d H:i:s ] //The time post was made.
  'post_date_gmt'  => [ Y-m-d H:i:s ] //The time post was made, in GMT.

...とにかく行き止まりであるgmt_offsetを介してpre_option_gmt_offsetを傍受する必要はありません。

また、パブリッシュメタボックスの置き換え、クローンの作成、再構築、どのような方法でも - 悲惨なメンテナンス悪夢

私たちがこれについて考えるならば、ドラフト(またはあなたが選んだカスタム投稿ステータス)を追加することは前述のアイデアよりはるかに少ない問題です。

wp_insert_postの唯一のマイナス面は、投稿をデータベースに物理的に挿入していることです。そのため、ある点では、通常は自動ドラフトになるものでデータベースを汚染しています。

そこでwp_cronが登場します。

Chatで述べたように、draft投稿ステータスをそのまま使用するかどうかによっては、これらの投稿エントリにフラグを付けるために使用できるカスタムフィールド(アンダースコアを前に付ける)を追加することをお勧めします。

ユーザーがエントリを公開しない場合、この投稿アイテムはユーザーによって破棄されたため、クリーンアップの対象としてマークされる必要があります。

私は、投稿を公開しないと投稿としてカレンダーに追加されず、後日クリーンアップのために割り当てられることをユーザーに示すカスタム管理者通知を追加することさえします。

これは、現時点で唯一有効であると思われる(post_title/content/excerpt)以外のクエリ変数を使用してポストエディット画面でフォーム入力をプログラムで設定できるようになるまで(これまでの場合)、最も安全で、最も安全で将来性の高いソリューションです。

私が考えることができる唯一の他のオプションはJavaScriptやjQueryを介して日付入力の値を設定することです - それは簡単ですがユーザーがJavaScriptを有効にしているという保証はありません。失敗するでしょう。

私たちは、懸念されるかもしれないカスタム投稿ステータスのためにいくつかのEdge-caseが存在することを知っていますが、あなたのアプリケーションでのそれらの使用を考慮すると、それらを使うことのリスクは最小限であると思います

1
userabuser