it-swarm.com.de

orderby = meta_value_num erstellt doppelte Beiträge

Ich habe meine Facebook-Likes in einem benutzerdefinierten Feld namens fb_likes gespeichert. Meine WordPress-Post-Bestellung ist nach diesem Feld sortiert.

 'meta_key' => 'fb_likes',
 'orderby' => 'meta_value_num',
 'order' => 'DESC',
 'ignore_sticky_posts' => 1,
 'posts_per_page' => $wp_query->get('posts_per_page'),
 'paged' => $paged

Dies scheint auf den ersten Blick gut zu funktionieren, aber wenn Sie durch die Seiten klicken, bemerken Sie, dass einige Beiträge zweimal (oder sogar dreimal) angezeigt werden, obwohl sie nur einmal in der Datenbank vorhanden sind. Auch die Nachbestellung ist durcheinander und scheint sich von selbst zu ändern.

Wenn ich meta_value anstelle von meta_value_num verwende, funktioniert es einwandfrei, aber dann gibt es das Problem, dass es so aussortiert -> 9,5,4,39,38,37,26 -, dass Sie auf die Idee kommen. Ich brauche also meta_value_num, um wie beabsichtigt zu arbeiten.

was könnte das problem sein

BEARBEITEN: Ich benutze den folgenden Code, um die Facebook-Likes in den Meta-Wert von fb_likes zu schreiben. Wenn ich nur irgendwie auf den Meta-Wert wie diesen "001" anstatt auf diesen "1" schreiben könnte. Dann könnte ich einfach orderby = meta_value verwenden und bräuchte nicht einmal meta_value_num.

Gibt es eine Möglichkeit, wie folgt in die Datenbank zu schreiben? 1 gefällt -> 001, 21 gefällt -> 021

{
        if($post->post_type == 'draft') continue;
        $fb = json_decode(file_get_contents('http://graph.facebook.com/?id='.get_permalink($post->ID)));
        if( !isset( $fb->likes) && isset($fb->shares) )
        {
            $fb->likes = $fb->shares;
        }
        //$fb->likes = isset($fb->likes) ? $fb->likes : 0;
        $this->log("post_id: ({$post->ID}) \npermalink: ".get_permalink($post->ID) . "\nfb_likes:". $fb->likes . "\n"); 
        update_post_meta($post->ID, 'fb_likes', (int)$fb->likes);
    }
2
ndru

Wie für die Bearbeitung (führende Nullen):

/* will print "001" */
echo sprintf( "%03d", 1 );

/* will print "00097" */
echo sprintf( "%05d", 97 );

Zum Anfangsproblem:

Natürlich glaube ich Ihrer Problembeschreibung, aber wenn 'orderby' => 'meta_value' keine doppelten Ergebnisse liefert, sollte auch keine Änderung an 'orderby' => 'meta_value_num' erfolgen.
Wenn das die einzige Änderung ist, die Sie vornehmen, sollte nur die Reihenfolge ändern ...

1
Johannes Pille

Ich habe es jetzt behoben - ich habe gerade in das Feld meta_value geschrieben, wobei führende Nullen bereits angehängt waren, und den normalen Befehl orderby = meta_value verwendet. So, jetzt habe ich die Likes bereits mit führenden Nullen in meiner Datenbank.

$myfblikes = sprintf("%04s", (int)$fb->likes);
        update_post_meta($post->ID, 'fb_likes', $myfblikes);

Danke für die Hilfe. Ich verstehe den Punkt völlig, dass es auch mit meta_value_num funktionieren sollte, weil dieser Befehl wirklich nur die Nachbestellung ändern sollte. Aber irgendwie nicht - also muss es ein Problem mit meinem meta_value_num geben. Ich weiß nicht einmal, wie ich Raw SQL ausgeben soll, da ich zum ersten Mal mit PHP/MySQL gearbeitet habe;)

Wie auch immer, ich bin froh, dass es funktioniert.

0
ndru