Neues Theme – Und gleich ein Bugfix

themeforest

Wie man dem Blog ansieht, habe ich mir ein neues Theme gegönnt. Deshalb gegönnt, weil mir die Kreativität oder das künstlicherische Gen fehlt, ein eigenes Design zu erstellen. Also habe ich mir bei Themeforest das Theme Endless vom Designer Sneek herausgesucht und für 35$ gekauft. Das war es es mir einfach mal wert, um einen Blog zu haben, der mir wirklich gefällt. Ich kann jedem, der ein schickes Design sucht, nur empfehlen bei Themeforest vorbeizuschauen. Dort findet man nämlich wirklich professionelle Layouts zum schmalen Preis und man hat die optimale Basis auf die man aufbauen kann. Anpassungen sind bei den meisten Themes problemlos möglich oder sogar komfortabel einstellbar.

Doch nun zum eigentlich Thema, das die Euphorie vielleicht ein kleines bisschen bremst: Leider habe ich bei dem Theme einen Bug festgestellt, und nach einem kurzen Besuch auf der Supportseite festgestellt, dass ich damit nicht allein bin und der Support vom Designer leider kaum existent ist. Also ging ich selbst auf die Suche und wurde auch bald fündig.

Das Problem

Das Problem bestand auf der Hauptseite: Dort werden zunächst nur 10 Beiträge angezeigt, und wenn man runter scrollt, werden die nächsten 10 per Ajax-Call nachgeladen. Und genau bei dieser Ajax-Funktion trat das ärgerliche Problem auf, dass hier nicht nur veröffentlichte Beiträge, sondern auch Entwürfe nachgeladen und angezeigt wurden. Das war natürlich nicht im Sinne des Erfinders. Noch etwas komischer wurde der Effekt, wenn einer der Entwürfe unter den 10 jüngsten war. Dann passierte nämlich Folgendes: Angenommen der neuste Beitrag (also #1) ist ein Entwurf, dann werden beim Betreten der Seite die Artikel #2 – #11 angezeigt, weil hier richtigerweise nur veröffentliche Beiträge gezeigt werden. Bei der Nachladefunktion, werden dann die nächsten 10 Beiträge angefragt. Eigentlich sollten nun logischerweise die Artikel #12 – #21 zurückkommen. Die Nachladefunktion unterscheidet jedoch nicht zwischen Entwürfen und veröffentlichten Artikeln, zählt den ersten also mit. Sie geht also davon aus, dass sie die Artikel #1 – #10 schon da sind, und #11 – #20 zu liefern sind. Das hat zur Folge, dass nun der Artikel #11 doppelt erscheint. Wenn man nun fleißig ist, und viele Entwürfe vorschreibt, kann es einem passieren, dass fast nur bereits vorhandene Beiträge nachgeladen werden.

Die Lösung

Um das Problem zu beheben muss man beim Nachladen dafür sorgen, dass Entwürfe ausgeschlossen bzw. nur Artikel mit dem post_status publish angezeigt werden. Um dies zu erreichen, muss man lediglich eine Datei des Themes anpassen. Dort ist die letzte Zeile wie im folgenden Codebeispiel anzupassen.

Short version for englisch readers (as I posted a link in the support forum if this theme)

To solve the problem with repeating posts, you just have to do the little adjustment mentioned below. The problem is, that ‘drafts’ are not excluded from the ajax load function. To fix this, you simply have to set the post_status to ‘publish’.  This will also solve the ’unwanted revelation of drafts’ issue, as this occures, when your drafts belong to the 10 most actual posts.

endlesslibclassesajax.php

public function load_more_posts()
{
  $passed = $_POST['query_vars'];
  
  $args = array(
    // Author
    'author' => ( isset( $passed['author'] ) ) ? $passed['author'] : 0,
    
    // Post per page
    'posts_per_page' => $passed['posts_per_page'],
    
    // Which page
    'paged' => ( intval( $_POST['page'] ) > 1 ) ? $_POST['page']++ : 2,
    
    // The type of content. "any" for any.
    'post_type' => $passed['post_type'],
    
    // Portfolio cats
    'portfolio-category' => ( isset( $passed['portfolio-category'] ) ) ? $passed['portfolio-category'] : '',
    
    // Search
    's' => ( isset( $passed['s'] ) ) ? $passed['s'] : '',
    
    // Date Archives
    'year' => ( isset( $passed['year'] ) ) ? $passed['year'] : 0,
    'monthnum' => ( isset( $passed['monthnum'] ) ) ? $passed['monthnum'] : 0,
    'day' => ( isset( $passed['day'] ) ) ? $passed['day'] : 0,
    
    // Category archives
    'cat' => ( isset( $passed['cat'] ) ) ? $passed['cat'] : 0,
    
    // Tag archives
    'tag_id' => ( isset( $passed['tag_id'] ) ) ? $passed['tag_id'] : 0,
    
    //============================================================================
    // Bugfix - Prevent from loading draft posts or reloading already existing posts
    //============================================================================
    'post_status' => 'publish'
  );
  
  // ....
}

Das war es auch schon.

Kommentar verfassen