2010-04-01 8 views
0

J'ai créé cette branche de code de sorte que si les paramètres permalink ne correspondent pas au moins à l'une des conditions OU, je peux exécuter la branche "faire quelque chose". Cependant, je crois qu'il y a une faille dans la logique, puisque j'ai mis les permaliens à /%postname%.html et cela essaie toujours d'être vrai;Quelle est la faille logique dans ce conditionnel?

Je crois que j'ai besoin de changer les OR à AND, non?

if (get_option('permalink_structure') !== "/%postname%/" || 
      get_option('my_permalinks') !== "/%postname%/" || 
    get_option('permalink_structure') !== "/%postname%.html" || 
      get_option('my_permalinks') !== "/%postname%.html")) 
{ 
//do something 
    echo "true"; 
} 
+1

Plus de 200 caractères sur une ligne? –

Répondre

4

Vous testez:

if(get_option('permalink_structure') !== "/%postname%/" 

Et votre permalien est /%postname%.html - ce qui signifie qu'il ne "/%postname%/"

Ainsi, cette première partie de la condition est true, et vous entrez dans la if bloquer - et les autres ne sont même pas évalués.


Je suppose que ce que vous voulez est d'utiliser &&, et non ||:

if(get_option('permalink_structure') !== "/%postname%/" 
    && get_option('my_permalinks') !=="/%postname%/" 
    && get_option('permalink_structure') !== "/%postname%.html" 
    && get_option('my_permalinks') !=="/%postname%.html")) 
{ 
//do something 
    echo "true"; 
} 

Ce qui voudrait dire:

  • si permalien ne "/%postname%/"
  • et permalien est pas "/%postname%/"
  • et permalink n'est pas "/%postname%.html"
  • et permalien n'est pas "/%postname%.html"
  • alors, écho vrai
0

Oui, remplacez-les par AND et cela devrait fonctionner. Vous pouvez à la place inverser ceux-ci à == et mettre un ! à l'avant.

4

lorsque vous faites une construction comme celle-ci:

if($a != 1 || $a != 2) 

alors il sera toujours vrai que pour que cela soit faux $ a devrait être 1 et 2 simultanément.

votre construction est également défectueuse.

0

Utilisez ands, not ors. J'ai fait la même erreur moi-même.

0
if !(get_option('permalink_structure') == "/%postname%/" || 
      get_option('my_permalinks') == "/%postname%/" || 
    get_option('permalink_structure') == "/%postname%.html" || 
      get_option('my_permalinks') == "/%postname%.html")) 
{ 
    echo "true"; 
} 
+0

Cette syntaxe est valide? –

0

Comme l'autre disent, utilisez AND (&&) au lieu de OR (||). Si vous n'êtes pas familier avec Boolean logic, ici en résumé:

TRUE and FALSE == FALSE 
TRUE and TRUE == TRUE 

FALSE or FALSE == FALSE 
TRUE or FALSE == TRUE 
Questions connexes