/ / Мета кутиите на Wordpress запазват само някои от стойностите? - php, wordpress, мета-кутии

Wordpress meta кутии само спестяване на някои от стойностите? - php, wordpress, мета-кутии

Работя върху мета-кутия за костюми за wordpress. Проблемът е, че wordpress само запазва / запазва някои от стойностите, които въвеждам в полетата .. Не мога наистина да намеря шаблон или ... така че тук е кодът:

<?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

Виждате ли някакви очевидни грешки? Мисля, че станах малко сляп за собствените си грешки в този код ..

Отговори:

0 за отговор № 1

По принцип бих препоръчал да използвате префикси за имената на полетата. Ценности като _name имат твърде много шансове да влязат в конфликт с други ценности със същото име другаде. Използвайте неща като _product_nameи т.н. Можете ли да опитате това? Ако вашият код работи със страници, това трябва да окаже въздействие. И защо да не добавите 4-ти параметър с "true" към add_post_meta () и предишна стойност за update_post_meta ()? Вижте кодекса на WordPress за тези функции: http://codex.wordpress.org/Function_Reference/add_post_meta. Така че ще продължи:

        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);
}

Мисля, че е ясно, че имате конфликт сmetakey със същото име. Не в страници, а в публикации. Затова се опитайте да използвате този 4-ти параметър, за да сте сигурни, че се позовавате на уникален ключ (и моят съвет, все пак, използвайте ясни префикси, за да се разграничавате от всичко друго, било то плъгини, ядро ​​и т.н.)