it-swarm.com.de

Möglich, einen Permalink zum Sortieren mit meta_key zu erstellen?

Ich habe das Gefühl, dass ich im Internet herumgesucht habe und wieder nach einer Antwort darauf gesucht habe, und es fängt wirklich an, meine Gänge zu knirschen.

Ich bin mir nicht sicher, ob dies der richtige Weg ist, aber ich möchte einer URL ein query_posts-Array in Form eines query_arg hinzufügen. Das ist unsere Frage:

query_posts( array( 'meta_key' => 'rank', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged,

Wie kann ich add_query_arg verwenden, um dies an die URL zu übergeben, um die Posts mit dem Array meta_key/query_posts neu zu ordnen? Ich habe es versucht, es scheint die Reihenfolge der Beiträge nicht zu ändern, hier fehlt etwas.

<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'))); ?>

Der Grund, warum ich die Abfragevariablen zur URL-Zeichenfolge hinzufügen möchte, besteht darin, dass Benutzer Beiträge auf Kategorieseiten basierend auf dem meta_key/meta_value sortieren können. Ähnlich wie? Orderby = date, außer mit einem meta_key.

Das kann man doch machen, oder? Weil ich ernsthaft anfange zu denken, dass es nicht möglich ist.

BEARBEITEN: - Versucht dies, dies funktioniert, um Beiträge nach ASC/DESC-Reihenfolge zu sortieren, aber nicht nach dem 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>

Ich sollte hinzufügen, dass, wenn ich das query_posts-Array direkt in die Seitenvorlage einfüge, es gut funktioniert.

1
andy

Was ist mit so etwas?

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');

Auf diese Weise können Sie Ihre URLs mit einem ?orderby=rank-Suffix aufrufen, und es sollte den Trick tun. Sie können auch einen optionalen Parameter order angeben, falls Sie ihn implementieren möchten.

3
Sunyatasattva