我是一名软件工程师,拥有一个有数百页的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来使用这个插件。
我希望做的是在我的服务器上的某个地方托管我自己的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
直接归档。
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路径(在本例中使用htmlfilepath
或htmlurl
作为元键):
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