WordPress的 - single.php中调用两次(Wordpress - single.p

2019-09-20 20:11发布

我工作的一个插件,对于一些快速和肮脏的发展我加入了一个函数调用的single.php调用在我的插件功能,存储有关当前帖子在DB数据。

我注意到,虽然,它总是调用两次:一次后,我的另一篇文章请求和一次(不页面的内容显示出来)。

没有人知道这是为什么,如果是这样,无论是预期的行为,我怎么能如果不解决这个问题?

下面是类似我的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),
    ));
}

Answer 1:

我遇到同样的问题,现在它的解决。

对我来说,问题只发生在Firefox中,当single.php中被调用。 和你不希望的职务是相邻的。

然后我搜索了很多,终于找到了解决办法在这里:

http://shinephp.com/single-php-called-twice-how-to-stop/

这给另一参照:

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

由于上面的链接。

我想在这里提出一个简单介绍:

原因是Firefox的预取功能。 对于single.php中,WP自动将2 <链路>在<标题>,和它们中的一个是相对=“下一个”,它指向下一个柱(相邻的柱)。

当Firefox看到这个,它会预取的页面指向的<链接>,以便在情况下,加快你去下一个职位读取当前一个后。 因而该职位将被调用,但你永远不会看到它显示出来。 这也是为什么你不能看到你转储调试的任何消息,甚至没有回溯。

顺便说一句,其将两个<链路>的动作是在“缺省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浏览器。



Answer 2:

我建议你开始调试自己,你必须WP_DEBUG吗?
var_dump($query)msw_sp()检查哪些职位获得通过,并在他们的网页上?
我也建议你var_dump(is_single())以检查它是否是一个单一的页面。
var_dump($query->is_main_query())会告诉我们,如果它是网页建筑物查询或额外的查询。

是第二个职位某处一个工具?

不是一个真正的答案,但有办法让你开始。



文章来源: Wordpress - single.php called twice