カテゴリ内を移動するときに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;
}
category_link
フックが category-template.php で定義されている場所を見ると、このフックが2つの変数を渡すのがわかります。 2番目の変数はカテゴリIDですが、コールバック関数はその2番目の着信変数をクエリオブジェクトとして扱います。
簡単に言えば、入力変数はクエリオブジェクトではないため、存在しない、または存在できないquery_vars
プロパティ/キーを探しています。