dacă get_post_meta este gol execută ceva

26 iun. 2012, 22:32:13
Vizualizări: 55K
Voturi: 5

Am nevoie de opusul acestui cod:

<?php if ( get_post_meta($post->ID, 'price_list_category1', true) )  : ?>style="display:none;"<?php endif; ?>

Cu alte cuvinte, vreau ca style="display:none;" să apară doar când metadatele nu există.

Am crezut că ar fi simplu ca if ( get_post_meta($post->ID, 'price_list_category1', true dar acest true/false se dovedește a fi ceva complet diferit.

Aveți vreo idee?

Mulțumesc.

0
Toate răspunsurile la întrebare 4
4
10

Ai putea folosi funcția empty în interiorul condiției if astfel:

<?php if( empty( get_post_meta( $post->ID, 'price_list_category1', true ) ) ) : ?>style="display:none;"<?php endif; ?>

Codul de mai sus returnează o eroare, ar trebui să atribui valoarea returnată unei variabile. Vezi modificarea mea mai jos.

Atenție

empty poate să nu fie cea mai bună opțiune în funcție de valorile pe care le stochezi în meta. Valori precum false, 0 etc... vor fi considerate goale.

Verifică manualul PHP pentru lista completă de valori care sunt considerate goale.

Editare

Poți încerca să atribui meta-ul unei variabile și să folosești acea variabilă în condiția if.

 <?php
      $price_list = get_post_meta( $post->ID, 'price_list_category1', true );
 ?>

Și apoi...

 if( empty( $price_list) ) : ?>style="display:none"<?php endif; ?>

 
26 iun. 2012 22:38:39
Comentarii

Am încercat asta, dar primesc eroare fatală: Can't use function return value in write context

User User
26 iun. 2012 22:46:14

Poți atribui valoarea returnată de meta unei variabile și să folosești acea variabilă în interiorul if. Vezi ediția mea.

Shane Shane
26 iun. 2012 22:53:37

se pare că funcția empty are limitări și are nevoie de o variabilă simplă pentru a-și face treaba. una dintre acele limitări PHP care nu au sens.

User User
27 iun. 2012 12:04:50

Unele funcții precum empty() nu sunt funcții în sensul obișnuit. Ele sunt implementate ca caracteristici/cuvinte cheie ale limbajului care evaluează direct o variabilă în loc să transmită o valoare către o funcție.

Dave Ross Dave Ross
1 mar. 2015 08:18:20
0

Poți folosi metadata_exists(); (a funcționat pentru mine) pentru a verifica orice meta-informație a postării și apoi să faci ce dorești.

    // Verifică și obține o meta-informație a postării

if ( metadata_exists( 'post', $post_id, '_meta_key' ) ) {
    $meta_value = get_post_meta( $post_id, '_meta_key', true );
}
23 iun. 2017 11:27:10
1

Am găsit această soluție în timp ce căutam eu însumi o rezolvare, dar mi-am dat seama că răspunsul este foarte simplu. Pur și simplu trebuie să verifici dacă valoarea este goală, dacă este, atunci nu afișa nimic - dacă are conținut, atunci afișează conținutul - codul pe care l-am folosit este mai jos și poate fi adaptat în funcție de nevoile fiecăruia care are nevoie să îl folosească.

<?php $meta = get_post_meta( get_the_ID(), 'page-sub-title', true );
    if ($meta == '') {
        echo '&nbsp;';
    } else {
        echo '<h2>' . $meta . '</h2>';
      }
?>
19 feb. 2014 23:11:49
Comentarii

funcționează, dar de ce get_the_ID() în loc de vechiul nostru $post->ID

gurung gurung
8 apr. 2014 19:01:57
0
if( ! in_array( 'given_key', get_post_custom_keys($post_id) ) ) {}

Aici este scris: https://developer.wordpress.org/reference/functions/get_post_meta/#user-contributed-notes

get_post_custom_keys Returnează un array care conține cheile tuturor câmpurilor personalizate ale unui anumit articol sau pagină. Pentru mine, aceasta este cea mai bună soluție :)

23 aug. 2018 00:10:21