Je voudrais afficher du code HTML si une variable n'est pas vide, sinon je ne souhaite rien afficher.
J'ai essayé ce code mais ne fonctionne pas:
<?php
$web = the_field('website');
if (isset($web)) {
?>
<span class="field-label">Website: </span><a href="http://<?php the_field('website'); ?>" target="_blank"><?php the_field('website'); ?></a>
<?php
} else {
echo "Niente";
}
?>
if (!empty($web)) {
?>
<span class="field-label">Website: </span><a href="http://<?php the_field('website'); ?>" target="_blank"><?php the_field('website'); ?></a>
<?php
} else { echo "Niente";}
isset
retournera true même si la variable est "". isset
ne renvoie false que si une variable est null. Ce que vous devriez faire:
if (!empty($web)) {
// foo
}
Ceci vérifiera que la variable n'est pas vide.
J'espère que cela t'aides
Utilisez simplement if ($web)
. Ceci est true
si la variable a une valeur vérité.
Vous n'avez pas besoin de isset
ou empty
puisque vous savez que la variable existe, puisque vous venez de la définir à la ligne précédente.
Je ne vois pas comment
if(!empty($var))
peut créer de la confusion, mais je conviens queif ($var)
est plus simple. - vanneto 8 mars 12 à 13:Parce que
empty
a pour objectif spécifique de supprimer les erreurs pour les variables inexistantes. Vous ne voulez pas supprimer les erreurs sauf si vous en avez besoin. Le Guide définitif de PHPisset
etempty
explique le problème en détail. - deceze ♦ 9 mars 12 à 1:24
Se focaliser sur la partie de suppression d'erreur, si la variable est un tableau où une clé en cours d'accès peut ou non être défini :
if($web['status'])
produirait: Notice : Index non défini: statut
if(isset($web['status']) && $web['status'])
(la deuxième condition n'est pas testée si la première est FALSE
) OUif(!empty($web['status']))
.Cependant, comme deceze ♦ a souligné , a vérité la valeur d'une variable définie fait !empty
redondant, mais vous devez toujours vous rappeler que PHP considère les exemples suivants comme FALSE
:
null
''
ou ""
0.0
0
'0'
ou "0"
'0' + 0 + !3
Donc, si zéro est un statut significatif que vous souhaitez détecter, vous devez utiliser des comparaisons de chaînes et de chiffres:
Sans erreur et zéro détection:
if(isset($web['status'])){
if($web['status'] === '0' || $web['status'] === 0 ||
$web['status'] === 0.0 || $web['status']) {
// not empty: use the value
} else {
// consider it as empty, since status may be FALSE, null or an empty string
}
}
La condition générique ($web['status']
) doit être laissé à la fin de la déclaration entière.
if(!empty($web))
{
echo 'Something';
}
Vous utilisez isset
, ce que isset
fait est de vérifier si la variable est définie ('existe') et n'est pas NULL
. Ce que vous recherchez, c'est empty
, qui vérifie si une variable est vide ou non, même si elle est définie. Pour vérifier ce qui est vide et ce qui ne l'est pas, jetez un coup d'œil à:
http://php.net/manual/en/function.empty.php
Consultez également http://php.net/manual/en/function.isset.php pour ce que isset
fait exactement, afin que vous compreniez pourquoi il ne fait pas ce que vous attendez faire.
if($var !== '' && $var !== NULL)
{
echo $var;
}
j'espère que cela fonctionnera aussi, essayez d'utiliser "is_null"
<?php
$web = the_field('website');
if (!is_null($web)) {
?>
....html code here
<?php
} else {
echo "Niente";
}
?>
http://php.net/manual/en/function.is-null.php
j'espère que ça vous va bien.
Votre problème réside dans votre utilisation de the_field()
, qui est pour Advanced Custom Fields, un plugin wordpress).
Si vous voulez utiliser un champ dans une variable, vous devez utiliser ceci: $web = get_field('website');
.