#php #wordpress #domdocument #feedburner
#php #wordpress #domdocument #feedburner
Вопрос:
Я хотел бы обновить the_content_rss
WordPress, чтобы он соответствовал feedburner. Ему нужно будет найти каждый тег img, посмотреть, есть ли у него заданные ширина и высота. Если они больше 600, их следует уменьшить до 600. Если они не установлены, то ширина должна быть установлена на 600. Я думал об использовании некоторого кода здесь, чтобы сделать это, но я немного застрял, я был бы признателен за помощь в ее исправлении.
Вопросы:
- Работает ли это?
-
Как он может определить, равна ли ширина нулю, и в каком случае ее добавить?
<?php function feedburner_img_resize($the_content) { // Create a new istance of DOMDocument $post = new DOMDocument(); // Load $the_content as HTML $post->loadHTML($the_content); // Look up for all the <img> tags. $imgs = $post->getElementsByTagName('img'); // Iteration time foreach( $imgs as $img ) { // if width is smaller than 600 - no need to continue $width = $img->getAttribute('width'); if( $width < 600 ) continue; $img->removeAttribute('width'); $img->setAttribute('width', 600); $img->removeAttribute('height'); // so the image is not distorted }; return $post->saveHTML(); } add_filter('the_content_rss', 'feedburner_img_resize'); ?>
Комментарии:
1. рассмотрите возможность использования javascript?
2. Мне нужно изменить его с помощью php, чтобы обновить add_filter…
3. я не очень хорошо знаком с WordPress, но вы можете сделать ajax-запрос, а затем передать его в php и add_filter()
Ответ №1:
В function.php добавьте следующую функцию:
function aq_resize($url,$width,$height=null,$crop=null,$single=true){
$up_info=wp_upload_dir();
$up_dir=$up_info['basedir'];
$up_url=$up_info['baseurl'];
if (strpos($url,home_url()) === false){return false;}
$rel_path = str_replace( $up_url, '', $url);
$img_path = $up_dir . $rel_path;
if (!file_exists($img_path) OR ! getimagesize($img_path)){return false;}
$info = pathinfo($img_path);
$ext = $info['extension'];
list($orig_w,$orig_h) = getimagesize($img_path);
$dims = image_resize_dimensions($orig_w, $orig_h, $width, $height, $crop);
$dst_w = $dims['4'];
$dst_h = $dims['5'];
$suffix="{$dst_w}x{$dst_h}";
$dstrel=str_replace('.'.$ext,'',$rel_path);
$dest="{$up_dir}{$dstrel}-{$suffix}.{$ext}";
if($width >= $orig_w) {
if(!$dst_h) :
$img_url=$url;
$dst_w=$orig_w;
$dst_h=$orig_h;
else :
if(file_exists($dest) amp;amp; getimagesize($dest)) {
$img_url="{$up_url}{$dstrel}-{$suffix}.{$ext}";
}
else {
$resized=resize_image($img_path,$width,$height,$crop);
$resized_rel=str_replace($up_dir,'',$resized);
$img_url=$up_url.$resized_rel;
}
endif;
}
elseif(file_exists($dest) amp;amp; getimagesize($dest)) {
$img_url="{$up_url}{$dstrel}-{$suffix}.{$ext}";
}
else {
$resized=resize_image($img_path,$width,$height,$crop);
$resized_rel=str_replace($up_dir,'',$resized);
$img_url=$up_url.$resized_rel;
}
if($single) {
$image = $img_url;
} else {
$image = array (
0 => $img_url,
1 => $dst_w,
2 => $dst_h
);
}
return $image;
}
В том месте, где требуется вывод миниатюр, напишите следующее, изменив размер миниатюр справа для вас:
<img src="<?php echo aq_resize(first_img(),180,130,true)?>