在Metabox中输入选择选项更改内容

时间:2018-12-27 作者:Noufal Binu

我正在为我的插件在自定义Metabox中创建一个“输入选择选项”,我不擅长PHP;不知道如何保存用户“输入选择选项”。工作非常简单的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 个回复
最合适的回答,由SO网友:Yuri 整理而成

这是完全错误的。元框显示在帖子/页面编辑屏幕上,因此如果您提交自己的表单,整个页面都将被提交/刷新。查找此处的metabox=>SO Thread

您应该使用WP自己的函数来处理此问题。看add_meta_box() 和检查this tutorial 了解您应该如何思考此代码。图坦卡蒙的例子。页面显示您所需的内容。

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
}
要保存字段,您需要在用户保存帖子/页面时捕获它,因此当save_post 操作已启动。

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\');

相关推荐

自定义Metabox中的嵌入选项

我成功地创建了许多自定义元数据库。网上有许多教程可以帮助您实现这一点。我的问题是如何在自定义元数据库中包含嵌入选项?那么,什么是嵌入式选项?例如,如果您使用“Publish Post”元数据库,您将看到以下内容:请注意,如果单击上图中红色圆圈的“编辑”链接,您将得到以下结果:这些就是我所说的嵌入式期权(我不知道它们的术语,所以我想出了这个名字)。我想做的是类似的事情。我知道我可以通过JavaScript/AJAX实现这一点,但我想知道WordPress中是否已经有了预先编写的方法,以及创建metabox这