Das Essential Grid Plugin von ThemePunch zählt aufgrund seiner enormen Vielseitigkeit zu den beliebtesten Grid-Lösungen für WordPress. Klarerweise lassen sich damit auch Bücher sehr ansehnlich präsentieren, womöglich sogar ohne eine Zeile Code zu schreiben — naja, fast.
Was ist zum Beispiel, wenn nicht nur das Hauptarchiv, sondern auch die verzweigten Unterarchive (Kategorien, Schlagworte etc.) mit dem Grid dargestellt werden sollen. Oder anders: Wann sollte das denn nicht erwünscht sein? Vorausgesetzt man verwendet diese Unterarchive überhaupt.
Auf der ThemePunch-Website stehen zwei schöne Anleitungen bereit, die das Problem in den meisten Fällen lösen sollten (Unterarchive, Suchergebnisse). Damit das allerdings auch innerhalb des Genesis Frameworks funktioniert, muss eine Kleinigkeit ergänzt werden.
Custom Archive Page für Genesis + Essential Grid
Zunächst einmal der vollständige Dateiinhalt. Je nachdem, welches Archiv oder welche Archive angesprochen werden sollen, muss die Datei archive.php, category.php, tag.php, taxonomy.php oder noch spezifischer benannt werden. Wer unsicher ist, sollte sich die WordPress Template Hierarchy noch einmal genau ansehen.
<?php /* * Custom archive page template for Genesis using Essential Grid plugin shortcode * */ //* Replace standard loop with custom loop */ remove_action( 'genesis_loop', 'genesis_do_loop' ); add_action( 'genesis_loop', 'bub_custom_archive_loop' ); function bub_custom_archive_loop() { if ( have_posts() ) : // Global $post needs to be called inside a function global $post; $my_post_array = array(); do_action( 'genesis_before_while' ); while ( have_posts() ) : the_post(); // Populate array with queried post IDs $my_post_array[] = $post->ID; endwhile; do_action( 'genesis_after_endwhile' ); // Echo Essential Grid shortcode using $post array built above echo do_shortcode( '[ess_grid alias="bubblog" posts='.implode(',', $my_post_array).']' ); else : do_action( 'genesis_loop_else' ); endif; } genesis();
Wie man sehen kann, enthält meine Version des Snippets ein paar Genesis-spezifische Action Hooks, aber um die geht es hier nicht. Damit das ThemePunch-Snippet auch in Genesis funktioniert, reicht es, wenn wir die Zeile global $post einfügen.
Da innerhalb eines Genesis Child Themes üblicherweise fast alles über Hooks geregelt und somit in Funktionen gepackt wird, müssen wir WordPress ausdrücklich daran erinnern, was wir meinen, wenn wir $post sagen. Normalerweise ist das innerhalb eines Template Files nicht erforderlich, weil darin eine Referenz zur globalen Variable $post von Haus aus besteht. Das gilt allerdings nur, solange wir uns NICHT innerhalb einer Funktion befinden. Etwas, das bei der Arbeit mit Genesis eher selten der Fall sein dürfte.
Custom Search Results Page für Genesis + Essential Grid
Eine Spur aufwendiger ist der Code für das Archiv der Suchergebnisse, da wir hierfür ein neues WP_Query-Objekt kreieren. Eine kurze Schritt-für-Schritt-Anleitung bieten die Plugin-Entwickler an.
Es folgt der Inhalt meiner search.php. Erforderlich war auch ein kleiner Fix für das Search-Plugin Relevanssi, auf das ich nicht verzichten möchte:
<?php /* * Custom search results page template for Genesis with Essential Grid plugin shortcode * */ //* Add search results title add_action( 'genesis_before_loop', 'bub_search_results_title' ); function bub_search_results_title() { $title = sprintf( '<div class="entry-header"> <h1 class="entry-title">%s%s%s</h1></div>', 'Ergebnisse für: "', get_search_query(), '"' ); echo $title; } //* Replace standard loop with custom loop */ remove_action( 'genesis_loop', 'genesis_do_loop' ); add_action( 'genesis_loop', 'bub_essential_grid_search_loop' ); function bub_essential_grid_search_loop() { // Build Search Query $args = array( 's' => $_REQUEST['s'], 'showposts' => -1, 'post_type' => array( 'page', 'bubpost' ) ); $bub_search_all = new WP_Query($args); // Make new Query work with Relevanssi plugin relevanssi_do_query( $bub_search_all ); // global $post needs to be called inside a function global $post; $posts = array(); if( $bub_search_all->have_posts() ) : do_action( 'genesis_before_while' ); while( $bub_search_all->have_posts() ) : $bub_search_all->the_post(); // Save Post ID in array $posts[] = $post->ID; endwhile; do_action( 'genesis_after_endwhile' ); // Echo the Essential Grid shortcode using $post array built above echo do_shortcode('[ess_grid alias="bubblog" posts="'. implode(',', $posts) .'"]'); else : do_action( 'genesis_loop_else' ); endif; /* Reset global variable $post */ wp_reset_postdata(); } genesis();