Správně, tady si bouchám hlavu o zeď. Jsem si jistý, že je to něco neuvěřitelně jednoduchého, ale stále dostávám nedefinované chyby indexu u všech z těchto proměnných.
function meta_genus_species() { global $post; if (isset($post)) { $custom = get_post_custom($post->ID); } if (isset($custom)) { $genus = $custom["genus"][0]; $species = $custom["species"][0]; $etymology = $custom["etymology"][0]; $family = $custom["family"][0]; $common_names = $custom["common_names"][0]; } ?> <label>Genus:</label> <input name="genus" value="<?php if(isset($genus)) { echo $genus; } ?>" /> <label>Species:</label> <input name="species" value="<?php if(isset($species)) { echo $species; } ?>" /> <p><label>Etymology:</label><br /> <textarea cols="50" rows="5" name="etymology"><?php if(isset($etymology)) { echo $etymology; } ?></textarea></p> <label>Family:</label> <input name="family" value="<?php if(isset($family)) { echo $family; } ?>" /> <label>Common Names:</label> <input name="common_names" value="<?php if(isset($common_names)) { echo $common_names; } ?>" /> <?php }
Získávám to pro každou proměnnou:
Upozornění : Nedefinovaný index: rod v […] sf-species-profiles.php na řádku 207
Nějaké nápady?
Komentáře
- který řádek kódu je řádek 207?
- $ genus = $ custom [" rod "] [0];
Odpověď
To “ běžná chyba PHP, obvykle při pokusu o přístup k členu pole s neexistujícím klíčem;
$array = array( "hello" => "world" ); echo $array["foobar"]; // undefined index
Nejprve byste měli zkontrolovat klíč pomocí isset( $array["foobar"] );
UPDATE: V tomto případě bych upoutal ve smyčce, která nastavuje proměnné za vás, kontrola fo r v procesu.
foreach ( array( "genus", "species", "etymology", "family", "common_names" ) as $var ) $$var = isset( $custom[ $var ][0] ) ? $custom[ $var ][0] : ""; echo $genus; // prints value of $custom["genus"][0] if set, otherwise empty
Komentáře
- Navrhujete, abych použil isset na každém řádek, například (pseudo) isset ($ custom [rod]) > $ genus = $ custom [rod]? Určitě to je ' pekelně dlouhý způsob, jak dělat věci. Byl jsem pod dojmem (a toto je poprvé, co jsem ' narazil na tento problém), že použití isset na $ post pak také $ custom by znamenalo, že tyto proměnné nejsou ' t set / don ' neexistuje, pokud v $ post nejsou data?
- Vůbec ne – ale v každém případě vy nikdy bychom neměli předpokládat, že
X
existuje. Zobrazit moji aktualizovanou odpověď 🙂
Odpověď
Již voláte isset () pokaždé, když tisknete data na obrazovku.
Proč tuto část prostě nevynechat:
if (isset($custom)) { $genus = $custom["genus"][0]; $species = $custom["species"][0]; $etymology = $custom["etymology"][0]; $family = $custom["family"][0]; $common_names = $custom["common_names"][0]; }
a udělat to při tisku vstupu:
<label>Genus:</label> <input name="genus" value="<?php if( isset( $custom["genus"][0] ) ) { print $custom["genus"][0]; } ?>" />
Přiřazení dalších proměnných nejsou nutná a způsobují generování upozornění zde.
BTW …
Před výstupem ve formátu musíte uniknout:
<label>Genus:</label> <input name="genus" value="<?php if(isset($genus)) { echo esc_attr( $genus ); } ?>" /> <label>Species:</label> <input name="species" value="<?php if(isset($species)) { echo esc_attr( $species ); } ?>" /> <p><label>Etymology:</label><br /> <textarea cols="50" rows="5" name="etymology"><?php if(isset($etymology)) { echo esc_textarea( $etymology ); } ?></textarea></p> <label>Family:</label> <input name="family" value="<?php if(isset($family)) { echo esc_attr( $family ); } ?>" /> <label>Common Names:</label> <input name="common_names" value="<?php if(isset($common_names)) { echo esc_attr( $common_names ); } ?>" />
Komentáře
- Ano , ' neobtěžuji se s útěkem, dokud nedostanu ' pracovní kód .. 🙂 Uvažoval jsem, že to udělám tak, jak to id = „9d6711ae97″>
navrhl jsem, ale ' jsem trochu zběsilý estetický a drahý Pane, který vypadá ošklivě! Děkuji.
tiskem na obrazovku, pokud nebudu unikat data a nikdy nezavádím zbytečné díky složitosti vypadá kód " hezký ".
$custom["genus"][0]
" ošklivější " než $genus
. Kód @mfields ' je jinak úplně stejný jako váš, ale ' nevrátí chybu. Napište tolik kódu, kolik potřebujete k dokončení práce, nic víc, nic méně . Odpověď
Alternativou, která vyplynula z diskuse na Twitteru o tomto příspěvku, je změna jak získáváte svá data. get_post_custom()
vrací řadu polí a způsobuje vám bolesti hlavy . Místo toho bych doporučil použít get_post_custom_values()
:
function meta_genus_species() { global $post; $genus = get_post_custom_values( "genus", $post->ID ); $species = get_post_custom_values( "species", $post->ID ); $etymology = get_post_custom_values( "etymology", $post->ID ); $family = get_post_custom_values( "family", $post->ID ); $common_names = get_post_custom_values( "common_names", $post->ID ); ?> <label>Genus:</label> <input name="genus" value="<?php if(isset($genus[0])) { echo esc_attr( $genus[0] ); } ?>" /> <label>Species:</label> <input name="species" value="<?php if(isset($species[0])) { echo esc_attr( $species ); } ?>" /> <p><label>Etymology:</label><br /> <textarea cols="50" rows="5" name="etymology"><?php if(isset($etymology[0])) { echo esc_attr( $etymology ); } ?></textarea></p> <label>Family:</label> <input name="family" value="<?php if(isset($family[0])) { echo esc_attr( $family ); } ?>" /> <label>Common Names:</label> <input name="common_names" value="<?php if(isset($common_names[0])) { echo esc_attr( $common_names ); } ?>" /> <?php }
Lepší alternativou k vlastním hodnotám by bylo použití vlastních meta. Můžete je definovat jako jedinečné, takže když dostanete vlastní meta zpět z DB, budete mít spíše jednu hodnotu než indexované pole pouze s jedním členem. Něco, co je třeba zvážit.
Komentáře
- Díky EAMann. ' budu zkoumat vlastní hodnoty / meta, až se vrátím domů, a uvažuji o tomto přístupu.