我被要求在wordpress網站上解決問題。問題是由於使用帖子而不是頁面而導致的。然而,該網站已啓動並運行,最快的選擇是使用各種黑客技術來解決問題。Wordpress未來頁面問題(未顯示)
該網站有一個事件部分,每個事件是一個頁面(這是問題,應該是一個職位)。爲了有即將到來的和過去的事件,使用了發佈日期,因此即將發生的事件具有「未來」的發佈狀態。
有一些事件的列表頁面,通過使用正確的query_post()來顯示它們很好。雖然點擊進入實際事件(這是未來頁面)時會出現問題。如果您以管理員身份登錄,則該頁面會顯示,但如果您未登錄,您將獲得404頁面。
現在,如果他們在帖子中發佈「未來就是現在!」插件可以解決這個問題。我有一種感覺,問題的唯一方法是重寫核心Wordpress文件的一部分。
任何建議將是偉大的,我有很多與WordPress的經驗,所以即使你可以指出我在正確的方向。
乾杯, 傑森
[更新]
感謝maiorano84爲您詳細的答覆。從長遠來看,我打算將他們轉移到帖子,但同時他們已經要求我們儘快修復它,而無需更改任何網址(今天,他們發送了包含事件列表的羣發電子郵件,而未檢查任何鏈接)
Your包含post_status future的解決方案在這種情況下不起作用,因爲wordpress沒有進入加載模板的階段。 wordpress核心中的某些東西阻止它變得那麼遠。理想情況下,如果他們是一個鉤子,我可以用它來覆蓋這個行爲,同時這將是優秀的,但如果涉及到它,我會暫時編輯核心文件。
[更新2]
我現在知道,需要編輯或使用,涉及到他們的鉤子這兩種功能。我們is_404()
其中
首先需要改變不添加未來的網頁爲404
其次,我們有is_page()
需要返回true,如果一個頁面是未來
[更新3]
我我發現如何在覈心中做到這一點。如果你去wp-includes/query.php
行2682.複製這個,而不是舊的功能,它工作正確。如果你有更好的方法,請讓我知道。謝謝。
/** 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 **/
謝謝您的回覆,我已經更新了我的問題,以迴應,如果你有時間。 – dciso
@dciso查看我的更新以瞭解可能的備用解決方案(未經測試)。如果有幫助,可以考慮將核心文件恢復原樣。否則,保持你的改變沒有任何壞處,直到一切都得到重組。儘管如此,請記住,如果執行了Wordpress更新,您將不得不再次破解核心文件,所以要小心。 – maiorano84
@dciso爲了防止碰巧遇到我以前的例子,發現它不起作用,我已經將示例更新爲可行的方法。試試這個,讓我知道它是否有幫助。 – maiorano84