I've been banging my head against the wall trying to save a custom meta box select option. I am having a hard time figuring out what I actually target to save the value, since I have multiple options in the dropdown. I try to target the select name="XXX"
but still no luck. Any help would be greatly appreciated.
Here is my code to show the select option dropdown:
<?php
$accessory_product_args = [
'posts_per_page' => -1,
'tax_query' => [
'relation' => 'AND',
[
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'accessories'
],
],
'post_type' => 'product',
'orderby' => 'title',
];
$accessory_product = new WP_Query( $accessory_product_args ); ?>
<select name="_accessories_product_one" id="_accessories_product_one" class="widefat">
<?php while ( $accessory_product->have_posts() ) : $accessory_product->the_post();
$title_one = get_the_title();
$postid_one = get_the_ID(); ?>
<option value="<?=$postid_one?>" <?php selected( '_accessories_product_one[select_field_0]', $postid_one); ?>>
<?=$title_one?>
</option>
<?php endwhile; ?>
</select>
<?php
//this below is used for testing to see if i have saved the value or not:
$dropdown_option = get_option( '_accessories_product_one' ); // Array
$dropdown_value = $dropdown_option ['select_field_0']; // Option value
var_dump($dropdown_option);
var_dump($dropdown_value);
?>
This code is the saving:
<?php
if (isset($_POST['_accessories_product_one']) {
update_post_meta( $post_id, '_accessories_product_one', $_POST['_accessories_product_one']);
} ?>
Any help would be greatly appreciated.
EDIT: I am using this within the woocommerce product screen - not Page edit or Post edit or a plugin edit screen.
Here is a more verbose paste of the full code I am using:
function custom_product_basic_load() {
add_action( 'add_meta_boxes_product' , 'custom_product_basic_add_meta_boxes_product' );
add_meta_box( 'custom_product_basic_metabox' , __( 'Product Layout' ) , 'custom_product_basic_metabox' , 'product' , 'normal' , 'high' );
add_action( 'save_post' , 'custom_product_basic_save_post' , 10 , 3 );
}
add_action( 'load-post.php' , 'custom_product_basic_load' );
add_action( 'load-post-new.php' , 'custom_product_basic_load' );
function custom_product_basic_metabox( $post ) {?>
<input type="hidden" name="product_type" value="simple" />
<?php
$accessory_product_args = [
'posts_per_page' => -1,
'tax_query' => [
'relation' => 'AND',
[
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'accessories'
],
],
'post_type' => 'product',
'orderby' => 'title',
];
$accessory_product = new WP_Query( $accessory_product_args ); ?>
<select name="_accessories_product_one" id="_accessories_product_one" class="widefat">
<?php while ( $accessory_product->have_posts() ) : $accessory_product->the_post();
$title_one = get_the_title();
$postid_one = get_the_ID(); ?>
<option value="<?=$postid_one?>" <?php selected( '_accessories_product_one[select_field_0]', $postid_one); ?>>
<?=$title_one?>
</option>
<?php endwhile; ?>
</select>
<?php
$dropdown_option = get_option( '_accessories_product_one' ); // Array
$dropdown_value = $dropdown_option ['select_field_0']; // Option value
var_dump($dropdown_option);
var_dump($dropdown_value);
?>
<?php }
function custom_product_basic_save_post( $post_id ) {
if (isset($_POST['_accessories_product_one'])) {
update_post_meta( $post_id, '_accessories_product_one', $_POST['_accessories_product_one']);
}
}