web-dev-qa-db-ja.com

Essential Grid and Events Managerを使用したグリッドの並べ替え

Events Managerを使用して自分のイベントを制御していますが、Essential Gridsを使用してサイト内のさまざまな場所にこれらのイベントのプレビューを表示しています。この例は http://staging-dbmax.transitiongraphics.co.uk/events/ です。

基本的に、Essential GridにイベントのDate Fieldを認識させ、それに従ってグリッドをソートするようにしています。過去の出来事を隠しながら。

これまでの研究を通して、私はグリッドを切り離して日付を引き出​​すことができましたが、古いイベントは隠しました。しかし、それはうまくいきません。一部のイベントはグリッドに正しく配置されません。

私がこれまでに持ってきたことを達成するために、私は以下をしました:

Essential Gridsのsourceタブにparametersフィールドを追加しました。

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

私の関数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;
}

そして最後に、このHTMLはイベントマネージャから日付を取得するためにグリッドのスキンに入ります。

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

誰かがもっと良い解決策を持っているのであれば、私が代わりにそれを使用したいと思うのであれば間違いなく、そうでなければ、正しくソートされていない上記のものはありますか?

2
Grant Smith

これをかなり研究した後、 Essential Gridプラグイン でEvents Managerのイベントを日付順に並べ替えることができました。

上記の解決策から始めたなら、Essential Gridsのsourceタブの下に追加されたparametersフィールドを削除することができます。

だからここに私はfunctions.phpに持っているものです。:現在のイベントに使用され、昇順の「イベント開始日」でソートされたグリッド1と2があります。 。

/******************************************************************
 * 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;
}

そしてこれが私のグリッドでイベントの内容を取得するためのHTMLです。

[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]

[event]タグ内のイベントまたは場所には、Events Managerの任意のショートコードを使用できます。

これが他の人に役立つことを願っています。

3
Marc

最初はうまくいきませんでしたが、Essential Gridで何かが変わったに違いありません。ショートコードは、スキンエディタで二重引用符ではなく一重引用符を必要とします。

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

このように動作します:

  1. Essential Gridsの[Meta Data Handling]メニューセクションで_event_start_date(アルファベット)の参照メタを設定します。

  2. 上記のコードをあなたのテーマの(あるいはもっと良いのは子テーマの)function.phpに入れてください

  3. 次に、タブ "Nav-Filter-Sort"の下の基本的なグリッド項目に移動し、ソートのために[Event Start Date]を選択します。

0
Torsten