2012-08-06 66 views
1

我正在爲一個插件和一些快速和骯髒的開發工作我已經添加了一個函數調用single.php調用我的插件中的函數,它存儲有關當前職位的數據在數據庫。Wordpress - single.php調用兩次

雖然我已經注意到,它總是被調用兩次:一次用於我正在請求的帖子,一次用於另一帖子(它不會顯示在頁面的內容中)。

有沒有人知道這是爲什麼,如果是這樣,它是否是所需的行爲,如果不是,我可以修復它?

下面是一個例子類似我的single.php:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
        <?php do_action('msw_single_php', $wp_query); ?> 

而且一個類似於我的插件文件:

add_action('msw_single_php', 'msw_sp', 0, 1); 
function msw_sp(WP_Query $query) { 
    global $wpdb; 
    $wpdb->insert($wpdb->prefix . 'msw_career_view_debug', array(
     'request_info'  => json_encode($query), 
    )); 
} 

回答

1

我建議你開始調試自己,你必須對WP_DEBUG
var_dump($query) in msw_sp()檢查哪些帖子通過了,他們在頁面上的位置?
我也建議你var_dump(is_single())檢查它是否是一個單一的頁面。
var_dump($query->is_main_query())會告訴您是否是頁面構建查詢或額外的查詢。

是在側邊欄的第二篇文章?

不是一個真正的答案,而是一種讓你開始的方法。

+0

我有WP_DEBUG和var_dumping $查詢只顯示一個,但如果我有查詢轉儲到數據庫它顯示兩個。我沒有嘗試is_single或is_main_query,但在另一個環境中進行測試表明,這在所有環境中都不是問題。 – 2012-08-06 21:34:39

6

我遇到了同樣的問題,現在已經解決了。

對我來說,這個問題只發生在Firefox,當single.php被調用。而你不想要的帖子是相鄰的。

然後我搜索了很多,終於找到了解決辦法在這裏:

​​

這給另一個引用:

http://wordpress.org/support/topic/singlephp-called-for-current-and-next-post-with-pretty-permalinks

由於上述鏈接。

我想提出一個簡短的位置:

原因是Firefox的預取功能。對於single.php,WP自動將兩個<鏈接>放入<標頭>,其中一個是rel =「next」,它指向下一篇文章(相鄰文章)。

當Firefox看到這個時,它會預讀<鏈接指向的頁面>,以便在閱讀當前文章後轉到下一篇文章時加快速度。因此,該帖子將被調用,但你永遠不會看到它顯示。這也是爲什麼你看不到任何你爲了調試而轉儲的消息,甚至沒有回溯。

順便說一句,添加兩個<鏈接>的動作被添加到「default-filters.php」中。對於WP 3.5.1,它在#204行。

解決辦法是:

寫的功能(例如 「remove_adjacent_links」),它執行:

remove_action(‘wp_head’, ‘adjacent_posts_rel_link_wp_head’) 

和鉤函數(remove_adjacent_links)爲 「初始化」。

這樣,鏈接將被刪除。

但是,如果你確實希望鏈接在那裏,也許你必須這樣離開它,並容忍Firefox的預取......這就是我所做的,因爲這對我的情況無關緊要。我沒有嘗試是否有辦法離開那裏,並使用WP代碼來阻止Firefox預取。

+0

非常感謝。 +10,如果我可以。 – Greeso 2013-12-13 04:26:02

+0

那麼,FF讓wordpress執行一些可能需要的東西?哇。這對我來說是一個-1000的FF ......感謝夥計 – Edd 2015-11-28 19:33:10

+0

進入問題的地方,我檢查post驗證器對象(使用會話驗證測試)。這是問題謝謝! – user3607584 2016-05-03 14:23:35