未捕获错误:调用未定义的函数wp_GENERATE_ATTACHATE_METADATA()@wp-cron

时间:2017-03-23 作者:Mac

开发人员

我有一个WP cronjob正在运行,它应该导入一些图片并将它们设置为特定帖子的附件。但当我将其作为WP cronjob运行时,我显然无法做到这一点——例如,当我在“init”上运行它时,它工作得很好。但只要我尝试在WP cronjob中运行它,它就会失败。

 register_activation_hook( __FILE__, \'OA_FeedManager_activated\' );
 function importpicture_activated()
 {
    if (! wp_next_scheduled( \'import_feed\' ) ) 
    {
       wp_schedule_event( time(), \'hourly\', \'import\' );
    }
 }

  add_action( \'import\', \'call_import\' );
  function call_import() 
  {
        //lots of code, where i get data from a XML feed, and creates a new post. no need to include it.           

        foreach($oDataXML->Media->Fotos->Foto as $key => $value)
        {
            $filename = wp_upload_dir()[\'path\'].\'/\'.$oDataXML->SagsNr->__toString().\'_\'. $value->Checksum->__toString() . \'.jpg\';  
            $sPicture = $value->URL->__toString();
            copy($sPicture, $filename);
            $filetype = wp_check_filetype( basename( $filename ), null );

            $wp_upload_dir = wp_upload_dir();
            $attachment = array(
               \'guid\'           => $wp_upload_dir[\'url\'] . \'/\' . basename( $filename ),
               \'post_mime_type\' => $filetype[\'type\'],
               \'post_title\'     => preg_replace( \'/\\.[^.]+$/\', \'\', basename( $filename ) ),
               \'post_content\'   => \'\',
               \'post_status\'    => \'inherit\'
            );
            $attach_id = wp_insert_attachment( $attachment, $filename, $iPost_ID );
            $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
            wp_update_attachment_metadata( $attach_id, $attach_data );           
        }
  } 
据我所知,这是因为wp_generate_attachment_metadata() 在执行wp-cronjob, 我应该require_once(\'wp-load.php\').

但遗憾的是,在运行cron作业时,我无法要求这样做(我尝试了两者wp-load.php &;wp-includes/post.php) - 但技巧也不一样。

因此,WPSE上可能有一位智者可以启发我如何正确运行WP cronjob。

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

一些通常是管理端的功能没有包含在“主”wordpress引导中,包含上载文件操作功能的文件就是其中之一,您需要通过添加

include_once( ABSPATH . \'wp-admin/includes/image.php\' );
进入您的call_import 作用

SO网友:Fayaz

在cronjob脚本的顶部(例如:my-cron.php), 执行以下操作:

if ( ! defined(\'ABSPATH\') ) {
    /** Set up WordPress environment */
    require_once( dirname( __FILE__ ) . \'/wp-load.php\' );
}
然后在服务器中按如下方式设置cron:

5 * * * * wget -q -O - http://your-domain.com/my-cron.php
Note: 也许您试图将cron作为PHP命令行(CLI)运行,但这行不通。您需要以HTTP请求的形式运行cron(使用wgetcurl), 如上所示。

有关更多信息read this official WordPress document.

更新:

根据新添加的代码,我可以看出此代码是错误的:

register_activation_hook( __FILE__, \'OA_FeedManager_activated\' );
function importpicture_activated() {
    if ( ! wp_next_scheduled( \'import_feed\' ) )  {
        wp_schedule_event( time(), \'hourly\', \'import\' );
    }
 }

 add_action( \'import\', \'call_import\' );
 function call_import() {
     // lots of code
 }
你检查过了if ( ! wp_next_scheduled( \'import_feed\' ) ) 但你正在安排add_action( \'import\', \'call_import\' );. 要使cron正常工作,必须注册相同的操作import. 此外,您的激活挂钩是OA_FeedManager_activated, 确保它运行importpicture_activated 作用因此,代码应该如下所示:

register_activation_hook( __FILE__, \'OA_FeedManager_activated\' );

function OA_FeedManager_activated() {
    importpicture_activated();
}

function importpicture_activated() {
    if ( ! wp_next_scheduled( \'import\' ) ) {
        wp_schedule_event( time(), \'hourly\', \'import\' );
    }
 }

 add_action( \'import\', \'call_import\' );
 function call_import() {
     // lots of code
 }
要检查cron是否正确注册,可以使用control plugin. 此外,激活WP debugging 查看代码生成的错误。

Note:对于未定义的函数wp_generate_attachment_metadata() 错误check Mark\'s 答复

此外,由于您已经在插件的激活挂钩中安排了cron,因此如果更改激活挂钩功能,则必须先停用该插件,然后再次激活该插件。使用Crontrol插件,确保没有在后端注册不必要的cron。

最后,检查是否存在wp-config.php 你有define( \'DISABLE_WP_CRON\', true );. 您必须将其删除(如果有)或设置为false, 如果希望WP cron在正常WP负载下运行。否则,您需要使用OS crontab设置cron(如我的答案开头所示)

相关推荐

无法在WordPress中通过PHP显示图像

我有一个奇怪的问题,当我尝试使用PHP输入图像标记的源代码时,它会在检查器中显示以下错误<img src=(unknown) alt=\"\"> 这个代码片段为我提供了正确的url,通过查看CPanel并粘贴和复制地址进行检查,但当我尝试通过php输入它时,不会显示图像$image = wp_get_attachment_image_src( $post_thumbnail_id); //echo($image[0]); ?> <img src=