【问题标题】:Display Random Image from WP Directory显示 WP 目录中的随机图像
【发布时间】:2021-01-03 10:27:12
【问题描述】:

我用过一个函数

 
/*
    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!";
    }
 
}
 
?>

从特定的 wordpress 目录中提取随机图像。我可以成功调用一个随机图像文件,但它不显示,只显示图像文件名和损坏的图像图标。

我在教程中用来显示图像的代码是&lt;?php echo Qassim_Random_File("my-folder-name"); // display random image! ?&gt;

截至本周,我是 php 的新手,而且总体上是一个相当新手的编码器(知道一些基础知识),所以我真的很难过。我已经被堆栈溢出的其他可能解决方案愚弄了,但本教程是我唯一能够接近工作的东西。如果有人能发现问题,非常感谢!

这显示在 HTML 检查器中:

<div class="elementor-widget-container">
    <h5>call</h5>
    <a href="wp-content/uploads/H-PH-MA-Greyscale/image_2.jpg" target="_blank" title="image_2.jpg">
        <img src="wp-content/uploads/H-PH-MA-Greyscale/image_2.jpg" alt="image_2.jpg">
    </a>
</div>

【问题讨论】:

  • edit您的问题包含生成链接的代码,因为这就是问题所在。所有相关代码都必须包含在问题本身中,因为外部链接可能会随着时间的推移而中断或更改,并使问题对未来遇到相同问题的用户没有帮助:)
  • 谢谢抱歉!完成。
  • 首先我们需要做一些调试,看看问题出在哪里,这样我们就可以找出需要修复的 what :) 让我们从 HTML 显示的内容开始检查损坏的图像时的元素检查器?这将告诉我们链接是否错误或图像标签格式错误。
  • 是的!有效! :-) 和一个非常明确的答案。我非常感谢您的帮助。哦,是的,我不想在这里解决这些其他问题,只是想确认在这段代码的上下文中这样做是可能/有意义的。如果我遇到困难,我会尝试自己解决这个问题并发布一个新问题。只是想提高效率而不是追逐我的尾巴。再次感谢您的帮助!
  • 只是想让您知道,通过反复试验,我能够拼凑出一些看起来完全符合我需要的东西! :-) 再次感谢!

标签: php wordpress image random


【解决方案1】:

你只需要替换这一行:

$file_link = $folder_path . "/" . $random_file;

...用这个:

 $file_link =  get_site_url(null, $folder_path . "/" . $random_file);

出了什么问题?

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

这是一个相对 URL,但我们需要一个绝对 URL,这样无论在哪里调用它都能正常工作。我们还需要包含 站点 URL,以便 wp-content 的路径正确。 (注意:site URL and home URL can be different - 站点 URL 始终指向 WP 文件的位置)。

另一个问题是站点 URL 上的尾部斜杠(或缺少斜杠)。 get_site_urlget_home_url 在 URL 中添加尾部斜杠,因此您需要自己添加它如果它不包含在文件路径中。

那么我们该如何解决呢?

使用get_site_url function为WP文件添加了正确的路径,它还允许我们将文件路径不带前面的斜线作为参数传递,它会添加斜线仅在需要时才在路径上。

【讨论】:

    【解决方案2】:

    代码看起来很简单,如果文件夹存在并且它有超过 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>';
            }
    

    注意 get_home_url() 以构建您的 所需的真实 URL

    【讨论】:

    • 嗯。很奇怪。谢谢,但是当我按照您的建议更改此代码时,仅以更低的一致速度(通常非常慢)产生相同的结果。当我将其改回时,文件被可靠且快速地获取......但不显示。弹出的 HTML 如下&lt;div class="elementor-widget-container"&gt; &lt;h5&gt;call&lt;/h5&gt;&lt;a href="wp-content/uploads/H-PH-MA-Greyscale/image_2.jpg" target="_blank" title="image_2.jpg"&gt;&lt;img src="wp-content/uploads/H-PH-MA-Greyscale/image_2.jpg" alt="image_2.jpg"&gt;&lt;/a&gt; &lt;/div&gt;,我的屏幕上显示的都是“call image_2.jpg”
    • 您确定文件存在且文件权限设置正确吗?网址是相对的,所以看起来不错
    • 谢谢。我确信该文件存在,因为我可以通过我的媒体库或 FTP 访问它并查看文件夹路径并查看图像。我猜它可能是文件权限设置?尽管它已成功进入文件夹并获取随机图像的名称,但这是否表明这不是文件权限问题?我对这个领域一无所知,所以也许我错了。
    • 哦,等等,wp-content 之前是不是少了一个“/”?也许就是这样
    • 不,我尝试了所有变体。它实际上只在 wp-content 之前没有“/”工作。同样,问题似乎在于显示,而不是获取。它正在从正确的目录中找到一个随机图像,看起来它甚至填充到了 html 中,对吗?由于某种原因,它只是没有出现。由于您似乎在确认 php 看起来不错,也许这与我正在使用的页面构建器有关?
    猜你喜欢
    • 2019-04-16
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多