我有一个特殊的情况,需要一些帮助来完成最后一步。
Background:
当我访问mydomain时。com/category/postname,我如期得到了这篇文章。
当我访问mydomain时。com/category/postname?ajax=1,我得到了post-html(烘焙到并包括其相应的页面模板标记,这对于这个用例非常重要),但我得到了它的呈现without 它的页眉和页脚(我是故意这样做的,在header.php和footer.php文件中使用$\\u GET[\'ajax]==1条件来抑制它们)。
This all works as expected. 然而,这给我留下了一个新的小问题。。。浏览器无法正确缓存以GET参数字符串结尾的URL中的内容。
Therefore, 我想创建一个重写规则,以实现以下目标。。。
mydomain。com/ajax/category/postnamebecomesmydomain。com/category/postname?ajax=1
Here\'s from my functions.php:
function dynaload_rewrite() {
add_rewrite_rule(\'ajax/(.*)/?\', \'$matches[1]?ajax=1\', \'bottom\');
}
add_action(\'init\', \'dynaload_rewrite\');
This results in .htaccess file as follows:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteRule ^ajax/(.*)/? /$matches[1]?ajax=1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Expected Result: 当我访问ajax/category/postname时,我希望呈现来自
/category/postname的内容,减去页眉和页脚,就像我正常使用访问时一样?ajax=1Actual Result: 我收到了WordPress 404页面的内容,但是页眉和页脚are 省略(因此我知道参数ajax=1传递正确,只是加载了错误的页面)。
感谢您的成功帮助,并将被视为令人印象深刻。非常感谢。
SO网友:jgraup
这可以捕获类别和post\\u名称,然后更改呈现的模板。
if (!class_exists(\'WPTestPluginEndpoint\')):
class WPTestPluginEndpoint
{
const ENDPOINT_QUERY_NAME = \'ajax\';
// WordPress hooks
public function init()
{
add_filter(\'query_vars\', array($this, \'add_query_vars\'), 0);
add_action(\'parse_request\', array($this, \'sniff_requests\'), 0);
add_action(\'init\', array($this, \'add_endpoint\'), 0);
}
// Add public query vars
public function add_query_vars($vars)
{
$vars[] = \'ajax\';
$vars[] = \'cat\';
$vars[] = \'post_name\';
return $vars;
}
// Add API Endpoint
public function add_endpoint()
{
add_rewrite_rule(\'^ajax/([^/]*)/([^/]*)/?\', \'index.php?ajax=1&cat=$matches[1]&post_name=$matches[2]\', \'top\');
flush_rewrite_rules(false); //// <---------- REMOVE THIS WHEN DONE
}
// Sniff Requests
public function sniff_requests($wp_query)
{
global $wp;
if (isset($wp->query_vars[\'ajax\'])) {
$_REQUEST [\'ajax\'] = $wp->query_vars[\'ajax\'];
$_REQUEST [\'cat\'] = $wp->query_vars[\'cat\'];
$_REQUEST [\'post_name\'] = $wp->query_vars[\'post_name\'];
$this->handle_request(); // handle it
}
}
// Handle Requests
protected function handle_request()
{
// Control the template used
add_filter(\'template_include\', function ($original_template) {
$args = array(
\'cat\' => $_REQUEST[\'cat\'],
\'post_name\' => $_REQUEST[\'post_name\'],
);
//var_dump($original_template);
return get_template_directory() . \'/single.php\';
});
}
}
$wptept = new WPTestPluginEndpoint();
$wptept->init();
endif; // WPTestPluginEndpoint
在模板中
if ( ! isset( $_REQUEST[\'ajax\'] ) ) get_header(); ?>
<?php if ( ! isset( $_REQUEST[\'ajax\'] ) ) get_footer(); ?>