web-dev-qa-db-ja.com

Meta_keyでソートするためのパーマリンクを作成することは可能ですか?

私は私がずっとこれに答えてくれるものを探していて、また戻ってきているような気がします、そしてそれは本当に私のギアを磨き始めています。

これが正しい方法であるかどうかはわかりませんが、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配列をページテンプレートに直接追加すれば問題なく動作することを付け加えておきます。

1
andy

そのようなものはどうですか?

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パラメータを持つこともできます。

3
Sunyatasattva