Imagemagick和wordpress脚本生成两个图像

时间:2012-01-09 18:29:22

标签: imagemagick wordpress

我正在使用imagemagick处理存储在wordpress自定义字段中的网址中的图片。该脚本实际上做了它的意思,除了一件事,它每次都处理一个额外的图像。代码如下......

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php
    $url1 = '/home/sites/public_html/mysite/wp-content/themes/mytheme/images/';
    $imagefile = get_post_meta($post->ID, 'image_url', $single = true);
    $file = basename($imagefile);
    $location = '/usr/bin/convert';
    $command = '-resize 560x';
    $convert = $location . ' ' .$command . ' ' . $imagefile . ' ' . $url1 . $file;
    exec ($convert);    
?>

<?php endwhile; ?>
<?php endif; ?>

它创建的额外图像每次都是相同的,并且是我的帖子列表中的第一个帖子,我不确定它是第一个帖子是否相关。

我也不确定是否是导致问题或wordpress的imagemagick,我使用的imagemagick命令非常简单,所以我倾向于wordpress。

有人可以提出任何建议吗?

更新

我一直在玩,并且发现这个问题似乎只发生在一些帖子上。我已经检查了SQL数据库,并将它们与未受影响的数据库进行了比较,看不到任何明显的数据。

更新2 为了使事情变得更奇怪,我在本地开发服务器上重复了这个设置,我无法复制它。一切正常!如果我在共享主机上执行相同的操作,则问题会再次出现。这让我觉得必须有某个配置导致它。

如果我执行以下代码,则在共享主机上,它可以正常工作....

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php
    $url1 = '/home/sites/public_html/mysite/wp-content/themes/mytheme/images/';
    $imagefile = 'http://www.mydomain.com/images/myimage.jpg';
    $file = basename($imagefile);
    $location = '/usr/bin/convert';
    $command = '-resize 560x';
    $convert = $location . ' ' .$command . ' ' . $imagefile . ' ' . $url1 . $file;
    exec ($convert);   
?>

<?php endwhile; ?>
<?php endif; ?>

但如果我恢复到我的原始代码,其中图像URL由wordpress get_post_meta命令生成,那么我得到额外的图像。

更新3 使用wordpress插件BlackBox,我已经能够找到更多关于发生了什么的信息,日志给我这个信息..

0.2501 [ms] SELECT * FROM wp_users WHERE user_login = 'admin';
0.1330 [ms] SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE user_id IN (1);
0.0739 [ms] SELECT option_value FROM wp_options WHERE option_name = 'theme_switched' LIMIT 1;
0.1280 [ms] SELECT ID, post_name, post_parent FROM wp_posts WHERE post_name IN ('uncategorized','my-test-post-75') AND (post_type = 'page' OR post_type = 'attachment');
0.1481 [ms] SELECT wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_name = 'my-test-post-75' AND wp_posts.post_type = 'post'  ORDER BY wp_posts.post_date DESC ;
0.1359 [ms] SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format') AND tr.object_id IN (215) ORDER BY t.name ASC;
0.1402 [ms] SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (215);
0.1140 [ms] SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category') AND t.slug = 'uncategorized' ORDER BY t.name ASC ;
0.1018 [ms] SELECT tr.term_taxonomy_id FROM wp_term_relationships AS tr INNER JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id IN (215) AND tt.taxonomy IN ('category') ORDER BY tr.term_taxonomy_id ASC;
0.1259 [ms] SELECT p.* FROM wp_posts AS p  WHERE p.post_date < '2011-06-07 20:40:34' AND p.post_type = 'post' AND p.post_status = 'publish'  ORDER BY p.post_date DESC LIMIT 1;
0.0758 [ms] SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (204) ORDER BY t.name ASC;
0.0651 [ms] SELECT p.* FROM wp_posts AS p  WHERE p.post_date > '2011-06-07 20:40:34' AND p.post_type = 'post' AND p.post_status = 'publish'  ORDER BY p.post_date ASC LIMIT 1;
0.0849 [ms] SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (251) ORDER BY t.name ASC;

这个新信息是否揭示了可能发生的事情?

2 个答案:

答案 0 :(得分:1)

我对于imagemagick没什么经验,但是我经历了类似的情况,使用WordPress核心功能进行大小调整,它会影响添加的新图像,但不会影响在新图像尺寸代码之前添加的旧图像。 / p>

有一个很棒的小工具插件叫做“再生缩略图”,它为我排序了这个,

你可以在wordpress codex中找到它。

http://wordpress.org/extend/plugins/regenerate-thumbnails/

答案 1 :(得分:0)

您正在寻找的所有功能目前都在wordpress核心中提供 - 无需添加您自己的imagemagick功能:

你主题的functions.php中的

if ( function_exists( 'add_image_size' ) ) { 
    add_image_size( 'custom-size', 560, 560, false ); 
    // or set last option to true for cropping
}

(更多信息:http://codex.wordpress.org/Function_Reference/add_image_size

在page.php或其他主题文件中

<?php echo get_the_post_thumbnail($page->ID, 'custom-size'); ?>

(更多信息:http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail

现在将图片添加到“设置精选图片”下的帖子或页面,然后跳过使用自定义字段和post_get_meta。