Wordpress/PHP: vill nån snabbt förklara hur det här funkar?

Trädvy Permalänk
Medlem
Registrerad
Aug 2011

Wordpress/PHP: vill nån snabbt förklara hur det här funkar?

Jag är i en process där jag lär mig mer och mer PHP varje dag. Nu har jag löst ett problem men jag förstår inte riktigt varför det funkar och Wordpress codex är lite ogenomtränglig. Är det nån som har lust att lägga två minuter på att förklara hur logiken går i det nedanståene? Skulle uppskattas mycket.

Jag har ett gäng events men från queryn vill jag exkludera alla event som redan har ägt rum.

$the_query = new WP_Query(array( 'post_type' => 'event', 'meta_key' => 'event_date', 'meta_value' => date( "Ymd" ), 'meta_compare' => '>=', 'order' => 'ASC', 'orderby' => 'meta_value_num' ) );

Det är förstår meta_value och meta_compare som exkluderar såna event som redan passerat, men
1) hur "vet" meta_compare att den ska jämföra meta_value med meta_key, och dessutom,
2) att den inte ska jämföra åt "andra hållet" meta_key med meta_value (för då skulle ju allt i framtiden exkluderas istället)?

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Feb 2006

1) Det är så koden är skriven. Det står definerat.
2) Det står också definerat i vilken ordning det sker.

Här står allt om hur det går till https://codex.wordpress.org/Class_Reference/WP_Query

Exempel:
meta_compare (string) - Operator to test the 'meta_value'. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' or 'RLIKE'. Default value is '='.

Trädvy Permalänk
Medlem
Registrerad
Aug 2011
Skrivet av Killbom:

1) Det är så koden är skriven. Det står definerat.
2) Det står också definerat i vilken ordning det sker.

Här står allt om hur det går till https://codex.wordpress.org/Class_Reference/WP_Query

Exempel:
meta_compare (string) - Operator to test the 'meta_value'. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' or 'RLIKE'. Default value is '='.

Det var den sidan jag försökte förstå. Jag såg också exemplet du citerar, men inte nånstans där det framgår vad meta_value testas mot. Jag försöker inte vara snorkig, jag försöker bara förstå.

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Feb 2006

Det framgår om man läser all text här: https://codex.wordpress.org/Class_Reference/WP_Meta_Query#Acc...

key jämförs med value. Är det dokumentationen oklar, vilket inte är oväntat då du inte betalat för den, är det ju bara att läsa källkoden för metoden så inser du hur de använder de olika parametrarna.

EDIT: Bara så du inte har några förutfattade meningar, jag har aldrig satt mig in i Wordpress och skulle inte ta i PHP med tång i dagens läge. Någon som använder det kan säkert länka roligare / bättre dokumentation. Däremot kan man ju skaffa sig vana och kunskap att läsa denna typen av dokumentation för att snabbt kunna förstå fluffet, oavsett vad det handlar om.

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Maj 2004

Den bakomliggande koden är helt enkelt definierad så att värdet på fältet definierat i meta_key jämförs mot meta_value med meta_compare.

Om du alls känner till SQL kan du tänka dig något i stil med

SELECT * FROM post_type WHERE meta_key meta_compare meta_value ORDER BY orderby order

Enligt dokumentationen innebär orderby = 'meta_value_num' att den sorterar enligt värdet på fältet definierat i meta_key, men att den sorterar numeriskt (annars skulle 34 komma före 4, t.ex.).

Detta ger då ungefär följande (då date("Ymd") ger dagens datum):

SELECT * FROM event WHERE event_date >= '20160502' ORDER BY event_date ASC