WP_INSERT_POSTS致命错误:已达到‘100’的最大函数嵌套级别,正在中止!

时间:2014-06-04 作者:Antonio Papa

我遇到了一个奇怪的问题,我编写了如下代码:

add_action(\'save_post\', \'save_post_func\');

function save_post_func(){
    include_once(ABSPATH . WPINC . \'/feed.php\');

    $rss = fetch_feed($url);

    if (!is_wp_error($rss)) {
        //ini_set(\'xdebug.max_nesting_level\', 1000); <-- Doesn\'t work

        $maxitems = $rss->get_item_quantity(5);

        $rss_items = $rss->get_items(0, $maxitems);

        foreach ($rss_items as $item) { // count($rss_items) = 5 ???
            wp_insert_post(array(\'post_title\' => \'a\')); // inserts > 100 records ???
        }

    }

}
显示此错误:

致命错误:已达到最大函数嵌套级别“100”,正在中止!

有什么帮助吗?问题出在哪里似乎都没问题。。。

2 个回复
最合适的回答,由SO网友:Antonio Papa 整理而成

修复了我在插入帖子之前添加这一行的问题。

remove_action(\'save_post\', __FUNCTION__);
最终代码:

add_action(\'save_post\', \'save_post_func\');

function save_post_func(){
    remove_action(\'save_post\', __FUNCTION__);

    include_once(ABSPATH . WPINC . \'/feed.php\');

    $rss = fetch_feed($url);

    if (!is_wp_error($rss)) {

        $maxitems = $rss->get_item_quantity(5);

        $rss_items = $rss->get_items(0, $maxitems);

        foreach ($rss_items as $item) { 
            wp_insert_post(array(\'post_title\' => \'a\')); 
        }

    }

}

SO网友:Abhik

这是因为您使用的代码创建了一个无限循环。在调用之前,应该先解除该函数的挂钩wp_insert_post 完成后再次添加。以下是您应该使用的示例代码:

function save_post_func( $post_id ){
    if ( ! wp_is_post_revision( $post_id ) ){

        // unhook this function so it doesn\'t loop infinitely
        remove_action(\'save_post\', \'save_post_func\');

        include_once(ABSPATH . WPINC . \'/feed.php\');

        $rss = fetch_feed($url);

        if (!is_wp_error($rss)) {

            $maxitems = $rss->get_item_quantity(5);

            $rss_items = $rss->get_items(0, $maxitems);

            foreach ($rss_items as $item) { 
                wp_insert_post(array(\'post_title\' => \'a\')); 
            }

        }

        // re-hook this function
        add_action(\'save_post\', \'save_post_func\');
    }
}
add_action(\'save_post\', \'save_post_func\');  
更多信息来自Codex

结束

相关推荐

Vimeo Froogaloop API,在小提琴中工作,但不能在WP中工作

我试图利用Vimeo的Froogaloop API,在用户单击某个元素时暂停视频嵌入。我让它在my Fiddle 但它在我的Wordpress环境中不起作用。我从this thread 创建我正在处理的网站的简化版本;HTML<div id=\"player1\" class=\"col\"> <div class=\"vid\"> <iframe src=\"//player.vimeo.com/video/75817361?titl