web-dev-qa-db-ja.com

add_query_argが機能しない

カテゴリ内を移動するときにURLにパラメータを追加するためのフィルタを追加しました。これはsortパラメータが設定されている場合にのみカテゴリを閲覧するときに投票で投稿をソートするために使用されます。

たとえば、投票が最も多い投稿をすべて表示をクリックすると、投票が多い投稿が表示されます。そこから、sort=most_votedを含むURLにsort=doleast_votedまたはcat=?を追加することで、カテゴリ別に投票された投稿を最も多く表示できます。

add_filter( 'category_link','append_parameter', 10, 2 );

function append_parameter( $link, $query ) {
$my_parameter = $query->query_vars['sort']; //get sort value
if ( isset($my_parameter) ) { //if browsing posts by votes
    $link = add_query_arg( 'sort', $my_parameter, $link );
}
    return $link;
}

なぜsortパラメータがURLに追加されないのかわかりません。ただし、これは、ifステートメントとadd_query_arg内の$my_parameterの代わりの値がなくても機能します。

編集:新しい作業コード

    add_filter( 'category_link','append_parameter', 10, 2 );

    function append_parameter( $link, $my_parameter ) {
    $my_parameter = $_GET['sort']; //get sort value       
    if ( isset($my_parameter) ) { 
        $link = add_query_arg( 'sort', $my_parameter, $link );
    }
        return $link;
    }
1
wpStudent

category_linkフックが category-template.php で定義されている場所を見ると、このフックが2つの変数を渡すのがわかります。 2番目の変数はカテゴリIDですが、コールバック関数はその2番目の着信変数をクエリオブジェクトとして扱います。

簡単に言えば、入力変数はクエリオブジェクトではないため、存在しない、または存在できないquery_varsプロパティ/キーを探しています。

2
t31os