WordPressサイトの問題を修正するように依頼されました。この問題は、ページの代わりに投稿を使用する必要があるという事実が原因で発生します。ただし、サイトは稼働中であり、最も迅速なオプションは、ある種のハックを使用して問題を修正することです。
サイトにはイベントセクションがあり、各イベントはページです(これは問題であり、実際には投稿である必要があります)。今後のイベントと過去のイベントを設定するために、投稿日が使用されます。したがって、今後のイベントの投稿ステータスは「future」になります。
正しいquery_post()を使用してイベントを正常に表示するイベントのリストページがあります。クリックして実際のイベント(将来のページ)に移動すると問題が発生しますが。管理者としてログインしている場合はページが表示されますが、ログインしていない場合は404ページが表示されます。
今、彼らが投稿するなら、「未来は今です!」プラグインはこの問題を解決します。問題を回避する唯一の方法は、コアのWordpressファイルの一部を書き直すことだと感じています。
どんなアドバイスでも素晴らしいです、私はワードプレスで多くの経験を持っているので、あなたが私を正しい方向に向けることができたとしても。
乾杯、ジェイソン
[アップデート]
詳細な回答をありがとうmaiorano84。長期的には投稿に移動するつもりですが、その間にURLを変更せずにできるだけ早く修正するように要求されました(今日、リンクをチェックせずにイベントのリストを含む大量のメールを送信しました)
この場合、wordpressがテンプレートをロードする段階に到達しないため、post_statusfutureを含めるというソリューションは機能しません。ワードプレスコアの何かがそれがそこまで到達するのを妨げています。理想的には、それらがフックである場合、その間にこの動作をオーバーライドするために使用できますが、それに関しては、コアファイルを一時的に編集します。
【アップデート2】
編集が必要な2つの関数、またはそれらに関連するフックを使用する関数がわかりました。
まず、is_404()
将来のページを404として追加しないように変更する必要があります
次にis_page()
、ページが将来の場合はtrueを返す必要があります
【アップデート3】
私はこれをコアで行う方法を見つけました。2682行目に移動するwp-includes/query.php
と、古い関数の代わりにこれをコピーして正しく機能します。もっと良い方法があれば教えてください。ありがとう。
/** Future Pages **/
// Check post status to determine if post should be displayed.
if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) {
$status = get_post_status($this->posts[0]);
$post_status_obj = get_post_status_object($status);;
if ( !$post_status_obj->public ) {
if ( $post_status_obj->protected ) {
$this->is_preview = true;
print_r($status);
if ( 'draft' != $status ) {
$this->posts[0]->post_date = current_time('mysql');
} else {
$this->posts = array();
}
} elseif ( $post_status_obj->private ) {
if ( ! current_user_can($read_cap, $this->posts[0]->ID) )
$this->posts = array();
} else {
$this->posts = array();
}
}
/** END **/