1

wordpress サイトに並べ替えオプションを挿入しようとしています。すでに動作していますが、wordpress ループで正しく使用するのに助けが必要です。現在、私は持っています:

ページには、アルファベット順または時系列順に並べ替えるオプションがあります。

<a href="?sort=date">Newest</a>
<a href="?sort=title">Alphabetical</a>

コードの並べ替えはここから始まり、ループの上に配置されます。

<?php $sort= $_GET['sort']; 
    if($sort == "title") { $order= "'orderby'=>'title','order'=>ASC'"; } 
    elseif($sort == "date") { $order= "'orderby'=>'date'"; } 
    else{ $order= "'orderby'=>'date','order'=>'DESC'"; } 
?>

注:問題は上記の変数 $order にあると確信しています

$order引数として変数を使用したWordpressループ

<?php $loop = new WP_Query( array( $order, 'post_type' => 'films', 'post_parent' => 0, 'posts_per_page' => -1 ) ); ?>

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

    Wordpress loop stuff here

<?php endwhile; ?>

ループはアイテムを正しく表示しますが、並べ替えリンクが機能していません。このコードは query_posts で非常にうまく機能しますが、これを WP_Query (上記) で機能させようとしています。ここに何かアイデアはありますか?

UPDATE : この手法は、以下のように query_posts を使用するとうまく機能します (ただし、WP_Query で機能する必要があります)。

<?php $sort= $_GET['sort']; 
    if($sort == "title") { $order= "&orderby=title&order=ASC"; } 
    elseif($sort == "date") { $order= "&orderby=date"; } 
    else{ $order= "&orderby=date&order=DESC"; } 
?>

<?php $posts = query_posts($query_string . $order); ?>
<?php if(have_posts()) : while(have_posts()) : the_post(); ?>
       Wordpress Stuff Here
<?php endwhile; ?>
<?php endif; ?>
4

1 に答える 1

1

WP_Queryarray('param' => 'value')query_posts は「クエリ文字列」のみを受け入れるのに対し( )、パラメーターの連想配列を想定しています( "param=value&param=value")。両方のオプションを混在させているため、機能しません。$order変数を文字列ではなく配列に変更する必要があります。例: $order = array('orderby' => 'title', 'order' => ASC');.

上記の回答は完全ではなく、誤解を招く可能性があります。WP_Queryドキュメントはこちら: https://codex.wordpress.org/Class_Reference/WP_Query . このクラスは両方のスタイルを受け入れますが、多少異なる形式にする必要があります。クラスのドキュメントに書かれていないため、これを正確に行う方法はわかりませんが、配列を使用することをお勧めします。

if($sort == "title") { $order = array('orderby' => 'title', 'order' => 'ASC'); } 
elseif($sort == "date") { $order= array('orderby' => 'date'); } 
else{ $order= array('orderby' => 'date', 'order' => 'DESC'); } 

参考までに、両方のタイプを変換するには、関数を使用しますparse_str(): http://php.net/manual/en/function.parse-str.phpおよびhttp_build_query(): http://www.php.net/manual/en/function.http-build- query.php

于 2012-06-23T15:37:50.943 に答える