WP_UPDATE_ATTACHING_METADATA在10个文件后中断

时间:2018-06-01 作者:parvaneh

目前,我们正在重建一个旧的WordPress网站。我们需要从那里导入大量图像。因此,我将所有目录复制到新站点,因此路径是相同的。

现在我们要将它们添加到媒体库中。所以我写了一个小脚本来循环遍历文件夹并执行操作。

它可以工作,但仅适用于前10次迭代,适用于第11幅图像wp_update_attachment_metadata() 不再工作(在媒体库中,img缩略图没有显示),然后foreach中断。(我也试着从另一个文件夹开始,它是一样的)。

看起来像是require_once( ABSPATH . \'wp-admin/includes/image.php\' ); 正在打破循环。没有这个,没有wp_update_attachment_metadata() 我可以回显所有图像URL。

我的意思是:我为一个页面创建了一个模板来完成这项工作。页面也显示不完整(导航、WP工具栏和header.jpg不完整),而且在媒体库中,导入时仅显示10幅图像。所以我猜剧本要被打破了。

代码如下:

$fullPath = $_SERVER[\'DOCUMENT_ROOT\']. \'/wp-content/uploads/\';
$scan = scandir($fullPath);

foreach($scan as $sc) {
    if(ctype_digit($sc)) {
        $scArr = scandir($fullPath . $sc);
            foreach($scArr as $s) {
                if(ctype_digit($s)) {
                    $sArr = scandir($fullPath . $sc . \'/\' . $s);
                        foreach($sArr as $img) {
                            $pattern="/[0-9]x[0-9]/";
                            if(!preg_match($pattern, $img)) {
                                $path = $fullPath . $sc . \'/\' . $s . \'/\' . $img;

                                $uploadPath = \'/home/preisvo0/public_html/neu/wp-content/uploads/\'. $sc . \'/\' . $s . \'/\' . $img;
                                echo $uploadPath . \'<br/>\';

                                        $name = preg_replace( \'/\\.[^.]+$/\', \'\', $img );
                                        $filetype = wp_check_filetype($img, null);


                                        if($img != \'..\' && $img != \'.\') {
                                            $attachment = array(
                                                \'guid\'           => $uploadPath,
                                                \'post_mime_type\' => $filetype[\'type\'],
                                                \'post_title\'     => $name,
                                                \'post_content\'   => \'\',
                                                \'post_status\'    => \'inherit\'
                                                );                                              

                                                $upload_id = wp_insert_attachment( $attachment, $uploadPath );
                                                echo "Uploaded »" . $img . "« »" . $upload_id . "« <br />";

                                            require_once( ABSPATH . \'wp-admin/includes/image.php\' );

                                            wp_update_attachment_metadata( $upload_id, wp_generate_attachment_metadata( $upload_id, $uploadPath ) );
                                        }

                            }
                        }
                }
            }
    }
}

1 个回复
SO网友:parvaneh

这似乎是一个执行时间问题。因此,我在服务器上减少了它&;我正在做一个又一个硬编码的年份文件夹,将执行的图像写入json文件,只插入那些不在其中的图像。。。希望一切顺利。

结束