Jól van, itt verem a fejem a falhoz. Biztos vagyok benne, hogy valami hihetetlenül egyszerű, de továbbra is meghatározatlan indexhibákat kapok ezeknek a változóknak.
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 }
Ezt minden változóhoz megkapom:
Megjegyzés : Meghatározatlan index: nemzetség az […] sf-species-profiles.php-ben a 207. soron
Van ötlet?
Megjegyzések
- melyik kódsor a 207. sor?
- $ genus = $ custom [" nemzetség "] [0];
Válasz
It ” gyakori PHP hiba, általában amikor egy tömb tagot nem létező kulccsal próbál meg elérni;
$array = array( "hello" => "world" ); echo $array["foobar"]; // undefined index
Először ellenőrizze a kulcsot a isset( $array["foobar"] );
FRISSÍTÉS: Ebben az esetben megráznék egy ciklusban, amely beállítja az Ön számára a változókat, ellenőrizve a fo-t r az index a folyamat során.
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
Megjegyzések
- Azt javasolja, hogy használjam az vonal, például (ál) isset ($ custom [genus]) > $ genus = $ custom [genus]? Bizonyára ez ' egy pokolian hosszú szellemű dolog. Az volt a benyomásom (és most találkoztam először ' ezzel a problémával), hogy a $ post, majd a $ custom isset használata azt jelentené, hogy ezek a változók nem ' t set / don ' nem létezik, hacsak nincs adat a $ postban?
- Egyáltalán nem – de akárhogy is, akkor soha nem szabad feltételezni, hogy létezik
X
. Tekintse meg frissített válaszomat 🙂
Válasz
Minden alkalommal, amikor nyomtatja a adatokat a képernyőre.
Miért ne hagyná ki ezt a részt:
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]; }
és ezt tegye meg, amikor bemenetet nyomtat:
<label>Genus:</label> <input name="genus" value="<?php if( isset( $custom["genus"][0] ) ) { print $custom["genus"][0]; } ?>" />
Az extra változó-hozzárendelésekre nincs szükség, és itt értesítéseket generálnak.
BTW …
El kell kerülnie a kimenetet, mielőtt azt formában kinyomtatná:
<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 ); } ?>" />
Megjegyzések
- Igen , Nem fáradok el menekülni, amíg ' működőképes kódot kaptam .. 🙂 Azt fontolgattam, hogy úgy csinálom, ahogy te ' tettem javaslatot, de én ' egy kis kódesztétikai őrült és csúnyán néző kedves Uram! Köszönöm.
- Azt hiszem, akkor különbözünk egymástól … Nem ' nem fárasztom a képernyőn történő nyomtatást, hacsak nem kerülök el az adatok elől, és soha nem vezetek be feleslegeset komplexitás tegye a kódot kinézetre " csinos ".
- LOL! IMHO szerintem a láblécben található gyógyszerészeti linkekkel feltört webhelyek csúnyábbak ennél a kódnál. 😉
- Don ' ne akassza fel, hogy
$custom["genus"][0]
" csúnyább ", mint$genus
. A @mfields ' kód egyébként pontosan megegyezik a tiéddel, de nem nyert ' t hibát. Írjon annyi kódot, amennyire szüksége van a munka elvégzéséhez, se többet, se nem kevesebbet. - Heh, amint az EAMann rámutat, ez nem ' t a menekülés, amelyet csúfnak látok – ez ' s $ custom [" nemzetség "] [0], nem pedig a $ genus, amire utaltam. Én ' m egészen biztosan nem azt sugallom, hogy nem menek ' el az adatok elől, mert csúnyává tették .. 🙂
Válasz
Egy alternatíva, amely a bejegyzés Twitter-beszélgetéséből származik, megváltoztatja a hogyan megkapja az adatait. get_post_custom()
tömbtömböt ad vissza, és ez okoz fejfájást . Javaslom a get_post_custom_values()
használatát:
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 }
Az egyéni értékek jobb alternatívája az egyéni meta használata. Ezeket egyedinek definiálhatja, majd amikor az egyéni metát visszakapja a DB-ből, akkor egy értéke lesz, nem pedig egy indexelt tömb, amelynek csak egy tagja van. Csak valamit érdemes figyelembe venni.
Megjegyzések
- Köszönet EAMann-nak. I ' Ll az egyéni értékeket / metát kutatom, amikor hazaérek, és fontolóra veszem ezt a megközelítést.