[英]Wordpress plugin to create virtual page using rewrite rules
我正在創建一個需要虛擬頁面來在前端輸出內容的插件。
這是我的代碼:
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();
}
} );
在插件中我有 templates/states.php 並且在那個文件中我有:
<?php
$state = get_query_var( 'custom' );
echo $state;
?>
當我訪問 localhost/my-custom-url/somevariable 時,我得到了一個從 Wordpress 中找不到的頁面。 我試過刷新我的永久鏈接。
正如我在評論中所說
我從未使用過 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 中的任何位置
希望它有效。
我想從虛擬頁面發送一個 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 代碼永遠不會在該頁面上執行。 有什么建議 ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.