9

我的functions.php中有以下代码,它在发布时执行脚本:

function save_new_post($post_ID) {

$site_root = '/home/forexmag/public_html/directory2';
$post = get_post($post_ID);
$title = $post->post_title;
$breaking_news = false;

$categories = get_the_category($post_ID);
if (is_array($categories) && !empty($categories))
{
    foreach ($categories as $cat_det)
    {
        //this is the id for the breaking (bad) news
        if (5668 == $cat_det->cat_ID)
        {
            $breaking_news = true;
            break;
        }
    }
}

$exec_code = "/usr/local/bin/php 
        $site_root 
        /crons/cron_notify.php '$title' $post_ID 2 " . intval($breaking_news);
exec(
    $exec_code
);
} add_action('draft_to_publish', 'save_new_post', 10, 1);

当我发布新帖子时,我不断收到以下错误:

Catchable fatal error: Object of class WP_Post could not be converted to string in /home/forexmag/public_html/wp-content/themes/forex_magnates/functions.php on line 712

这条线是我设置$exec_codevar 的地方。但是,正如您所看到的,并且正如我通过 var_dump 确认的那样,该$title变量是一个字符串。我错过了什么?

编辑:更奇怪的是,当我 var_dump$exec_code并杀死脚本时,我得到了一个完美的字符串:

string(121) "/usr/local/bin/php /home/forexmag/public_html/directory2/crons/cron_notify.php '2011 Free Forex Report' 9934 2 0"
4

3 回答 3

11

在 Wordpress Answers 上得到正确答案。认为我应该分享它:

$post_ID是一个WP_Post对象。您的执行代码应该有效地使用$post_ID->ID.

function save_new_post($post_ID)
{
    print_r($post_ID);
    die();

退货

WP_Post Object ( [ID] => ...

vancoder提供

请注意,这取决于您使用的钩子。例如,如果你使用publish_page你会得到一个整数(这实际上是我困惑的根源)

于 2013-02-21T19:23:35.870 回答
0

我遇到了同样的错误,但最终我的问题的解决方案是

<?php wp_reset_query(); ?>

这是因为正在使用 WP_Query 并且正在中断页面下方的其余查询。

我希望这可以帮助别人

于 2016-02-03T15:15:59.003 回答
-2

有一天我在我的网站上遇到了同样的错误,但代码不是问题。问题出在数据库上。我所做的是进入我的数据库并更改站点网址和主页,因为里面有乱码。我认为我的网站受到了损害,所以我更改了数据库密码。该网站将帮助您摆脱可捕获的致命错误https://www.msgdigital.com/catchable-fatal-error-object-of-class-wp_error-could-not-be-converted-to-string/

我试过了,相信它有效。

于 2017-01-15T02:08:21.070 回答