web-dev-qa-db-ja.com

ルールとクエリ文字列を書き換える

mysite.com/photos/120というURLにアクセスすると、120を取り出すためにwantingです。

PHPでは、URLがmysite.com?page=photos&id=120、あるいは単にmysite.com/photos?id=120のようにこれらの「パラメータ」を取得できるようにしたいと思います。

を書き換えることはできますか ?または私が欲しいものを得るためにphpで regex をする必要がありますか?

****編集1 ****

私の人生のために私はこれを機能させることはできません。ここで与えられた答えに基づいて、私はこれまでに持っているものです:

add_action( 'init', 'rewrite_photo_url' );
function rewrite_photo_url() {
    add_rewrite_rule( '^photos/([^/]*)/?','index.php?page=photos&photo_id=$matches[1]', 'top' );
}

add_rewrite_tag('%id%','([0-9]+)');

print(get_query_var('photo_id'));

どこかに概念が欠けているのでしょうか。

****編集2 ****

おそらくこれはfunctions.phpに含まれている必要があることがわかり始めたので、次のようにします。

function rewrite_photo_url() {
    add_rewrite_rule( '^photos/([^/]*)/?','index.php?page=photos&photo_id=$matches[1]', 'top' );
}
function register_custom_query_vars( $vars ) {
    array_Push( $vars, 'photo_id' );
    return $vars;
}

add_action( 'init', 'rewrite_photo_url');
add_filter( 'query_vars', 'register_custom_query_vars', 1 );

今私はちょうど私のページテンプレートで私の希望のvarを取得する方法を知る必要があります。私はもう試した

print(get_query_var('photo_id'));

しかし、それはうまくいきません。

6
Jacksonkr

これに関する調査を何日も行った後の答えは、こんな単純なものでした。

$wp_query->query_vars['page']

それをintvalとviolaでラップしてください。

1
Jacksonkr

URLパラメータでクエリを微調整できるようにする独自の書き換え規則を追加できます。

add_action( 'init', 'rewrite_photo_url' );
function rewrite_photo_url() {
    add_rewrite_rule( 'photos/([^/]+)/?$','index.php?page=photos&photo_id=$matches[1]', 'top' );
}

あなたがカスタム変数、すなわち 'photo_id'を使う必要があるならば、あなたはそれが質問によって認識されるように変数を登録しなければなりません:

add_filter( 'query_vars', 'register_custom_query_vars', 1 );
function register_custom_query_vars( $vars ) {
    array_Push( $vars, 'photo_id' );
    return $vars;
}
11
Rachel Carden

あなたはあなたのカスタムクエリ変数を登録するために add_rewrite_tag を使うことができます(問題の 'id'):

add_rewrite_tag('%id%','([0-9]+)');

(正規表現は数字だけを受け入れるようにそれに言います)。書き換え規則を作成するには、 add_rewrite_rule を使用します。

(これらは両方ともinitにフックするべきです)。

add_rewrite_rule('^photos/([0-9]+)/?','index.php?p=1234&id=$matches[1]','top');

1234はあなたの 'photos'ページのIDです。これらを追加した後は、書き換えルールを一度フラッシュする必要があります(パーマリンク設定ページに移動します)。それから @DanielBachhuber のように、IDを取得するためにget_query_var( 'id' )を使うことができます。

add_rewrite_tagの正規表現は数字のみを受け入れることを意味します - おそらくintvalでサニタイズするべきです(いずれの場合も数字の文字列表現かもしれません)。

4
Stephen Harris

ルールの生成方法に応じて、 get_query_var() 関数を使用して 'photo'クエリ変数の値を取得できます。それが適切に行われているならば、 'photo'は利用可能なクエリ変数であるべきです。当然intval()などで値をサニタイズする必要があります。

2

こんにちはみんなこれは私のために働いていたものです:

    $pagination_args = array(
    'base'            => user_trailingslashit( trailingslashit( remove_query_arg( 's', strtok(get_pagenum_link( 1 ), '?') ) ) . 'page/%#%/'.rtrim(str_replace('%2F','',substr(get_pagenum_link( 1 ),strlen(strtok(get_pagenum_link( 1 ), '?')))),'/'), 'paged' ),
    'format'          => 'page/%#%',
    'total'           => $numpages,
    'current'         => $paged,
    'show_all'        => False,
    'end_size'        => 1,
    'mid_size'        => $pagerange,
    'prev_next'       => True,
    'prev_text'       => __('«'),
    'next_text'       => __('»'),
    'type'            => 'plain',
    'add_args'        => false,
    'add_fragment'    => ''
);

基本的な価値は、本当に魔法が効くものです。基本値を変更する必要はありません。私はこの記事を読むことによって正しい方向に向けられました: https://wordpress.org/support/topic/plugin-simple-pagination-page2-and-_get-parameters

0