Ausblenden von benutzerdefinierten Feldern, wenn sie leer sind

Ich versuche, eine function zu erstellen, um Daten aus zwei benutzerdefinierten Feldern nach dem Eintragstitel hinzuzufügen. Ich bekomme es richtig angezeigt, wenn diese Felder ausgefüllt sind. Die Felder sind eine Bildquelle URL und eine URL, zu der das Bild verlinken muss.

Das Problem ist, dass es Platz beansprucht, selbst wenn die benutzerdefinierten Felder leer sind. Meine Php-Fähigkeiten sind nicht gut genug, um herauszufinden, wie ich das ändern kann. Ich habe einen Check hinzugefügt, aber jetzt erscheinen die Felder überhaupt nicht mehr.

Hoffe, dass mir jemand dabei helfen kann. Was ich bis jetzt bekommen habe ist:

//Add custom field image after entry title function headway_title_button() { $check = get_post_meta($post->ID, 'titel_knop'); if( !empty( $check[""] ) ) { return printf( '
' ,get_post_meta( get_the_ID(), 'titel_knop_url', true ) ,get_the_title() ,get_post_meta( get_the_ID(), 'titel_knop', true ) ); } else { return printf('
'); } } add_action( 'headway_after_entry_title', 'headway_title_button' );

Solutions Collecting From Web of "Ausblenden von benutzerdefinierten Feldern, wenn sie leer sind"

Es gibt ein paar Probleme, die Ihren Code kaputt machen:

  • $post existiert nicht, Sie müssten es mit global importieren oder verwenden Sie einfach get_the_ID wie Sie es bereits tun
  • $check[''] wird nichts zurückgeben, da es auf einen undefinierten Index zugreifen wird, außerhalb des empty Konstrukts würde es eine Warnung auslösen

Ich kann es momentan nicht testen, aber das sollte zumindest syntaxtechnisch funktionieren (und entsprechend der API-Dokumentation theoretisch auch funktional):

 function headway_title_button() { $post_id = get_the_ID(); if(metadata_exists('post', $post_id, 'titel_knop')) { printf( '
', get_post_meta($post_id, 'titel_knop_url', true) get_the_title(), get_post_meta($post_id, 'titel_knop', true) ); } }

Es könnte jedoch effizienter sein, alle Metadaten gleichzeitig abzurufen. Aber WordPress ist nicht schlau genug, es zu entserialisieren, wenn kein einzelner Wert angefordert wird. Sie müssten das also selbst tun (wenn nötig, abhängig von den Metadaten):

 function headway_title_button() { $meta = get_post_meta(get_the_ID()); if(!empty($meta['titel_knop'][0])) { printf( '
', maybe_unserialize($meta['titel_knop_url'][0]), get_the_title(), maybe_unserialize($meta['titel_knop'][0]) ); } }

Veränderung,

 if( !empty( $check[""] ) ) 

Zu,

 if( $check != '' ) 

Vollständig,

 //Add custom field image after entry title function headway_title_button() { $check = get_post_meta($post->ID, 'titel_knop', true); if( $check != '' ) { return printf( '
' ,get_post_meta( get_the_ID(), 'titel_knop_url', true ) ,get_the_title() ,get_post_meta( get_the_ID(), 'titel_knop', true ) ); } else { return printf('
'); } } add_action( 'headway_after_entry_title', 'headway_title_button' );

Anmerkungen

Sie können auch tun,

 if( !empty( $check ) ) 

Aber beachten Sie, dass, wenn das benutzerdefinierte Feld zufällig enthält,

  • 0 (0 als Ganzzahl)
  • 0.0 (0 als Gleitkommazahl)
  • “0” (0 als String)

Das bedingte !empty() wird als FALSE ausgewertet, was bedeutet, dass das obige auch als leere Werte behandelt wird, wenn die PHP-function empty() verwendet wird.

Während es durchaus akzeptabel ist zu verwenden, lohnt es sich zu wissen, wie es Werte auswertet.

Es gibt auch isset() , die auf die gleiche Weise verwendet werden kann,

 if ( isset ( $check ) ) 

Aber im Falle von isset() variiert sein Verhalten. Auch hier ist es absolut akzeptabel zu verwenden, aber $check != '' Ist meine Empfehlung in diesem Fall.