簡體   English   中英

使用重寫規則創建虛擬頁面的 Wordpress 插件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM