web-dev-qa-db-fra.com

Trier les messages par valeur de champs personnalisés à l'aide du menu déroulant

J'essaie de trier mes articles en fonction d'une valeur de champ personnalisée, appelée prix. Utiliser uniquement des nombres dans la valeur du champ personnalisé. Je veux que les visiteurs du site Web puissent trier les articles sur le prix en utilisant un menu déroulant. J'ai cherché un plugin, mais je n'ai pas trouvé ça. Maintenant, vous avez trouvé le code ci-dessous:

<?php
  $order = "&order=DESC";
  if ($_POST['select'] == 'tag') { $order = "&tag=mytag";  }
  if ($_POST['select'] == 'title') { $order = "&order=ASC&orderby=title";  }
  if ($_POST['select'] == 'newest') { $order = "&order=DESC"; }
  if ($_POST['select'] == 'oldest') { $order = "&order=ASC";  }
  if ($_POST['select'] == 'mcommented') { $order = "&order=DESC&orderby=comment_count";  }
  if ($_POST['select'] == 'lcommented') { $order = "&order=ASC&orderby=comment_count";  }
  if ($_POST['select'] == 'prijs') { $order = "&order=ASC&orderby=meta_value_num";  }
?>
<form method="post" id="order">
  Sort reviews by:
  <select name="select" onchange='this.form.submit()'>
    <option value="tag"<?php selected( $_POST['select'],'tag', 1 ); ?>>Tag</option>
    <option value="title"<?php selected( $_POST['select'],'title', 1 ); ?>>Title</option>
    <option value="newest"<?php selected( $_POST['select'],'newest', 1 ); ?>>Newest</option>
    <option value="oldest"<?php selected( $_POST['select'], 'oldest', 1 ); ?>>Oldest</option>
    <option value="mcommented"<?php selected( $_POST['select'],'mcommented', 1 ); ?>>Most commented</option>
    <option value="lcommented"<?php selected( $_POST['select'],'lcommented' , 1 ); ?>>least commented</option>
    <option value="prijs"<?php selected( $_POST['select'],'prijs' , 1 ); ?>>prijs</option>
  </select>
</form>
<?php query_posts($query_string . $order); ?>

Mais la dernière option de sélection 'prijs' ne fonctionne pas.

Quelqu'un peut m'aider? Ou avez-vous besoin de plus d'informations?

Désolé pour mon anglais si ce n'est pas totalement correct.

1
Doen Webontwerp

Au lieu de query_posts, essayez d’utiliser la classe WP_Query. http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

Voici un exemple tiré du codex:

$args = array(
'post_type'  => 'my_custom_post_type',
'meta_key'   => 'age',
'orderby'    => 'meta_value_num',
'order'      => 'ASC',
'meta_query' => array(
    array(
        'key'     => 'age',
        'value'   => array( 3, 4 ),
        'compare' => 'IN',
    ),
),
);
$query = new WP_Query( $args );
1
Ashok Kumar Nath

Vous devez ajouter meta_key pour qu'il sache quelle méta-valeur comparer.

https://codex.wordpress.org/Class_Reference/WP_Meta_Query

$order = "&order=ASC&meta_key=prijs&orderby=meta_value_num";

Plus d'infos: Requête personnalisée avec orderby meta_value du champ personnalisé

0
admcfajn