web-dev-qa-db-fra.com

Tri des grilles avec Essential Grid and Events Manager

J'utilise Events Manager pour contrôler mes événements, mais Essential Grids pour afficher des aperçus de ces événements à différents endroits de mon site. Un exemple de ceci est http://staging-dbmax.transitiongraphics.co.uk/events/ .

Essentiellement, j'essaie de faire en sorte que Essential Grids reconnaisse le champ de date de l'événement et trie la grille en conséquence. Tout en cachant des événements qui sont dans le passé.

Jusqu'ici, grâce à des recherches, j'ai réussi à isoler les grilles et à extraire la date tout en cachant des événements plus anciens. Cependant, cela ne fonctionne pas tout à fait. Certains événements ne se placent pas correctement dans la grille.

Pour atteindre ce que j'ai jusqu'ici, j'ai fait ce qui suit:

Ajout du champ de paramètres sous l'onglet source de Essential Grids:

( 'meta_query' => array( array( 'meta_key' => '_event_start_date' , 'meta_value' => $today, 'compare' => '>=' , 'type' => 'date')) , 'orderby' => 'meta_value' ,  ) ); ?>

Ajout de ce qui suit dans mon fichier Functions PHP:

add_filter('essgrid_query_caching', 'eg_disable_caching', 10, 2);

function eg_disable_caching($do_cache, $grid_id){ //disable caching for the particular grid
 if($grid_id == 43 || $grid_id == 48 || $grid_id ==  50){ //replace 1 with your desired grid id
  return false;
 }
 return true;
}

add_filter('essgrid_get_posts', 'eg_modify_query', 10, 2);

function eg_modify_query($query, $grid_id){
 if($grid_id == 43 || $grid_id == 48){ //replace 1 with your desired grid id
  $query['meta_query'] = array( 'key' => '_start_ts', 'value' => current_time('timestamp'), 'compare' => '>=', 'type'=>'numeric' );
  $query['meta_key'] = '_start_ts';
  $query['meta_value'] = current_time('timestamp');
  $query['meta_value_num'] = current_time('timestamp');
  $query['meta_compare'] = '>=';
 }

 if($grid_id == 50){ //replace 1 with your desired grid id
  $query['meta_query'] = array( 'key' => '_start_ts', 'value' => current_time('timestamp'), 'compare' => '<=', 'type'=>'numeric' );
  $query['meta_key'] = '_start_ts';
  $query['meta_value'] = current_time('timestamp');
  $query['meta_value_num'] = current_time('timestamp');
  $query['meta_compare'] = '<=';
 }

 return $query;
}

Et enfin, ce code HTML va dans la peau de la grille pour extraire la date à partir de Events Manager:

[event post_id="%post_id%"]#_EVENTDATES[/event]

Bien évidemment, si quelqu'un a une meilleure solution, je serais heureux de l'utiliser à la place, sinon quelque chose dans ce qui précède n'est-il pas correct

2
Grant Smith

Après des recherches assez approfondies, j'ai réussi à trier les événements d'Event Manager par date dans le plug-in Essential Grid .

Si vous avez commencé avec la solution ci-dessus, vous pouvez supprimer le champ de paramètres ajoutés sous l'onglet source de Essential Grids, ce n'est plus nécessaire.

Alors voici ce que j'ai dans functions.php. Note : J'ai les grilles 1 et 2 utilisées pour les événements actuels et triées par ordre croissant de "date de début de l'événement" et je suppose que la grille 99 fonctionnerait pour les événements passés dans l'ordre décroissant, mais je ne l'ai pas testée.

/******************************************************************
 * Querry for Essential Grid to work with events
 ******************************************************************/
add_filter('essgrid_query_caching', 'eg_disable_caching', 10, 2);

function eg_disable_caching($do_cache, $grid_id){ //disable caching for the particular grid
    if($grid_id == 1 || $grid_id == 2 || $grid_id == 99){ //replace 99 with other grid id - see below
        return false;
    }
    return true;
}

add_filter('essgrid_get_posts', 'eg_modify_query', 10, 2);
//This is for future events
function eg_modify_query($query, $grid_id){
    if($grid_id == 1 || $grid_id == 2){ //replace with your grid id
        $query['meta_query'] = array( 'key' => '_start_ts', 'value' => current_time('timestamp'), 'compare' => '>=', 'type'=>'numeric' );
        $query['meta_key'] = '_start_ts';
        $query['meta_value'] = current_time('timestamp');
        $query['meta_value_num'] = current_time('timestamp');
        $query['meta_compare'] = '>=';
        $query['order'] = 'ASC';
        $query['orderby'] = 'meta_value';
    }
//This is for past events
    if($grid_id == 99){ //replace 99 with your desired grid id
        $query['meta_query'] = array( 'key' => '_start_ts', 'value' => current_time('timestamp'), 'compare' => '<=', 'type'=>'numeric' );
        $query['meta_key'] = '_start_ts';
        $query['meta_value'] = current_time('timestamp');
        $query['meta_value_num'] = current_time('timestamp');
        $query['meta_compare'] = '<=';
        $query['order'] = 'DESC';
        $query['orderby'] = 'meta_value';
    }
return $query;
}

Et voici le code HTML qui va dans ma grille pour obtenir le contenu des événements:

[event post_id='%post_id%']
<span style="font-weight: bold;color: #597eba;">Date:</span> #_EVENTDATES<br>
<span style="font-weight: bold;color: #597eba;">Time:</span> #_EVENTTIMES<br>
<span style="font-weight: bold;color: #597eba;">Location:</span> #_LOCATIONTOWN (#_LOCATIONSTATE)
[/event]

Vous pouvez utiliser n'importe quel code abrégé d'Events Manager pour des événements ou des emplacements dans les balises [event].

J'espère que cela peut être utile pour quelqu'un d'autre.

3
Marc

Cela n'a pas fonctionné pour moi au début et j'ai découvert qu'Essential Grid avait dû changer quelque chose. Les shortcodes ont maintenant besoin de guillemets simples au lieu de guillemets doubles dans l'éditeur de skin:

[event post_id='%post_id%']
0
Marc

Fonctionne aussi comme ça:

  1. Définissez une méta de référence pour _event_start_date (alphabétique) dans la section du menu "Traitement des métadonnées" de Essential Grids

  2. Mettez le code ci-dessus dans la fonction function.php de votre thème (ou mieux: du thème enfant)

  3. Ensuite, allez à votre élément de grille essentiel sous l'onglet "Nav-Filter-Sort" et choisissez Date de début de l'événement pour le tri.

0
Torsten