-1

I'm making a "Input select option" in Custom Metabox for my plugin, I'm not Expert in PHP I don;t know How to Save user "Input select option". Working perfectly plain PHP.

public function zon_featuress_boxx( $post ) {
    wp_nonce_field( 'zonpackk_testimonial', 'zonpackk_testimonial_nonce' );
        $data = get_post_meta( $post->ID, '_zonpackk_testimonial_key', true );
        $dataoption = isset($data['dataoption']) ? $data['dataoption'] : '';
        ?>

<?php
if (isset($_POST['dataoption'])) {
    $page = $_POST['dataoption'];
    $_SESSION['dataoption'] = $page;
} else {
    $page = $_SESSION['dataoption'];
}
?>

    <form name="myform" action="" method="post">
        <select name="dataoption" onchange="this.form.submit()">
            <option value="page1"<?php if ($page == "page1") {
                echo " selected";
            } ?>>Page 1
            </option>
            <option value="page2"<?php if ($page == "page2") {
                echo " selected";
            } ?>>Page 2
            </option>
        </select>
    </form>

<?php
switch ($page) {
    case 'page2':
        echo "string2";
        break;
    case 'page1':
        echo "string1";
        break;
}
?>

1 Answer 1

0

This is totally wrong. Metaboxes are shown on post/page editing screen, so if you submit your own form, the whole page will be submitted/refreshed. Look up what a metabox is here => SO Thread

You should use WP's own functions to deal with this. Look add_meta_box() and check this tutorial to know how you should think to this code. The example on the tut. page shows exactly what you need.

code from WP dev

function wporg_add_custom_box()
{
    $screens = ['post', 'wporg_cpt'];
    foreach ($screens as $screen) {
        add_meta_box(
            'wporg_box_id',           // Unique ID
            'Custom Meta Box Title',  // Box title
            'wporg_custom_box_html',  // Content callback, must be of type callable
            $screen                   // Post type
        );
    }
}
add_action('add_meta_boxes', 'wporg_add_custom_box');

function wporg_custom_box_html($post)
{
    $value = get_post_meta($post->ID, '_wporg_meta_key', true);
    ?>
    <label for="wporg_field">Description for this field</label>
    <select name="wporg_field" id="wporg_field" class="postbox">
        <option value="">Select something...</option>
        <option value="something" <?php selected($value, 'something'); ?>>Something</option>
        <option value="else" <?php selected($value, 'else'); ?>>Else</option>
    </select>
    <?php
}

To save your field you need to catch it when the post/page is saved by the user, hence when the save_post action is fired.

function wporg_save_postdata($post_id)
{
    if (array_key_exists('wporg_field', $_POST)) {
        update_post_meta(
            $post_id,
            '_wporg_meta_key',
            $_POST['wporg_field']
        );
    }
}
add_action('save_post', 'wporg_save_postdata');

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.