web-dev-qa-db-ja.com

添付ファイルを取得するための書き換え規則とページ付けを追加する方法

異なる分類法に基づいて添付ファイルを一覧表示しようとしています。現時点では基本的なURLに対してのみ機能します(ページ付けは追加されていません)。例えば

http://www.example.com/exams/high-school/city-name/subject/math/

最初に、私は以下のようにfunctions.phpに私のカスタム書き換えルールを追加しました:

function add_rewrite_rules($aRules) {
    $new_rules = array(
    // rule 1
    'exams/([^/]+)/([^/]+)/subject/([^/]+)/?$'  => 
    'index.php?pagename=exams&level=$matches[1]&city=$matches[2]&subject=$matches[3]',
    // rule 2
    'exams/([^/]+)/([^/]+)/subject/([^/]+)/page/([0-9]+)/?$'  => 
    'index.php?pagename=exams&level=$matches[1]&city=$matches[2]&subject=$matches[3]&page=$matches[4]'
);

    return $new_rules + $aRules;
}
// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules');

私はその機能を変更するたびに、ワードプレス、固定リンクに行き、保存をクリックします。

次に、私が使っているクエリ変数をURLに(functions.phpにも)追加しました。

// represents for example the name of the product category
function add_query_vars($aVars) {
    $aVars[] = "level";    
    $aVars[] = "city"; 
    $aVars[] = "subject"; 
    $aVars[] = "page"; 
    return $aVars;
}
// hook add_query_vars function into query_vars
add_filter('query_vars', 'add_query_vars');

第三に、私は 'exams'という名前のページとあなたが見ているページが試験である場合にのみ機能する添付ファイルを取得するためのプラグインを作成しました:

// Hooks a function to a filter action, 'the_content' being the action...
add_filter('the_content','me_get_listado');

// Callback function
function me_get_listado($content)
{
    // Checking if on post page.
    if ( is_page('exams') )
    {
            // get the query vars
            if ( get_query_var( 'level' ) && get_query_var( 'city' ) && get_query_var( 'subject' ) )
            {
                // get_post ($args) ... 
            }       
            return  $content; // the new content

        } else {
            // else on blog page / home page etc, just return content as usual.
            return $content;
        }
    }

まあ、これはほぼ予想通りに機能しています。に行くと

http://www.example.com/exams/high-school/city-name/subject/math/

私は、 '高校'の '都市名'から '数学'の添付ファイルを取得します。 しかし私が行く時:

http://www.example.com/exams/high-school/city-name/subject/math/page/1 

または:

http://www.example.com/exams/high-school/city-name/subject/math/page/2

にリダイレクトします。

http://www.example.com/exams/1 or http://www.example.com/exams/2

だから、何もうまくいきません。

追加した書き換え規則の何が問題になっているのでしょうか。それとも私がWordpressのロジックに干渉しているのであれば?

注:「レベル」、「市区町村」、および「件名」はカスタム分類法です。

2
pQB

@Miloのコメントに基づいて書き換えアナライザプラグインを使用すると、書き換えルールの競合として理解できるものが見つかりましたか。次のURL:

exams/high-school/city-name/subject/math/

以下の規則に一致します

Pattern:
    (.?.+?)/page/?([0-9]{1,})/?$
Subtitution:
    pagename: exams/high-school/city-name/subject/math
    paged: 1

Pattern:
    (.?.+?)(/[0-9]+)?/?$ 
Subtitution:
    pagename: exams/high-school/city-name/subject/math/page
    page: /1

Pattern: 
    exams/([^/]+)/([^/]+)/subject/([^/]+)/?$    
Subtitution:
    pagename: examns
    level: high-school
    city: city-name
    subject: math
    page: 1

最後のものは私が作成しようとしているものです。私は書き換え規則の専門家ではありませんが、2番目の規則は最初にアクティブにしてhttp://www.example.com/exams/1 or http://www.example.com/exams/2への間違ったリダイレクトを生成したと思います。

そこで、私は自分のルールの2番目を次のように変更しました。

exams/([^/]+)/([^/]+)/subject/([^/]+)/page/?([0-9]{1,})/?$'  => 'index.php?pagename=exams&level=$matches[1]&city=$matches[2]&subject=$matches[3]&pages=$matches[4]

Varを 'pages'で複数形にしてください。正常に動作しています。しかし、書き換えアナライザプラグインは私のルールを検出していません。 「?」

実際に、 'page'を 'pages'または 'whateverIwant'に変更して、そのvarnameを登録し、それを自分のプラグインに入れるとします。

$args = array(  'post_type'         => 'attachment',
    'posts_per_page'    => 2,
    'paged'             => ( get_query_var('whateverIwant') ? get_query_var('whateverIwant') : 1 ),
    'orderby'           => 'post_title',
    'order'             => 'ASC',
    'post_status'       =>'published'
);

また働く!したがって、私が作成した最初のルールセットは、ワードプレス内のものと矛盾していました。私は学ぶべきことがたくさんあります。

シモンズ:私はこの問題を解決する確かな議論でどんな質問でも受け入れます。

0
pQB