get_term_meta gibt false im Widget zurück

Ich stecke fest und hoffe, dass du mir helfen kannst. Ich arbeite an einem Sidebar-Widget, das WooCommerce-Shops zeigt (ich verwende die Plugin Woocommerce-Produktanbieter, das offizielle Woocommerce-Plugin für mehrere User-Shops). Diese Shops sind grundsätzlich Begriffe innerhalb der wcpv_product_vendors Taxonomie.

Jetzt, wenn ich einen Laden öffne (-> get_term_meta( term_id, 'vendor_data', true ) den einzelnen Begriff) funktioniert die function get_term_meta( term_id, 'vendor_data', true ) gut und gibt mir ein assoziatives Array mit allen meinen Werten, die in der termeta-Tabelle für meinen meta_key ‘vendor_data’ gespeichert sind .

Aber wenn ich in meinem Widget bin und ich durch eine Liste von Geschäften iteriere, und ich get_term_data( id, 'vendor_data', true) das Ergebnis false (ich gebe der function die gleichen Argumente wie auf der Shop-Seite). Wenn ich andererseits get_term_data( id, '', true) bekomme ich das Ergebnis, das ich unten eingefügt habe. Warum das? Wie kann ich dieses Problem lösen, da es sich auch auf ein Widget bezieht, das mit dem ursprünglichen Produktanbieter-Plugin geliefert wird (was aufgrund dieses Problems nicht funktioniert).

Hier der var_dump(get_term_data( id, '', true )) :

 array(1) { ["vendor_data"]=> array(1) { [0]=> string(369) "a:11:{s:5:"notes";s:0:"";s:4:"logo";s:5:"76052";s:7:"profile";s:63:"Description.";s:5:"email";s:16:"shop@xxx.de";s:6:"admins";s:3:"103";s:10:"commission";i:0;s:15:"commission_type";s:5:"fixed";s:6:"paypal";s:0:"";s:20:"per_product_shipping";s:3:"yes";s:15:"enable_bookings";s:2:"no";s:14:"instant_payout";s:2:"no";}" } } 

Mit dem Filter var_dump( get_term_data( id, 'vendor_data', true )) :

 bool(false) 

Der meta_value für den Schlüssel vendor_data in wp_termmeta :

 a:11:{s:5:"notes";s:0:"";s:4:"logo";s:5:"76052";s:7:"profile";s:63:"Description.";s:5:"email";s:16:"shop@xxx.de";s:6:"admins";s:3:"103";s:10:"commission";i:0;s:15:"commission_type";s:5:"fixed";s:6:"paypal";s:0:"";s:20:"per_product_shipping";s:3:"yes";s:15:"enable_bookings";s:2:"no";s:14:"instant_payout";s:2:"no";} 

BEARBEITEN:

Ich habe das Problem auf die function get_metadata , in der am Ende der function die folgenden Prüfungen durchgeführt werden:

 if ( ! $meta_key ) { return $meta_cache; } if ( isset($meta_cache[$meta_key]) ) { if ( $single ) return maybe_unserialize( $meta_cache[$meta_key][0] ); else return array_map('maybe_unserialize', $meta_cache[$meta_key]); } 

Dies erklärt: Wenn ‘vendor_data’ als Meta_key leer gelassen wird, wird das 2d-Array wie oben beschrieben zurückgegeben. Wenn es gesetzt ist und $ single wahr ist (was ist, da $ single der dritte Parameter ist), wird maybe_unserialize(..) . Ich überprüfte dies, indem ich $meta_cache[$meta_key][0] ohne die unserialize-function zurückgab und das Ergebnis ist die exakte Textzeichenfolge, die in der database gespeichert ist. Dies bedeutet, dass die function may_unserialize false zurückgibt. Aber das ist die function:

 function maybe_unserialize( $original ) { if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in return @unserialize( $original ); return $original; 

}

Meiner Meinung nach gibt es keine Möglichkeit, dass diese function in genau diesem Fall den Wert false zurückgibt, da 1) die function korrekt funktioniert, wenn sie nicht vom Widget aufgerufen wird und sich die Daten nicht geändert haben, und 2) wenn Daten nicht richtig serialisiert wurden is_serialized würde false zurückgeben und daher würde die ursprüngliche Eingabe zurückgegeben (und nicht false ).

Bitte hilf mir: Was ist hier los?

Solutions Collecting From Web of "get_term_meta gibt false im Widget zurück"

Ich habe das Problem gefunden. Irgendwie war meine serialisierte Zeichenfolge beschädigt. Beim Versuch, die Daten im WP-Backend zu bearbeiten, wurde ein Fehler ausgegeben und die Daten wurden zurückgesetzt. Unserialize funktioniert jetzt gut und alles ist in Ordnung. Ich weiß nicht, ob das irgendjemandem helfen könnte, der sich in einer ähnlichen Situation befindet, deshalb werde ich das jetzt nicht löschen. Wenn ein Mod denkt, dass dies gelöscht werden soll, kannst du es löschen oder mich wissen lassen und ich werde es selbst löschen.