WP_Query wenn meta_value als serialisiertes Array gespeichert wird

Lesezeit: 3 Minuten

Ich hole Woocommerce-Produkte manuell ab.

Das Problem ist, dass ich ein benutzerdefiniertes Feld für Produkte habe, dh _locations. Ein Produkt kann zu mehreren Standorten gehören, daher habe ich im Formular zum Hinzufügen von Produkten in wp-admin eine Mehrfachauswahlliste bereitgestellt.

Unten ist die Funktion, mit der ich den meta_value speichere

function woo_add_custom_general_fields_save( $post_id ){        
    // Select
    $woocommerce_select = $_POST['_locations'];
    if( !empty( $woocommerce_select ) )
        update_post_meta( $post_id, '_locations', esc_attr(maybe_serialize($woocommerce_select )) );
}

Beachten Sie, dass ich die Daten für meta_value serialisiert habe, sodass ich nur einen eindeutigen Schlüssel habe _locations mit allen damit verbundenen Standortwerten.

Jetzt tritt das Problem auf, wenn ich Produkte hole

$args = array(
      'post_type' => 'product',
      'product_cat' => $food_category->slug,
      'meta_key' => '_locations', 
      'meta_value' => 'newyork'   
     );
     $loop = new WP_Query($args);

Ich möchte Produkte nur für erhalten newyork aber in der Datenbank wird es als serialisiertes Array gespeichert

s:69:"a:2:{i:0;s:7:"newyork";i:1;s:13:"massachusetts";}";

Wie kann ich diese Abfrage veranlassen, nur Produkte aus New York abzurufen?

Vielen Dank

Versuchen:

$args = array(
  'post_type' => 'product',
  'product_cat' => $food_category->slug,
  'meta_query' => array(
     array(
        'key'     => '_location',
        'value'   => '%newyork%',
        'compare' => 'LIKE',
     ),
   ),
 );

  • Ja, es ist hilfreich 🙂 Danke. Aber denken Sie, dass es so gemacht werden sollte? Ich hätte nichts gegen einen anderen Ansatz als den Standard von WordPress.

    – Rahel

    17. Oktober 2014 um 9:23 Uhr

  • Ja, wp query ist nur ein Wrapper für PHP-Mysql-Funktionen, es kann immer noch zwischengespeichert werden usw.!

    – David

    17. Oktober 2014 um 11:19 Uhr

  • Meiner Erfahrung nach wird % automatisch hinzugefügt, sodass Sie nicht %newyork% schreiben müssen

    – Luca Reghellin

    28. November 2016 um 15:20 Uhr

  • In der Tat, gerade jetzt, wenn ich die benutze % es funktioniert nicht

    – Brasilo

    26. Juli um 14:00 Uhr


  • Diese Antwort ist sehr alt und ich habe seit etwa dieser Zeit nicht mehr mit WP gearbeitet, aber aus dem Gedächtnis funktionierte das %-Zeichen nur mit dem Like-Operator. Es kann durchaus sein, dass in späteren Versionen der %-Operator für den Like-Operator hinzugefügt wird. Es gibt eine Möglichkeit, die SQL-Abfrage auszugeben, wenn Sie sie recherchieren.

    – David

    26. Juli um 21:40 Uhr

Ich hatte ein ähnliches Problem und habe es mit dem gelöst serialize(). Unten ist das Beispiel.

$args = array(
  'post_type' => 'product',
  'product_cat' => $food_category->slug,
  'meta_query' => array(
     array(
        'key'     => '_location',
        'value'   => serialize( array( 'newyork' ) ),
        'compare' => 'LIKE',
     ),
   ),
 );

$args = array(
  'post_type' => 'product',
  'product_cat' => $food_category->slug,
  'meta_query' => array(
     array(
        'key'     => '_location',
        'value'   => '%"newyork"%', // note the quotes
        'compare' => 'LIKE',
     ),
   ),
 );

Verwenden Sie die Anführungszeichen, um Fälle wie “newyorkcity”, “newyorkcounty”…

Es mag nicht der Fall sein, wenn Sie die Namen der Städte speichern, aber Sie werden ein großes Problem haben, wenn Sie beispielsweise die IDs für die Städte speichern.

Beispiele:

1. a:6:{i:0;s:3:"234";i:1;s:3:"539";i:2;s:3:"305";i:3;s:3:"541";i:4;s:3:"385";i:5;s:3:"588";}
2. a:2:{i:0;s:3:"182";i:1;s:3:"539";}
3. a:1:{i:0;s:3:"267";}

Wenn Sie suchen:

  • 5, erhalten Sie die Beispiele 1 & 2, wenn Sie überhaupt keine Ergebnisse erhalten sollten;
  • “5”, Sie erhalten keine Ergebnisse, wie angegeben

1352460cookie-checkWP_Query wenn meta_value als serialisiertes Array gespeichert wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy