Php 显示WP目录中的随机图像

Php 显示WP目录中的随机图像,php,wordpress,image,random,Php,Wordpress,Image,Random,我使用了一个函数 /* Random File Function Written By: Qassim Hassan Website: wp-time.com Twitter: @QQQHZ */ function Qassim_Random_File($folder_path = null){ if( !empty($folder_path) ){ // if the folder path is not empty $fil

我使用了一个函数

 
/*
    Random File Function
    Written By: Qassim Hassan
    Website: wp-time.com
    Twitter: @QQQHZ
*/
 
function Qassim_Random_File($folder_path = null){
 
    if( !empty($folder_path) ){ // if the folder path is not empty
        $files_array = scandir($folder_path);
        $count = count($files_array);
 
        if( $count > 2 ){ // if has files in the folder
            $minus = $count - 1;
            $random = rand(2, $minus);
            $random_file = $files_array[$random]; // random file, result will be for example: image.png
            $file_link = $folder_path . "/" . $random_file; // file link, result will be for example: your-folder-path/image.png
            return '<a href="'.$file_link.'" target="_blank" title="'.$random_file.'"><img src="'.$file_link.'" alt="'.$random_file.'"></a>';
        }
 
        else{
            return "The folder is empty!";
        }
    }
 
    else{
        return "Please enter folder path!";
    }
 
}
 
?>

/*
随机文件函数
作者:卡西姆·哈桑
网站:wp-time.com
推特:@qqhz
*/
函数Qassim\u Random\u File($folder\u path=null){
如果(!empty($folder_path)){//如果文件夹路径不是空的
$files\u array=scandir($folder\u path);
$count=count($files\u数组);
如果($count>2){//if文件夹中有文件
$减=$count-1;
$random=兰特(2美元减去);
$random_file=$files_数组[$random];//随机文件,结果将是例如:image.png
$file\u link=$folder\u path.“/”$random\u file;//文件链接,结果将是例如:您的文件夹路径/image.png
返回“”;
}
否则{
返回“文件夹为空!”;
}
}
否则{
返回“请输入文件夹路径!”;
}
}
?>
从特定wordpress目录中随机抽取图像。我可以成功调用一个随机图像文件,但它不显示,只显示图像文件名和一个损坏的图像图标

我在教程中使用的显示图像的代码是

从本周开始,我对php是一个全新的认识,并且是一个相当新手的程序员(知道一些基础知识),所以我真的很困惑。我已经愚弄了堆栈溢出的其他可能的解决方案,但本教程是我唯一能够接近工作的东西。如果有人能发现问题,非常感谢

这将显示在HTML检查器中:


呼叫

代码看起来很简单,如果文件夹存在并且有2个以上的文件(使用scandir时考虑“.”和“.”以及文件),那么您应该能够看到一些东西。为该函数调用生成的HTML代码是什么

请注意,您正在使用的代码使用物理路径构建文件url,这是行不通的。您应该修复此部分:

if( $count > 2 ){ // if has files in the folder
            $minus = $count - 1;
            $random = rand(2, $minus);
            $random_file = $files_array[$random]; // random file, result will be for example: image.png
            $file_link = get_home_url().$folder_path . "/" . $random_file; // file link, result will be for example: your-folder-path/image.png
            return '<a href="'.$file_link.'" target="_blank" title="'.$random_file.'"><img src="'.$file_link.'" alt="'.$random_file.'"></a>';
        }
if($count>2){//if文件夹中有文件
$减=$count-1;
$random=兰特(2美元减去);
$random_file=$files_数组[$random];//随机文件,结果将是例如:image.png
$file\u link=get\u home\u url().$folder\u path.“/”$random\u file;//文件链接,结果将是例如:您的文件夹路径/image.png
返回“”;
}

请注意get\u home\u url()要构建您的所需的真实url,只需替换此行:

$file_link = $folder_path . "/" . $random_file;
…对于这一个:

 $file_link =  get_site_url(null, $folder_path . "/" . $random_file);
出了什么问题?

scandir
返回的是物理文件路径,而不是文件的url-我们可以确认这是我们查看它为
$random\u file
返回的一个值,例如
wp content/uploads/H-PH-MA-Greyscale

这是一个相对的URL,但我们需要一个绝对的URL,这样无论在哪里调用它都可以工作。我们还需要包括站点URL,以便
wp内容的路径是正确的。(注意:-站点URL始终指向WP文件的位置)

另一个问题是站点URL上的尾随斜杠(或缺少斜杠)
get\u site\u url
get\u home\u url
不向url添加尾随斜杠,因此如果文件路径中不包含斜杠,则需要自己添加斜杠

那么我们如何解决这个问题呢?


使用添加到WP文件的正确路径,它还允许我们将文件路径与前面没有斜杠的参数一起传递给它,并且它将仅在需要时在路径上添加斜杠。

Hmm。非常奇怪。谢谢你,但是当我按照你的建议修改代码时,同样的结果只会以更少的恒定速度产生(通常非常慢)。当我把它改回来时,文件会被可靠而快速地获取。。。但没有显示。弹出的HTML如下所示
call
,我的屏幕上显示的是“call image_2.jpg”。您确定文件存在并且文件权限设置正确吗?url是相对的,所以看起来不错。谢谢。我确信该文件存在,因为我可以通过媒体库或FTP访问它,查看文件夹路径并查看图像。我想可能是文件权限设置吧?虽然它成功地进入了文件夹并获取了随机图像的名称,但这不意味着它不是一个文件权限问题吗?我对这方面一无所知,所以可能我错了。哦,等等,在wp内容之前缺少“/”吗?也许只是不,我尝试了所有的变化。它实际上只在wp内容之前使用“/”。同样,问题似乎在于显示,而不是抓取。它从正确的目录中查找一个随机图像,看起来它甚至正在填充到html中,对吗?出于某种原因,它只是没有出现。由于您似乎正在确认php看起来很好,可能与我使用的pagebuilder有关?请将您的问题包括生成链接的代码,因为这就是问题所在。所有相关代码都必须包含在问题本身中,因为外部链接可能会随着时间的推移而中断或更改,从而使问题对具有相同问题的未来用户毫无帮助:)谢谢,抱歉!完成。首先我们需要做一些调试,看看问题出在哪里,这样我们就可以找出需要解决的问题:)让我们从检查损坏的图像时元素检查器中显示的HTML开始吧?这将告诉我们,如果链接是错误的或图像标签是错误的,例如。是的!成功了!:-)答案非常清楚。我真的很感谢你的帮助。哦,是的,我不想在这里解决这些其他问题,只是想确认在这段代码的上下文中这样做是可能的/有意义的。我会试着自己解决这个问题,如果我被卡住了,我会发布一个新的问题。只是想提高效率