如何显示原始的HTML页面(绕过WordPress主题、脚本等)

时间:2016-06-08 作者:Ryan

我是一名软件工程师,拥有一个有数百页的WordPress网站,它运行得很好。

然而,在某些情况下,我希望能够使用WordPress系统(没有主题、样式、javascript等)的交互/干扰来编写自己的页面,但它仍然位于同一子域上。

How can I set https://example.com/special-page to display an HTML file uploaded somewhere within /wp-content/?

作为奖励,我希望它也能与PHP文件(生成HTML)一起使用。

我不想手动编辑.htaccess 文件

下面是一个很接近的示例:

这个LeadPages WordPress plugin 似乎在改变我的期望。它允许用户指定“slug”(相对路径,例如special-page) 以及在那里显示什么内容。但内容需要托管在LeadPage上。net来使用这个插件。

LeadPages plugin

我希望做的是在我的服务器上的某个地方托管我自己的HTML文件(例如,在一个可公开访问的文件夹中,例如/wp-content/) 然后有一个相对的路径指向它。

看看这个.htaccess 我手动编辑的文件(以及我想要的工作方式):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
DirectoryIndex /wp-content/raw/book-sale.html [L]
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteRule ^thanks$ /wp-content/raw/book-opt-in-thank-you.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我希望能够从WordPress管理员中指定站点根目录(/) 应显示/wp-content/raw/book-sale.html, 和/thanks 应显示/wp-content/raw/book-opt-in-thank-you.html (这样我就不需要编辑.htaccess 直接归档。

3 个回复
SO网友:Scott Nelle

如果您愿意创建一个子主题并将PHP文件放在其中,那么这种方法相对来说是干净的。对于每个文件,创建一个重写规则,指定要使用的路径和应加载的文件名。在下面的示例中,/custom-path/ 负载custom-file.php 从子主题目录的根目录/custom-path-2/ 负载custom-file-2.php. 添加重写后,不要忘记刷新永久链接。

/*
 * Set up a rewrite for each path which should load a file.
 */
function my_standalone_rewrites() {
    add_rewrite_rule( \'^custom-path/?\', \'index.php?standalone=custom-file\', \'top\' );
    add_rewrite_rule( \'^custom-path-2/?\', \'index.php?standalone=custom-file-2\', \'top\' );
}
add_action( \'init\', \'my_standalone_rewrites\' );

/*
 * Make `standalone` available as a query var.
 */
function my_query_vars( $vars ) {
  $vars[] = \'standalone\';
  return $vars;
}
add_filter( \'query_vars\', \'my_query_vars\' );

/*
 * If `standalone` is set when parsing the main query, load the standalone file.
 */
function my_standalone_path( &$wp_query ) {
    if ( $wp_query->is_main_query() && get_query_var( \'standalone\', false ) ) {
        // Load filename.php from your child theme root.
        get_template_part( get_query_var( \'standalone\' ) );
        exit;
    }
}
add_action( \'parse_query\', \'my_standalone_path\' );

SO网友:majick

您可以使用所需的slug创建一个页面,并添加一个自定义字段来指定要输出的HTML路径(在本例中使用htmlfilepathhtmlurl 作为元键):

add_action(\'wp\',\'maybe_direct_html_output\');

function maybe_direct_html_output() {
    if (is_singular()) {
        global $post;
        $htmlfilepath = get_post_meta($post->ID,\'htmlfilepath\',true);
        if ( ($htmlfilepath) && (file_exists($htmlfilepath)) ) {
            echo file_get_contents($htmlfilepath); exit;
        }
        $htmlurl = get_post_meta($post->ID,\'htmlurl\',true);
        if ($htmlurl) {
            $html = wp_remote_get($html);
            if (!is_wp_error($html)) {echo $html[\'body\']; exit;}
        }
    }
}
所以不需要.htaccess 这样做的时候。。。我刚注意到你想用wp-content 因此,您可以使用相对路径并将其简化为(使用htmlfile 图元键):

add_action(\'wp\',\'maybe_direct_html_output\');

function maybe_direct_html_output() {
    if (is_singular()) {
        global $post;
        $htmlrelpath = get_post_meta($post->ID,\'htmlfile\',true);
        if (!$htmlrelpath) {return;}
        $htmlfilepath = WP_CONTENT_DIR.$htmlrelpath;
        if (!file_exists($htmlfilepath)) {return;}
        echo file_get_contents($htmlrelpath); exit;
    }
}
记住这一点WP_CONTENT_DIR 没有尾部斜杠,因此可以为页面输入相对路径自定义字段值,例如/raw/book-sale.html

SO网友:Krafter

对于任何有类似问题的人来说,这个免费插件已经存在很长时间了,并且部分完成了这里所要求的功能(它不适用于PHP文件)。它允许您创建绕过WordPress模板系统的自定义HTML页面,这些页面由自定义URI调用。https://wordpress.org/plugins/wp-custom-html-pages/

在存储库中查找WP自定义HTML页面插件,在“管理”面板的“页面”菜单下的“查找HTML页面”菜单项下安装并激活,创建任意数量的页面并为其分配自定义URI。这些页面是通过在Ace编辑器中添加代码来创建的