WordPress - PHP列出PDF文件

5

我写了这段代码:

function userfunc_get_file_links($sub_folder) {
    if ( is_user_logged_in() ) {
        $directory = get_stylesheet_directory()."/files/".$sub_folder;
        $scanned_directory = array_diff(scandir($directory), array('..', '.'));
        echo "<ul class='support_links'>";
        foreach ($scanned_directory as $key => $value) {
            echo "<li><a href='files/".$value."'>".$value."</a></li>";
        }
        echo "</ul>";
    }
}

我已将其添加到我的功能文件中,可以通过页面模板成功地应用它,并显示文件链接列表。

(模板文件):

<?php
/*
Template Name: supportpage
*/
?>
<?php get_header(); the_post(); ?>
    <div id="content" class="inner-page">
        <div class="main-content">
            <div class="brack-cum">
                <div class="inner-small">
                <?php 
                   if (function_exists('wp_bac_breadcrumb')) {wp_bac_breadcrumb();}
                ?>
                </div>
            </div>
            <div class="title">
                <div class="inner-small">
                    <h2><?php the_title(); ?></h2>
                </div>
            </div>
            <div class="content-page inner-small">
                <?php
                    the_content(); 
                ?>
            </div>
        </div>
    <?php get_footer(); }?>

然而,当我点击它们时,会出现404错误,我无法弄清楚原因。我尝试重置永久链接并检查FTP路径(它是100%正确的),但问题仍然存在。
如果我尝试将我的/files/文件夹移动到服务器的根目录中,使用以下命令:
$directory = home_url()."/htdocs/files".$sub_folder;

这段代码返回:

警告:scandir (http://localhost/wordpress/files/application_notes): 无法打开目录:在C:\ xampp \ apps \ wordpress \ htdocs \ wp-content \ themes \ twentythirteen-child \ user_functions.php的第5行未实现

这些文件大多数是PDF文件(“how_to_do_stuff.pdf”等)。

有什么想法我接下来可以采取哪些步骤吗?

编辑1:使用原始代码显示链接但在单击时返回WordPress 404:

var_dump($directory)

string(93) "C:\xampp\apps\wordpress\htdocs/wp-content/themes/twentythirteen-child/files/application_notes"

var_dump($scanned_directory)

array(3) {
  [2]=>
  string(9) "test1.pdf"
  [3]=>
  string(9) "test2.pdf"
  [4]=>
  string(9) "test3.pdf"
}

用产生警告的代码:

var_dump($directory)

进行调试
string(57) "http://localhost/wordpress/htdocs/files/application_notes"

var_dump($scanned_directory)

NULL

转储$directory和$scanned_directory,你会得到什么? - Mihai
@Mihai 编辑以显示 - Ridai
那个目录对我来说看起来很奇怪,它在Windows中使用\,然后在Linux中切换到/。 - Mihai
你把URL和文件路径搞混了... - rnevius
我原以为使用WordPress函数“get_stylesheet_directory_uri()”可以获取文件路径链接到我的文件,但是我不确定。但是还是出现了同样的警告。 - Ridai
1个回答

4

你已经接近成功了...但如果你想让人们能够点击链接,你需要输出URL:

function userfunc_get_file_links($sub_folder) {
    if ( is_user_logged_in() ) {
        $directory = get_stylesheet_directory()."/files/".$sub_folder;
        $scanned_directory = array_diff(scandir($directory), array('..', '.'));
        echo "<ul class='support_links'>";
        foreach ($scanned_directory as $key => $value) {
            echo "<li><a href='".get_stylesheet_directory_uri() . "/files/" . $sub_folder . "/" . $value . "'>".$value."</a></li>";
        }
        echo "</ul>";
    }
}

以下是每个部分应该执行的内容:

这里是每个部件的功能:

get_stylesheet_directory_uri() . 
// http://example.com/wp-content/themes/yourtheme

'/files/' . $sub_folder . '/' . $value
// /files/subfolder/filename.txt

我简直不敢相信我错过了这么明显的东西!!非常感谢,非常感激。 - Ridai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接