/ / Wordpress meta boxy ukladajú iba niektoré z hodnôt? - php, wordpress, meta-boxy

Wordpress meta boxy ukladajú len niektoré z hodnôt? - php, wordpress, meta boxy

Trápim sa s meta-boxom pre wordpress. Problém je v tom, že wordpress zachováva / ukladá iba niektoré z hodnôt, ktoré zadávam do polí .. Ani ja nemôžem nájsť vzor .. takže tu je kód:

<?php
function add_products_metaboxes() {
add_meta_box("sra_product_info", "Product Information", "sra_products_info", "product", "side", "default");
}
// The Productinfo Metabox
function sra_products_info() {
//get access to the post object
global $post;
// Noncename needed to verify where the data originated
echo "<input type="hidden" name="productmeta_noncename" id="productmeta_noncename" value="" .
wp_create_nonce( plugin_basename(__FILE__) ) . "" />";
// Get the data from the field if its already been entered
$name = get_post_meta($post->ID, "_name", true);
$price = get_post_meta($post->ID, "_price", true);
$includes = get_post_meta($post->ID, "_includes", true);
$supports = get_post_meta($post->ID, "_supports", true);
$version = get_post_meta($post->ID, "_version" , true);
$extrainfo = get_post_meta($post->ID, "_extrainfo", true);
// Echo out the form
echo "<form>";
echo "<label for="_name">Name</label>" . "<input type="text" name="_name" value="" . $name . ""/>";
echo "<label for="_price">Price</label>" . "<input type="text" name="_price" value="" . $price . ""/>";
echo "<label for="_includes">Includes</label> <textarea name="_includes" rows="4" cols="10">" . $includes . "</textarea>";
echo "<label for="_supports">Supports</label> <input type="text" name="_supports" value="" . $supports . ""/>";
echo "<label for="_version">Version</label>" . "<input type="text" name="_version" value="" . $version . ""/>";
echo "<label for="_extrainfo">Extras</label> <textarea name="_extrainfo" rows="4" cols="10">" . $extrainfo . "</textarea>";
echo "</form>";

}

// Save the Metabox Data
function sra_save_product_meta($post_id, $post) {
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST["productmeta_noncename"], plugin_basename(__FILE__) )) {
return $post->ID;
}
// Is the user allowed to edit the post or page?
if ( !current_user_can( "edit_post", $post->ID ))
return $post->ID;
// OK, we"re authenticated: we need to find and save the data
// check if the field exists in the posts array - if it does, then put cintent in $product_meta.
// this code needs to be refactored!

if (isset($_POST["_name"])) {
$product_meta["_name"] = $_POST["_name"];
}

if (isset($_POST["_price"])) {
$product_meta["_price"] = $_POST["_price"];
}

if (isset($_POST["_includes"])) {
$product_meta["_includes"] = $_POST["_includes"];
}

if (isset($_POST["_supports"])) {
$product_meta["_supports"] = $_POST["_supports"];
}

if (isset($_POST["_version"])) {
$product_meta["_version"] = $_POST["_version"];
}

if (isset($_POST["_extrainfo"])) {
$product_meta["_extrainfo"] = $_POST["_extrainfo"];
}


// Add values of $prpduct_meta as custom fields
foreach ($product_meta as $key => $value) { // Cycle through the $product_meta array!
if( $post->post_type == "revision" ) return; // Don"t store custom data twice
$value = implode(",", (array)$value); // If $value is an array, make it a CSL (unlikely)
if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
update_post_meta($post->ID, $key, $value);
} else { // If the custom field doesn"t have a value
add_post_meta($post->ID, $key, $value);
}
if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
}
}
add_action("save_post", "sra_save_product_meta", 1, 2); // save the custom fields

Vidíte nejaké zjavné chyby? Myslím, že som trochu zaslepený voči svojim vlastným chybám v tomto kóde.

odpovede:

0 pre odpoveď č. 1

Všeobecne by som odporúčal používať predvoľby pre názvy polí. Hodnoty ako _name máte príliš veľa šancí dostať sa do konfliktu s inými hodnotami s rovnakým menom inde. Použite veci ako _product_name, atď.Môžete to vyskúšať? Ak váš kód funguje so stránkami, malo by to mať vplyv. A prečo nepridať 4. parameter s hodnotou „true“ do add_post_meta () a predchádzajúcu hodnotu pre update_post_meta ()? Prečítajte si kódex WordPress o týchto funkciách: http://codex.wordpress.org/Function_Reference/add_post_meta. Takže by to išlo:

        if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
update_post_meta($post->ID, $key, $value, /***OLDVALUE***/ ); // See http://codex.wordpress.org/Function_Reference/update_post_meta for old value
} else { // If the custom field doesn"t have a value
add_post_meta($post->ID, $key, $value, true);
}

Myslím si, že je zrejmé, že máte konflikt smetakey s rovnakým menom. Nie na stránkach, ale v príspevkoch. Skúste teda použiť tento štvrtý parameter, aby ste sa ubezpečili, že odkazujete na jedinečný kľúč (a podľa mojich odporúčaní stále používajte jasné predpony, aby ste sa odlíšili od všetkého iného, ​​či už ide o doplnky, jadro atď.)