11

WordPress 用のプラグインを作成しようとしていますが、wp_rewrite 機能に関していくつか問題があります。

URL を介して変数を渡すことにより、1 つのページを複数のページとして表示したい (例: www.mysite.com/WordPress?variable=helloall)

ただし、パーマリンク構造をそのまま維持したいので、URLを次のように表示したい:

www.mysite.com/WordPress/helloall

次に、スラッグを取得して、それを使用してデータベースを検索できるようにしたいと考えています。(最初に述べた一般的な方法を使用していた場合に $_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');

これにより、将来誰かが時間を節約できることを願っています。

4

1 に答える 1

8

特定のページ名で動作させる方法を見つけました。これは、将来問題が発生した人のためのものです。

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');
于 2012-10-30T17:30:10.763 に答える