我正在创建一个插件,该插件需要虚拟页面才能在前端输出内容。
这是我的代码:
add_filter( 'generate_rewrite_rules', function ( $wp_rewrite ) {
$wp_rewrite->rules = array_merge(
['my-custom-url/?$' => 'index.php?custom=1'],
$wp_rewrite->rules
);
} );
add_filter( 'query_vars', function( $query_vars ) {
$query_vars[] = 'custom';
return $query_vars;
} );
add_action( 'template_redirect', function() {
$custom = intval( get_query_var( 'custom' ) );
if ( $custom ) {
include plugin_dir_path( __FILE__ ) . 'templates/states.php';
exit();
}
} );
在插件中,我有template / states.php,在该文件中,我有:
<?php
$state = get_query_var( 'custom' );
echo $state;
?>
当我访问localhost / my-custom-url / somevariable时,出现从Wordpress找不到的页面。我试过刷新我的永久链接。
答案 0 :(得分:0)
正如我在评论中所说
我从没用过generate_rewrite_rule
关于它的文档也很薄弱。但是这个键看起来就像我期望的常规表达式一样。而且,这很有意义,因为这就是真正的Mod Rewrite和Htaccess的工作方式。
add_filter( 'generate_rewrite_rules', function ( $wp_rewrite ) {
$wp_rewrite->rules = array_merge(
['my-custom-url/?$' => 'index.php?custom=1'],
$wp_rewrite->rules
);
} );
因此,这里的$
与字符串的末尾匹配,这意味着您的URL必须以my-custom-url
结尾,并且由于/
而具有可选的?
。
当我访问localhost / my-custom-url / somevariable时,找不到页面
不足为奇,因为您的URL不会以与该模式匹配的方式结束。
因此,您可以删除$
,而不必保留/
。
add_filter( 'generate_rewrite_rules', function ( $wp_rewrite ) {
$wp_rewrite->rules = array_merge(
['my-custom-url/?' => 'index.php?custom=1'],
$wp_rewrite->rules
);
} );
请注意,这将使URL中的任何地方都匹配
希望它能起作用。
答案 1 :(得分:0)
我想从虚拟页面发送Ajax,有什么办法可以实现吗?
add_action('wp_enqueue_scripts', 'insert_javascript');
function insert_javascript() {
wp_enqueue_script( 'get-users-api', plugin_dir_url( __FILE__ ) . 'js/main.js', array('jquery') );
wp_localize_script( 'get-users-api', 'js', array(
'ajaxurl' => admin_url( 'admin-ajax.php' )
));
}
但由于我在 parse_request
中调用 exit,该代码永远不会在该页面上执行。有什么建议吗?