Metadaten automatisch zu Posts oder mehreren Query-Hilfen hinzufügen

Ich betreibe ein Event-Unternehmen, dessen Website ein benutzerdefiniertes Post-Typ-System für Posts (Blog), Events und Tickets verwendet, die alle als CPTs in der database gespeichert sind.

Auf der Gästeliste (die “ticket” benutzerdefinierte Beiträge zählt, wenn die Nummer der Veranstaltung [post] = = aktueller Beitrag) möchte ich ein “Neukunde” -Tag implementieren, um den Gastgeber aufzufordern, nach ihnen Ausschau zu halten.

Es gibt zwei Probleme damit: Sie können nicht nach dem ältesten “Ticket” -Posten suchen, da sie diese möglicherweise nicht in chronologischer Reihenfolge gekauft haben, und Sie können nicht alle Tickets erhalten und nach Postnummer bestellen, da sie möglicherweise nicht zur Website hinzugefügt wurden in chronologischer Reihenfolge entweder.

Die zwei Möglichkeiten, die ich mir vorstellen kann, sind entweder:

(1) Durch mehrere Sucharrays, zB Abfrage TICKET> um USER> alle TICKETS für USER NUMMER zu erhalten> EVENT [POST] NUMMERN von diesen Tickets (als Meta gespeichert)> EVENTS per Postnummer erhalten> – SORT ARRAY BY DATE von event> WENN ERSTES EVENT IN DIESEM ARRAY == CURRENT EVENT [post] NUMMER echo NEUER KUNDE
Das scheint ein sehr langer Weg zu sein und ich zögere ein wenig, all diese Arbeit als relativ unerfahrener Programmierer zu machen.

(2) Irgendwie nachträglich ein Meta-Daten-Tag “event of event” zu allen Ticket-Posts hinzuzufügen und dann kann ich sie direkt abfragen …. Viel einfacher, aber ich bin mir nicht sicher, wie ich dann das 010214 re-translate, so dass die Abfrage erkennt es ist eher ein Datum als eine Nummer …

Nummer (2) wäre ideal, aber ich kann keine Informationen darüber finden, wie all diese Daten rückwirkend und dann für zukünftige Beiträge hinzugefügt werden – alle Daten sind im System vorhanden, aber die Suche nach Informationen führt mich zu Leuten, die darüber sprechen gehen zurück und Batch hinzufügen Suchmaschine Meta, nicht WordPress Post Meta.

Ich begann mit der Programmierung von Nummer (1) und realisierte den Berg vor mir und hielt an – wenn irgendjemand diesen Teil des Codes möchte, kann ich ihn trotzdem posten …

Vielen Dank im Voraus, Entschuldigung für die lange Frage – versuchen, Helfer mit so viel Informationen wie möglich auszustatten.

EDIT: Ein Weg um dies könnte tatsächlich die Ereignisseite selbst zu verwenden, da jedes $event und $ticket dort aufgerufen werden.

Struktur könnte sein:

 write meta to `$ticket` with meta key = 'event_date' value = $eventDay [= date( 'dmy', $event->start );] 

Dann eine einfache Abfrage, um alle Benutzertickets zu finden und nach diesem neuen Meta-Tag ‘event_date’ zu sortieren.

Wenn die erste Eintragsereignisnummer == aktueller Beitrag ist, BINGO!

Solutions Collecting From Web of "Metadaten automatisch zu Posts oder mehreren Query-Hilfen hinzufügen"

Dadurch werden alle _ticket_date und ein _ticket_date Feld aktualisiert. Ich bin mir jedoch noch nicht sicher, wie ich das tatsächliche Datum abrufen soll. Sie müssen mir dafür ein wenig mehr Informationen geben. Angenommen, es funktioniert ordnungsgemäß, würde ich Folgendes einmal ausführen und dann entfernen. Du könntest einen ähnlichen Effekt erzielen, indem du einen Transient einstellst, aber ich werde jetzt nicht darauf eingehen.

 function update_ticket_meta(){ $args = array( 'post_type' => 'ticket', 'nopagination' => true ); $tickets = new WP_Query( $args ); if ( $tickets->have_posts() ) while( $tickets->have_posts() ){ $tickets->the_post(); // get the event ID- adjust meta key as needed $event_id = get_post_meta( $post->ID, '_event', true ); // get the date from the event post $event = Ai1ec_Events_Helper::get_event($event_id); if( $event ) { // get date in desired format- YYYYMMDD should be the easiest to query by $date = date( 'ymd', $event->start ); if( $date ) update_post_meta( $post->ID, '_ticket_date', $date ); } } } add_action( 'admin_init', 'update_ticket_meta' ); 

save_post-{post-type} das Meta zu speichern, wenn ein Ticket gespeichert wird, können Sie eine Aktion zu save_post-{post-type} hinzufügen. Dies wird immer noch einige Codierungen zu tun, wenn Sie das Datum Meta-Feld des Ereignisses ändern.

 // save some meta when a ticket is saved function add_ticket_date( $post_id ){ if( !class_exists( 'Ai1ec_Events_Helper' ) ) return; // get the event ID- adjust meta key as needed $event_id = isset( $_POST['_event'] ) ? (int) $_POST['_event'] : -1; // get the date from the event post- again adjust meta key $event = Ai1ec_Events_Helper::get_event($post->ID); // get date in desired format- YYYYMMDD should be the easiest to query by $date = date( 'ymd', $event->start ); if( $date ) update_post_meta( $post_id, '_ticket_date', $date ); } add_action( 'save_post-ticket', 'add_ticket_date' ); 

Damit,

Ich habe das verstanden, indem ich die function eingefügt habe, um die Metadaten auf den Ereignisseiten selbst hinzuzufügen (in event-single.php). Dies bedeutet, dass Sie zum Zeitpunkt der Erstellung des Tickets nicht am Datum des Ereignisses festgehalten werden, wenn Sie beispielsweise das Datum des Ereignisses ändern. Bei jedem Zugriff auf die Seite wird das Datum auf die betreffenden Tickets übertragen.

Ich habe die Datumsmetadaten im yymmdd-Format gespeichert. Wenn Sie sie also numerisch bestellen, erzeugt sie immer noch das korrekte Ergebnis, ohne dass Sie sie erneut in Datumsangaben übersetzen müssen.

(Dies ist vielleicht nicht perfekt – ich bin ein Anfänger Coder und habe mich selbst php durch die Notwendigkeit der Aufrechterhaltung einer WordPress-Website gelehrt)

Also das habe ich getan.

  ## PUT EVENT DATE DETAILS ONTO TICKET POST & WORK OUT **NEW CUSTOMERS** ## $eventDay = date( 'ymd', $event->start ); $tixID = $ticket['id']; $eventKey = event_date; update_post_meta($tixID , $eventKey , $eventDay ); #This has added the event date ($eventDay) to the Ticket Meta // Now we have to search to see which event is the first $useremail = $ticket['email']; $user = get_user_by( 'email', $useremail ); $IDuser = $user->ID; $args = array( 'posts_per_page' => 1, 'post_type' => 'ticket', 'author' => $IDuser, 'meta_key' => 'state', 'meta_value' => 'complete', 'orderby' => 'event_date', 'order' => 'ASC', ); $first_post = new WP_Query($args); // '
'.print_r($first_post).'

'; /* Use this to test the array produced */ if ($first_post->have_posts()) { $first_post->the_post(); $firstID = get_the_ID(); // This gets the post number of the first 'ticket' post $firsteventdate = get_post_meta( $firstID, 'event_date', true); //This uses that number to extract the date of the first event. wp_reset_postdata(); } if ($firsteventdate == $eventDay) { ?> **NEW CUSTOMER** < ?php } else { ?> Old < ?php } ?>