0

数か月間、リモート イメージを自動的にダウンロードして保存するプラグインを使用しました。しかし、実際に投稿されている添付されていない画像が約 15,000 あることがわかりました。プラグインは投稿自体に画像を添付しませんでした。

何をすべきか、これを解決する方法がわかりません。私はそれを手動で行うことはできません。それには何年もかかります。画像をスキャンして、それぞれの投稿に再添付する方法はありますか?

更新:Sergiu が言及した以下のプラグインを実行した後。レポートには次の情報が表示されます。

ここに画像の説明を入力

そのため、投稿内の画像をピックアップしているようです。どういうわけかその投稿IDに添付できることを願っています。コードを変更する方法はありますか?

以下のプラグインで。525行目でコードを削除しました:

if (  stripos( $img, $path ) !== false ) {
                    $response .= 'Img already in media library<br>';
                    continue;
                }

これで画像が添付されます!最後の 1 つの問題は、新しいコピーを作成することです。それらを再ダウンロードしない方法が見つかりません。私はそれらを添付することを好みます。

これが、コードの完全な部分が責任を負っていると私が思うものです。変更を提案してください:

http://pastebin.com/ePERuGjt#

/**
 * Extracts all images in content adds to media library if external and updates content with new url
 * @param object $post The post object
 * @return array|bool Post id and images converted on success false if no images found in source
 */
function extract_multi( $post ) {
        $html = $post->post_content;
        $path = wp_upload_dir();
        $path = $path['baseurl'];
        $error = 0;
        $response = '';
        if ( stripos( $html, '<img' ) !== false ) {

                $regex = '#<\s*img [^\>]*src\s*=\s*(["\'])(.*?)\1#im';
                preg_match_all( $regex, $html, $matches );

                if ( is_array( $matches ) && ! empty( $matches ) ) {
                        $new = array();
                        $old = array();
                        foreach( $matches[2] as $img ) {
                                /** Compare image source against upload directory to prevent adding same attachment multiple times  */



                                $tmp = download_url( $img );

                                preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $img, $matches);
                                $file_array['name'] = basename($matches[0]);
                                $file_array['tmp_name'] = $tmp;
                                // If error storing temporarily, unlink
                if ( is_wp_error( $tmp ) ) {
                    @unlink($file_array['tmp_name']);
                    $file_array['tmp_name'] = '';
                        continue;
                }

                                $id = media_handle_sideload( $file_array, $post->ID );

                                if ( ! is_wp_error( $id ) ) {
                                        $url  = wp_get_attachment_url( $id );
                                        $thumb = wp_get_attachment_thumb_url( $id );
                                        array_push( $new, $url );
                                        array_push( $old, $img );

                                        $response .= '<p><a href="'. wp_nonce_url( get_edit_post_link( $id, true ) ).'" title="edit-image"><img src="'.esc_url( $thumb ).'" style="max-width:100px;" /></a><br>';
                                        $response .= '<a href="'. wp_nonce_url( get_edit_post_link( $id, true ) ).'" >'.get_the_title( $id ). '</a>  Imported and attached</p>';
                                } else {
                                        $response .= '<span style="color:red">Upload Error: Could not upload image. Check for malformed img src url</span><br>';
                                        $error ++;
                                }
                        }
                        if( !empty( $new ) ) {
                                $content = str_ireplace( $old, $new, $html );
                                $post_args = array( 'ID' => $post->ID, 'post_content' => $content, );
                                if ( !empty( $content ) )
                                        $post_id = wp_update_post( $post_args );
                                        if ( isset( $post_id ) )
                                                $response .= 'Post Content updated for Post: '.esc_html( $post->post_title).'<br>';
                                        return array( 'error' => $error, 'response' => $response );
                        } else
                                 $response .= 'No external images found for ' . esc_html( $post->post_title ) . '<br>';
                                return array ( 'error' => $error, 'response' => $response );

                } else {
                         $response .= 'Error processing images for '. esc_html( $post->post_title ) .'<br>';
                        return array ( 'error' => $error, 'response' => $response );
                  }
        } else {
                 $response .= 'No images found for ' . esc_html( $post->post_title) . '<br>';
                return array ( 'error' => $error, 'response' => $response );
          }
}
4

3 に答える 3

2

私はこの問題の元の投稿者です。数年後、私はこの古い投稿に出くわしました。将来誰かに役立つことを期待して、解決策を掘り下げました。

これは変更された media-tools.php ファイルです。

https://pastebin.com/8iUT78aP

Media Tools プラグインをインストールするだけです: https://github.com/c3mdigital/media-tools-for-WordPress

ペーストビンをmedia-tools.phpで上書きします

次に、プラグインは実際に、画像を再ダウンロードすることなく、添付されていないすべてのメディアを適切な投稿に再添付します。

この問題は解決するのが純粋な地獄であるため、これが誰かの助けになることを願っています。

于 2017-04-11T06:50:20.083 に答える
1

このプラグインは、まさにあなたの問題を扱う機能を実装しているようです。

于 2013-08-24T18:01:18.893 に答える