从“上传”的任意子文件夹中调用图片

时间:2012-02-20 11:40:39

标签: php javascript jquery wordpress

是否有可能要求Wordpress查看所有“上传”文件夹,而不仅仅是特定的文件夹?正如您将从下面的脚本中看到的那样,它正在寻找具有相同名称和特定前缀的图像......

'wp-content/uploads/2012/01/'

我希望它像... ...

'wp-content/uploads/*/*/'

就像它一样,它不适用于其他任何东西,例如,如果图像文件有前缀......

'wp-content/uploads/2012/02/'

我的剧本是......

$(document).ready(function(){


$(".gigthumb").each(function() {
        var a = $(this).parent();
        a.attr("href", a.prev().attr("href"));
    });



$('img.gigthumb').each(function(){
var foo = $(this).parent().attr('href').split('/').pop();
$(this).attr('src','wp-content/uploads/2012/01/' + foo + '.jpg');
});


$('img.gigthumb').error(function() {
  $(this).attr('src','wp-content/plugins/gigpress/images/placeholder.gif');
});

希望这是有道理的。很难解释这个问题。

2 个答案:

答案 0 :(得分:6)

这样做非常麻烦而且速度非常慢。您必须从服务器端提供所有可能的路径,然后使用Ajax请求或其他方式遍历它们。这不是一个好的解决方案。

通过更改Wordpress组织上传的方式,可以更轻松地解决问题。该设置位于设置 - > 媒体

enter image description here

但是,我不知道如果您在已经上传的现有安装上执行此操作会发生什么。您可能需要重新组织/重新上传所有帖子的内容才能使用此内容(我非常确定WP不会自动重新组织。)使用风险并自行备份。

答案 1 :(得分:0)

我认为这样可以解决问题。 将请求发布到服务器(通过AJAX)。服务器返回所有文件的路径,使用逗号将它们分开,一旦返回客户端,jQuery就会在逗号中分割此数据字符串并将完整路径放入数组中。完成后,您可以简单地遍历数组并为数组的每个元素创建一个图像元素,或者做任何你想做的事情。

PHP文件

<?php
function ListFiles($dir) {

    if($dh = opendir($dir)) {

        $files = Array();
        $inner_files = Array();

        while($file = readdir($dh)) {
            if($file != "." && $file != ".." && $file[0] != '.') {
                if(is_dir($dir . "/" . $file)) {
                    $inner_files = ListFiles($dir . "/" . $file);
                    if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
                } else {
                    array_push($files, $dir . "/" . $file);
                }
            }
        }

        closedir($dh);
        return $files;
    }
}


foreach (ListFiles('wp-content/uploads') as $key=>$file){
    echo $file .",";
}
?>

消息来源:http://tycoontalk.freelancer.com/php-forum/41811-list-files-in-directory-sub-directories.html#post202723

jQuery的:

  $(function(){
        $.post("getallfiles.php",{/*post data to server if needed*/}, function(data){
          //Splitting with comma expecting it not to be in filenames and directory names.
          var uploads = data.split(','); 
          //uploads[0] would return the first image's path if I'm correct.
        })
  });

我认为这很有效,但我没有尝试过,你需要做的就是循环上传数组并用imagepath做你想做的事。