آگاه‌سازی‌ها
پاک‌کردن همه

ویرایش افزونه auto upload

صفحه 1 / 3

ارسال‌: 25
 arz
شروع کننده موضوع
(@arz)
Eminent Member
عضو شده: 9 سال قبل

سلام.این افزونه که توسط کاربرای ایرانی نوشته شده عکس هایی که از سایت های
دیگه کپی می کنیم رو توی خود سایت اپلود می کنه و آدرسش رو جایزین می کنه.

من با این افزونه یه مشکل کوچیک دارم که فکر کنم با ویرایش کردن حل بشه!

من دایرکتوری آپلود فایل توی وردپرس رو به ساب دامین عوض کردم.این افزونه
به طور کاملا صحیح عکس رو توی همون دایرکتوری اپلود می کنه اما آدرس عکس
توی مطلب رو به این صورت جایگزین می کنه:
برای مثال اسم عکس book.png هست و عکس توی آدرس آپلود شده اما بعد از انتشار مطلب آدرس رو به این صورت جایگزین می کنه:
/2013/05/book.png

چطوری میشه به صورتی کرد که موقع جایگزینی آدرس به این صورت بکنه:

اینم کد محتوای افزونه:

get_var( "SELECT post_content FROM wp_posts WHERE ID='$post_id' LIMIT 1" );

        $images_url = $this->wp_get_images_url($content);
        
        if($images_url) {
            foreach ($images_url as $image_url) {
                if(!$this->wp_is_myurl($image_url) && $new_image_url = $this->wp_save_image($image_url, $post_id)) {
                    $new_images_url[] = $new_image_url;
                    unset($new_image_url);
                } else {
                    $new_images_url[] = $image_url;
                }
            }
            
            $total = count($new_images_url);
            
            for ($i = 0; $i  $post_id, 'post_content' => $content) );
            add_action( 'save_post', array($this, 'auto_upload') );
        }
    }

    /**
     * Detect url of images which exists in content
     *
     * @param $content
     * @return array of urls or false
     */
    public function wp_get_images_url( $content ) {
        preg_match_all('/]*src="(""|')([^(?|#|"|')]*)(?|#)?[^("|')]*("|')[^>]*/>/', $content, $urls, PREG_SET_ORDER);
        
        if(is_array($urls)) {
            foreach ($urls as $url)
                $images_url[] = $url[2];
        }

        if (is_array($images_url)) {
            $images_url = array_unique($images_url);
            rsort($images_url);
        }
        
        return isset($images_url) ? $images_url : false;
    }

    /**
     * Check url is internal or external
     *
     * @param $url
     * @return true or false
     */
    public function wp_is_myurl( $url ) {
        $url = $this->wp_get_base_url($url);
        $myurl = $this->wp_get_base_url(get_bloginfo('url'));
        
        switch ($url) {    
            case NULL:
            case $myurl:
                return true;
                break;

            default:
                return false;
                break;
        }
    }

    /**
     * Give a $url and return Base of a $url
     *
     * @param $url
     * @return base of $url without wwww
     */
    public function wp_get_base_url( $url ) {
        $url = parse_url($url, PHP_URL_HOST); // Give base URL
        $temp = preg_split('/^(www(2|3)?.)/i', $url, -1, PREG_SPLIT_NO_EMPTY); // Delete www from URL
        
        return $temp[0];
    }

    /**
     * Save image on wp_upload_dir
     * Add image to Media Library and attach to post
     *
     * @param $url
     * @param $post_id
     * @return new $url or false
     */
    public function wp_save_image($url, $post_id = 0) {
        $image_name = basename($url);
        
        $upload_dir = wp_upload_dir(date('Y/m'));
        $path = $upload_dir['path'] . '/' . $image_name;
        $new_image_url = $upload_dir['url'] . '/' . rawurlencode($image_name);
        $file_exists = true;
        $i = 0;
        
        while ( $file_exists ) {
            if ( file_exists($path) ) {
                if ( $this->wp_get_exfilesize($url) == filesize($path) ) {
                    return $new_image_url;
                } else {
                    $i++;
                    $path = $upload_dir['path'] . '/' . $i . '_' . $image_name;    
                    $new_image_url = $upload_dir['url'] . '/' . $i . '_' . $image_name;
                }
            } else {
                $file_exists = false;
            }
        }
        
        if(function_exists('curl_init')) {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
            $data = curl_exec($ch);
            curl_close($ch);
            file_put_contents($path, $data);
            
            $wp_filetype = wp_check_filetype($new_image_url);
            $attachment = array(
                'guid' => $new_image_url, 
                'post_mime_type' => $wp_filetype['type'],
                'post_title' => preg_replace('/.[^.]+$/', '', basename($new_image_url)),
                'post_content' => '',
                'post_status' => 'inherit'
            );
            wp_insert_attachment($attachment, $path, $post_id);
            
            return $new_image_url;
        } else {
            return false;
        }
    }

    /**
     * return size of external file
     *
     * @param $file
     * @return $size
     */
    public function wp_get_exfilesize( $file ) {
        $ch = curl_init($file);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
        $data = curl_exec($ch);
        curl_close($ch);

        if (preg_match('/Content-Length: (d+)/', $data, $matches))
            return $contentLength = (int)$matches[1];
        else
            return false;
    }

}

$wp_auto_upload = new wp_auto_upload();

11 پاسخ
ارسال‌: 3597
Admin
(@admin)
عضو
عضو شده: 10 سال قبل

اصل پيغام خطا و فايل ارور لاگ را براي بررسي قرار دهيد

پاسخ
ارسال‌: 25
 arz
شروع کننده موضوع
(@arz)
Eminent Member
عضو شده: 9 سال قبل

پیغام خطا نمیده.درست کار می کنه فقط چون من دایرکتوری آپلود وردپرس رو به img تغییر دادم این افزونه هم به درستی توی اون دایرکتوری آپلود می کنه فقط موقع جایگزین کردن آدرس جدید عکس با آدرس قبلیش٬اون رو به حالت دایرکتوری پیشفرض وردپرس جایگزین می کنه که در سایت من با ارور روبرو میشه
من میخوام آدرس عکس ها رو به صورت جایگزین کنه

پاسخ
ارسال‌: 4
(@sazekhamosh)
New Member
عضو شده: 9 سال قبل

سلام
بجاي افزونه بالا از اين افزونه استفاده كن بدون هيچ مشكل و دستكاري هر عكسي از سايت ديگه كپي و در سايت خودت آپلود ميكنه. فقط نصبش كن و لذتش ببر
نام افزونه: Add Linked Images To Gallery

پاسخ
ارسال‌: 25
 arz
شروع کننده موضوع
(@arz)
Eminent Member
عضو شده: 9 سال قبل

همین افزونه رو استفاده کردم.موقعی که از دایرکتوری پیشفرض استفاده می کردم بدون ایجاد تصویر اضافی کار می کرد اما وقتی دایرکتوری رو عوض کردم از هر عکس نزدیک ۱۰۰ تا کپی می گرفت و جلوش فقط یک قرار می داد!
اگه بشه همون افزونه ای رو که دادم رو ویرایش کنید
فکر کنم باید توی این خط تغییر داد.چون من چند بار ویرایش کردم اون خط رو و یه تغییراتی توی جایگزین کردن ادرس اتفاق افتاد

$total = count($new_images_url);
			
			for ($i = 0; $i <= $total-1; $i++) {
				$new_images_url[$i] = parse_url($new_images_url[$i]);
				$content = preg_replace('/'. preg_quote($images_url[$i], '/') .'/', $new_images_url[$i]['path'], $content);
			}
پاسخ
صفحه 1 / 3
اشتراک: