Wie bekomme ich einen einzelnen Wert vom get_post_meta () Array von Werten?

Ich versuche, ein Plugin anzupassen, um die IP des aktuellen Benutzers gegen vorherige IP-Werte zu überprüfen, die vom Plugin gesammelt und gespeichert werden.

Das Plugin sammelt User Votes für einen benutzerdefinierten Posttyp namens “competitors”. Das Plugin sammelt auch die IP des Benutzers für jede Stimme, um mehrere Stimmen des Benutzers bei einem bestimmten Konkurrenten zu verhindern.

Dies ist der Code, den das Plugin zum Speichern verwendet:

  1. die letzte Voter-IP in einen $ key namens “lastIP” in der databasetabelle wp_postmeta
  2. alle IPs, die über den Wettbewerber in den nächsten $ Schlüssel gewählt haben, genannt “history” in der wp_postmeta databasetabelle (also könnten Dutzende von IPs im “history” Schlüssel-Array zusammen mit einem Zeitstempel für jeden und einem von zwei anderen gespeichert sein) Werte abhängig vom Abstimmungstyp)

Vorhandener Code zum Speichern der Werte – funktioniert super:

function wps_update_history ( $thiscompetitor, $field, $value, $lastIP ) { update_post_meta($thiscompetitor, 'lastIP', $lastIP); $current_history = get_post_meta($thiscompetitor, 'history', true); $current_history_array = unserialize($current_history); //push new values on $current_history_array[] = array ( current_time( "timestamp" ), $lastIP, $field, $value ); update_post_meta($thiscompetitor, 'history', serialize( $current_history_array )); } 

Ich habe versucht, die IP-Verlaufsliste zu erhalten (um zu überprüfen, ob der aktuelle Benutzer in der Liste ist), aber es funktioniert nicht (innerhalb der Post-Schleife, mit wp_query als orderby=>random ) – von diesem Beitrag hier

 $hasIP = false; $histMeta = get_post_meta($post->ID, 'history', false); foreach($histMeta as $array) { if(isset($array['lastIP'])) { $hasIP = $array['lastIP']; break; } } echo $hasIP; 

Ich habe sogar versucht, das gesamte History-Array (zum Debuggen) zu simulieren, aber das funktioniert nicht.

  echo $histMeta; 

Letztendlich möchte ich diese Logik machen:

 if (current_user has their IP in this $post=>ID wp_postmeta 'history' key array) { // don't show or let them vote on this $post=>ID } else { // try another $post=>ID } 

Irgendwelche Vorschläge, wie ich diese Logik oben erreichen kann?

Solutions Collecting From Web of "Wie bekomme ich einen einzelnen Wert vom get_post_meta () Array von Werten?"

Lassen Sie uns zuerst sagen, dass Sie anstelle von echo var_dump oder print_r zum Debuggen verwenden sollten. Auf den ersten Blick sehe ich, dass Sie ein sequenzielles Array $current_history_array aber Sie versuchen, es als assoziatives Array zu verwenden.

 $current_history_array[] = array ( current_time( "timestamp" ), $lastIP, $field, $value ); 

Der obige Code generiert ein sequenzielles Array, zum Beispiel:

 array( '1424680884', '77.77.777.777', $field, $value ); 

Danach versuchen Sie, mit $array['lastIP'] auf den lastIP Schlüssel $array['lastIP'] aber dieser Schlüssel existiert nicht. Stattdessen wird die letzte IP im Index 2: $array[2] gespeichert. Wenn Sie keine assoziativen Arrays verwenden möchten, müssen Sie sie wie folgt erstellen:

 $current_history_array[] = array ( //The structure is key => value 'time' => current_time( "timestamp" ), 'lastIP' => $lastIP, 'field' => $field, 'value' => $value ); 

Der obige Code generiert ein Array wie folgt:

 array( //The structure is key => value 'timestamp' => '1424680884', 'lastIP' => '77.77.777.777', 'field' => $field, 'value' => $value ); 

Jetzt können Sie auf 'lastIP' als $array['lastIP'] .

Beachten Sie auch, dass Sie serialisierte Daten speichern. Sie müssen sie daher vor der Verwendung als Array deserialisieren:

 $hasIP = false; $histMeta = get_post_meta($post->ID, 'history', false); foreach($histMeta as $array) { $array = unserialize( $array ); if(isset($array['lastIP'])) { $hasIP = $array['lastIP']; break; } } echo $hasIP;