Beiträge von Andreas 2012

    Leider klappt es immer noch nicht. Mein Code sieht jetzt folgendermaßen aus:

    Woran könnte es liegen?

    Hallo mensmaximus,
    danke für deine wie immer superschnelle Antwort!

    30 Einträge hatte ich erst mal eingetragen, um zu sehen, ob das ganze überhaupt funktioniert.
    Die taxonomy ist nicht hierarchisch. Und ich hatte mal irgendwo gelesen, dass man wp_set_object_terms zusätzlich nehmen muss, wenn man den Term zuweisen will. Aber dann ist das ja um so besser, wenn es so reicht.

    Ist denn der Rest mit der cronjob-Funktion soweit in Ordnung? Also bei Abspeichern der functions.php müsste das dann automatisch anlaufen?

    Hallo Wordpress-Freunde,

    ich habe eine Funktion zur Altersberechnung, welche beim Abspeichern eines Custom Post Type automatisch einen Term einer Custom Taxonomy zuordnet. Das funktioniert auch soweit gut. Nun möchte ich aber nachträglich ca. 10.000 bereits existierenden Posts mit wp_schedule_event den Term automatisch zuordnen lassen.

    Das folgende Skript, das ich mir für diese Automation zusammengebastelt habe, funktioniert aber leider nicht. Zur Demonstration des Codes habe die eigentliche Funktion, die ich automatisieren möchte, erst mal weggelassen. Es geht wie gesagt erst mal darum, das Abspeichern bzw. Zuordnen der Terms zu automatisieren.

    Hat jemand eine Idee, was an dem Code falsch sein könnte?

    Herzlichen Dank für eure Hilfe im voraus!

    Andreas

    Also kurz zum Hintergrund, hatte ich eben vergessen: habe eine Datenbank mit ca. 10.000 Personen-Einträgen und filtere für jedes Alter (z.B. 50) mit o.g. Code die entsprechenden Personen raus, sodass ich eine Liste bekomme mit Personen, die z.B. aktuell 50 Jahre sind oder aber im Alter von 50 Jahren verstorben sind. Das Alter für die Verstorbenen kann ich natürlich fest in der Tabelle speichern, für die Lebenden aber nicht, da das Alter zum aktuellen Zeitpunkt ja erst berechnet wird. So muss ich wenigstens für die lebenden Personen die SQL-Abfrage machen.
    Der Transienten-Cache hat schon etwas an Geschwindigkeit gebracht, daher würde ich das eigentlich gern verwenden. Es sei denn, es gibt eine andere Möglichkeit der Performance-Verbesserung...

    Danke nochmals :-)

    Ja, du hast recht, es ist wohl das sinnvollste, bei verstorbenen Personen das Todesdatum gleich mit in die Tabelle zu schreiben, dann braucht man das einfach nur abzurufen.

    Aber wo genau müsste ich denn die Variable $total eingefügen, damit kein Error erzeugt wird, wenn es schon einen Transienten gibt?

    Und wie könnte man alternativ auf $total verzichten? Ich hatte aus dem paginate_links mal spaßeshalber die Zeile für total rausgeschmissen, dann verschwindet die Pagination aber wieder. Da bräuchte ich noch mal einen Denkanstoß ;-)

    Hallo mensmaximus,

    sorry, dass ich mich erst jetzt melde, aber ich hatte auf eine Email-Benachrichtigung gewartet, aber wohl die Benachrichtigungsfunktion nicht aktiviert ;-)

    Vielen Dank für deine Antwort, du hast (mal wieder) meinen Tag gerettet :-D

    Ich habe die Definition von $query, $total_query und $total vor die if-Schleife gesetzt, und jetzt klappt es!
    Jetzt erklärt sich auch die Fehlermeldung, die QueryMonitor mir bzgl. der unbekannten Variable $total ausgegeben hat. Ich bin da partout nicht drüber gefallen.

    Aber bei der Gelegenheit muss ich dich gleich noch mal wegen der Performance des von mir verwendeten SQL-Befehls fragen, denn den Inhalt von $query hatte ich der besseren Übersicht wegen vereinfacht.

    Der originale SELECT-Befehl lautet folgendermaßen:

    Mit dieser query filtere ich über benutzerdefinierte Felder, welche ja in der wp_postmeta liegen, alle Personen aus der Datenbank, die ein bestimmtes Alter haben. Dabei muss ich darauf Rücksicht nehmen, ob die Person noch lebt oder verstorben ist. Die Variable $alter lese ich aus der URL aus.

    Trotz der korrekt gesetzten Transienten wird mir über Query Monitor aber immer noch angezeigt, dass es sich um einen "langsamen Query" handelt. Ich hatte den SELECT-Befehl vorher nicht mit dem Operator "OR" ausgeführt, sondern UNION benutzt, aber da war die Performance noch schlechter.

    Leider lässt sich der aufwendige Code aufgrund der Struktur in der wp_meta-Tabelle, wo es ja nur ein Feld meta_key und meta_value gibt, nicht anders bewerkstelligen, oder?

    Hast du einen Tipp, wie ich die Abfrage trotzdem schneller gestalten könnte?

    Schon mal herzlichen Dank im voraus für deine Meinung!

    Andreas

    Hallo Wordpress-Freunde,

    ich habe eine überlange Liste, die ich in mehrere Seiten splitten möchte. Dazu benutze ich folgenden Code:

    Dieser Code funktioniert auch einwandfrei, die Seitenpaginierung am Ende der Seiten wird korrekt angezeigt.

    Wenn ich jedoch die Auskommentierung für den Transient-Cache entferne, um den SQL-Code zu cachen, verschwindet die Seitenpaginierung. Die Transienten werden aber korrekt erstellt, d.h. die Variable $page wird auch wie gewünscht übergeben. Also die Namen lauten dann je nach Seite test1, test2, test3 usw. Das habe ich mit dem Plugin "Transienten-Manager" überprüft.

    Woran kann es dann liegen, dass die Seitenpaginierung nicht angezeigt wird?

    Vielen Dank für eure Hilfe im voraus :-)

    Andreas

    Die 55 war natürlich nur ein Beispiel ;)
    Ich habe eine variable $alter, die ich aus jedem Dateipfad der einzelnen Alter-Jahreszahlen auslese (.../55-jahre-alt/) und die ich dann im besagten Codeschnipsel einfüge:

    Code
    $start = date( 'Y-m-d', strtotime( '-'.($alter+1).' years +1 day', time() ) );

    Das funktioniert, wenn ich als Bezugspunkt den heutigen Tag nehme. Sobald ich bei verstorbenen Personen jedoch den Startpunkt in die Vergangenheit verschiebe, bin ich auf das Feld 'geburtsdatum' UND das Feld 'sterbedatum' angewiesen.

    Mit reinem SQL funktioniert das so korrekt:

    Allerdings wollte ich gern auf alle Elemente wie get_permalink() oder get_post_meta($post->ID, 'geburtsort', true) zugreifen und daher die Ausgabe mit wp_query machen:

    Code
    if ( $alter->have_posts() ) :
    while ( $alter->have_posts() ) : $alter->the_post();


    Mit der Ausgabe über foreach( $results as $result ) konnte ich besagte Elemente nicht abrufen...

    Ich muss gerade selbst noch mal die Herangehensweise bzw. die Logik überdenken, das ist für mich das eigentlich knifflige.

    Bei noch lebenden Personen ist der Bezugspunkt der heutige Tag, da rechnet man anhand der Formel einfach zurück und gibt mittels der date-range $start und $end alle in Frage kommenden Personen aus.

    Sobald eine Person im Feld 'sterbedatum' nicht mehr den Wert '0000-00-00' stehen hat, müsste dann der Bezugspunkt der Wert des 'geburtsdatums' zu einem x-beliebigen Punkt in der Vergangenheit sein. Die zeitliche Differenz zu dem Wert aus 'sterbedatum' bildet dann das Alter. Aber diese Range ist ja je nach Person variabel.

    Wie kann ich dies trotzdem mit wp_query umsetzen, sodass ich schon on-the-fly sortieren kann, um die entsprechenden Personen auszugeben? Also analog zu der SQL-Variante mit Timestampdiff(YEAR, geburtsdatum, sterbedatum)?

    Ich könnte natürlich einfach ALLE Personen der Datenbank abrufen und dann per PHP aussortieren. Aber es handelt sich um fast 10.000 Personen, daher denke ich, ist das nicht der richtige Weg, allein wegen der Performance...