簡體   English   中英

Wordpress - wp_rewrite規則

[英]Wordpress - wp_rewrite rules

我正在嘗試為WordPress編寫一個插件,但是我遇到了一些關於wp_rewrite功能的問題。

我希望通過URL傳遞變量使一個頁面顯示為多個頁面(例如:www.mysite.com/WordPress?variable = helloall)

但是我想保持永久鏈接結構完整,所以我希望URL顯示如下:

www.mysite.com/WordPress/helloall

然后,我希望能夠使用slug並使用搜索我的數據庫。 (就像我使用$ _GET一樣,如果我使用的是我先提到的一般方法)


我在網上找到了一些教程,但仍然可以使這個工作。 我相信我的問題是由於您如何正確編寫規則而缺乏理解。

我使用過這個教程:

http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html

我試圖在大多數情況下使用相同的代碼。 我能夠制定規則,但他們似乎不想為我工作

誰能告訴我正確的格式才能做到這一點?

編輯

這是我目前的職能

function add_rewrite_rules( $wp_rewrite ) 
{
    $new_rules = array
    (
        '(.?.+?)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
        $wp_rewrite->preg_index(1).'&varname='.
        $wp_rewrite->preg_index(2).'&page='.
        $wp_rewrite->preg_index(3),

        '(.?.+?)/(.*?)/?$' => 'index.php?pagename='.
        $wp_rewrite->preg_index(1).'&varname='.
        $wp_rewrite->preg_index(2)
    );
    // Always add your rules to the top, to make sure your rules have priority
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

add_action('generate_rewrite_rules','add_rewrite_rules');

我已經弄明白了,我打算將此作為答案發布,但似乎我現在無法回答我自己的問題,所以我正在編輯原帖:

首先,我上面發布的代碼是正確的,但是它不起作用的原因是因為我沒有刷新規則,我使用以下代碼執行此操作:

function ebi_flush_rewrite_rules()
{
global $wp_rewrite;

$wp_rewrite->flush_rules();
}

add_action( 'init', 'flush_rewrite_rules');

我的新問題是,我的代碼工作得很好,重定向所有頁面而不是我想要的頁面,這意味着沒有顯示哪個子頁面有點問題,但是我已經解決了一個小問題編輯:

function add_rewrite_rules( $wp_rewrite ) 
{
  $new_rules = array
  (
    '(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
    $wp_rewrite->preg_index(1).'&varname='.
    $wp_rewrite->preg_index(2).'&page='.
    $wp_rewrite->preg_index(3),

    '(testpage)/(.*?)/?$' => 'index.php?pagename='.
    $wp_rewrite->preg_index(1).'&varname='.
    $wp_rewrite->preg_index(2)
  );
  // Always add your rules to the top, to make sure your rules have priority
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

所以關於wp_rewrite功能的最終代碼如下:

function add_rewrite_rules( $wp_rewrite ) 
{
$new_rules = array
(
    '(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
    $wp_rewrite->preg_index(1).'&varname='.
    $wp_rewrite->preg_index(2).'&page='.
    $wp_rewrite->preg_index(3),

    '(testpage)/(.*?)/?$' => 'index.php?pagename='.
    $wp_rewrite->preg_index(1).'&varname='.
    $wp_rewrite->preg_index(2)
);
// Always add your rules to the top, to make sure your rules have priority
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

function query_vars($public_query_vars)
{
$public_query_vars[] = "varname";
return $public_query_vars;
}

function ebi_flush_rewrite_rules()
{
global $wp_rewrite;
$wp_rewrite->flush_rules();
}

add_action( 'init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');

我希望將來能節省一些時間。

我想出了如何讓它在ea特定的頁面名稱上運行,這適用於將來遇到問題的任何人:

function add_rewrite_rules( $wp_rewrite ) 
{
    $new_rules = array
    (
        '(testpage)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
        $wp_rewrite->preg_index(1).'&varname='.
        $wp_rewrite->preg_index(2).'&page='.
        $wp_rewrite->preg_index(3),

        '(testpage)/(.*?)/?$' => 'index.php?pagename='.
        $wp_rewrite->preg_index(1).'&varname='.
        $wp_rewrite->preg_index(2)
    );
    // Always add your rules to the top, to make sure your rules have priority
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

function query_vars($public_query_vars)
{
    $public_query_vars[] = "varname";

    return $public_query_vars;
}

function ebi_flush_rewrite_rules()
{
    global $wp_rewrite;

    $wp_rewrite->flush_rules();
}

add_action( 'init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'add_rewrite_rules');
add_filter('query_vars', 'query_vars');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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