私は私がずっとこれに答えてくれるものを探していて、また戻ってきているような気がします、そしてそれは本当に私のギアを磨き始めています。
これが正しい方法であるかどうかはわかりませんが、query_argの形式でquery_posts配列をURLに追加します。これが私たちの質問です。
query_posts( array( 'meta_key' => 'rank', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged,
そのmeta_key/query_posts配列で投稿を並べ替えるためにadd_query_argを使用してそれをURLに渡すにはどうすればよいですか?私はこれを試してみました、それは投稿の順序を変更していないようです、私がここに欠けているものがあります。
<a href="<?php echo $by_rank;?>"> Rank </a>
<?php $by_rank= esc_url(add_query_arg(array('meta_key' => 'rank', 'orderby' => 'meta_value_num', 'order' => 'DESC'))); ?>
クエリ文字列をURL文字列に追加する理由は、ユーザーがmeta_key/meta_valueに基づいてカテゴリページの投稿を並べ替えることができるようにするためです。 meta_keyを使用する以外は?orderby = dateの場合と同様の方法でソートします。
これはできますね。それは不可能だと私は真剣に考え始めているからです。
編集: - これを試した、これはASC/DESCの順序で投稿を並べ替えるために働くが、meta_keyによってではない
<?php
$meta_key = (isset($_GET['meta_key'])) ?
sanitize_text_field($_GET['meta_key']) : 'rank'; // use default value here ''
$orderby = (isset($_GET['orderby'])) ?
sanitize_text_field($_GET['orderby']) : 'meta_value_num'; // use default value here ''
$order = (isset($_GET['order'])) ?
sanitize_text_field($_GET['order']) : 'DESC'; // use default value here ''
$by_rank = esc_url(add_query_arg(array(
'meta_key' => $meta_key,
'orderby' => $orderby,
'order' => $order
)));
?>
<a href="<?php echo $by_rank;?>"> Rank </a>
Query_posts配列をページテンプレートに直接追加すれば問題なく動作することを付け加えておきます。
そのようなものはどうですか?
function wpse139657_orderby(){
if( isset($_GET['orderby']) ){
$order = $_GET['order'] or 'DESC';
set_query_var('orderby', 'meta_value_num');
set_query_var('meta_key', $_GET['orderby']);
set_query_var('order', $order);
}
}
add_filter('pre_get_posts','wpse139657_orderby');
このようにしてあなたは?orderby=rank
という接尾辞をつけてあなたのURLを呼ぶことができ、それはトリックをするべきです。実装したい場合は、オプションのorder
パラメータを持つこともできます。