包含PDF文件的自定义文件夹(不在WP库中)-为每个文件创建URL

时间:2021-10-25 作者:billato

我有一个文件夹我的网站。com/wp-content/customUploads,其中包含数百个pdf文件。

此时,查看pdf文件的url是例如:mywebsite。com/wp-content/customUploads/myfile。pdf格式

我的目标是为每个PDF文件创建一个url,如:mywebsite。com/pdf文件/myfile。pdf格式

因此,如果用户请求上述url,网站将加载pdf文件。

是否有方法请求url:

我的网站。com/pdf文件/myfile。pdf并且此url被转换为以下内容,以便可以正确加载文件?

我的网站。com/wp-content/customUploads/myfile。pdf文件

1 个回复
SO网友:Aboelabbas

您可以通过使用自定义重写规则在WordPress中实现这一点。

在主题函数中使用此代码。php文件或插件内部。

// 1- Create a custom query var
    add_filter( \'query_vars\', function ( $query_vars ) {
        $query_vars[] = \'my_pdf_file\';
        return $query_vars;
    });

    // 2- Add a custom rewrite rule.
    // NOTE: rewrite rules must be flushed for this rule to work.
    // You can flush rewrite it by saving permalinks from dashboard.
    add_action(\'init\', function (){
        add_rewrite_rule(\'^pdf-files/([a-zA-Z0-9 _\\-]+\\.pdf)$\',\'index.php?my_pdf_file=$matches[1]\' );
    });

    // 3- Find and display the PDF file when a pdf file link is visited.
    add_action(\'template_redirect\', function () {

        $pdf_file_name = get_query_var(\'my_pdf_file\');

        // Don\'t do anything if no file name is supplied
        if(! $pdf_file_name) {
            return;
        }

        // Create the file path with the supplied name.
        $pdf_file_path = \\WP_CONTENT_DIR . \'/customUploads/\' . $pdf_file_name;

        // Show 404 page if invalid file name is supplied
        if(! is_file($pdf_file_path)) {
            global $wp_query;
            $wp_query->set_404();
            return;
        }

        // Read and display the PDF file
        header("Content-type: application/pdf");
        readfile($pdf_file_path);
        exit;

    });
别忘了保存“permalinks from”;permalinks设置;使用上述代码后,WordPress仪表板上的页面刷新重写规则。

相关推荐

如何创建下载pdf文件的端点?

我希望登录的用户能够下载PDF文件,但看不到文件的真实路径。此外,在这个PDF文件中,我输入了有关用户名和下载日期的信息。我创建了一个新端点“;下载“;使下载地址如下所示:我的网站。com/post-name/download/attached-idfunction my_custom_endpoint() { add_rewrite_endpoint( \'download\', EP_PERMALINK | EP_PAGES ); } add_action( \'i