web-dev-qa-db-fra.com

Comment filtrer les publications personnalisées par balises et champs personnalisés?

Je planifie un site pour un client souhaitant que les utilisateurs puissent filtrer les événements à venir selon les critères suivants:

Type i.e. Comédie, théâtre, musique, etc.

Date Quotidien ou Week-end

Durée quotidien ou demi-journée

Je souhaite approfondir davantage les publications personnalisées, donc je vais définir un type de publication personnalisé pour les "événements" (non hiérarchique) et lors de la création d'une nouvelle publication, je vais ajouter des champs personnalisés pour le type, la date et la durée.

La question que je me pose est la suivante: comment utiliser query_posts () pour:

  1. Répertoriez les événements pour que le plus tôt (c'est-à-dire le prochain événement à apparaître) apparaisse en premier et les derniers en dernier?
  2. Filtrer par plusieurs méta-valeurs (type, date et durée)?

Je suppose que je dois créer une série d'options dans les listes déroulantes de mon formulaire en fonction des valeurs de champ personnalisées, n'est-ce pas?

J'ai déjà créé une liste d'événements pour un client, mais sans possibilité de filtrage. J'ai utilisé ce code query_posts () pour obtenir les messages personnalisés et commander des choses:

// List the events by custom field 'Date':
$todaysDate = date('Y/m/d'); // set todays date to check against custom field

// query posts
query_posts('post_type=Event&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');

Cependant, je ne vois pas comment je pourrais changer ce code pour filtrer par plusieurs champs personnalisés ... des idées?

Merci

5
Osu

vous pouvez utiliser des taxonomies personnalisées et vous faciliter la tâche à query_posts! par là, je veux dire créer une taxonomie personnalisée pour le type, la durée comme suit:

add_action('init','register_event_tax');

function register_event_tax(){
register_taxonomy('even_type',array('events'), array(
    'hierarchical' => false,
    'labels' => 'type',
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'type' ),
  ));

register_taxonomy('even_duration',array('events'), array(
    'hierarchical' => false,
    'labels' => 'type',
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'duration' ),
  ));
}

alors vous pouvez interroger les messages comme ceci:

query_posts('post_type=Event&duration=DAILY&type=COMEDY&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');

et vous pouvez modifier la durée et le type pour filtrer le type ou la durée de votre choix.

j'espère que cela t'aides.

3
Bainternet