个性化阅读
专注于IT技术分析

如何使用WordPress Meta Box保存多文本框

首先抱歉我的英语。

我将一个简单的元框添加到我的自定义Wordpress中

这是我的add_meta_boxes代码:

function download_link_boxes()
 {
   $screens = array('post', 'music');

   foreach ($screens as $screen) {
    add_meta_box('dl_link_box', 'LINKS', 'download_box_content', $screen);
 }

}

这里的回调函数:

function download_box_content($post)
{
$music_links = get_post_meta($post->ID, 'music-links', 'false');

<input type="text" name="link-music[]" value="<?php echo $music_links ?>">
<input type="text" name="link-music[]" value="<?php echo $music_links ?>">
<input type="text" name="link-music[]" value="<?php echo $music_links ?>">
}

对于更新和保存:

add_action('save_post', 'save_my_music_links');
function save_my_music_links($post_id)
{

if (!isset($_POST['link-music[]'])) {
    return;
}

if(defined('DOING_AUTOSAVE' && DOING_AUTOSAVE)){
    return;
}


$my_links = sanitize_text_field($_POST['link-music[]']);
update_post_meta($post_id, 'music-links', $my_links);
}

现在, 如果将我的文本框的名称更改为’link-music’而不是’link-music []’并仅保留一个文本框, 则可以正常工作。我可以添加, 更新和删除, 但对于多文本框什么也没有发生!


#1


从我对你的代码的快速浏览中可以看到, 有些事情是不正确的。

download_link_boxes()函数很好。其他两个功能不是。

让我们从download_box_content()开始:

  1. 你的每个输入都在php中, 它们不能放在php包装器中。
  2. 当你尝试将link-music的数据存储为数组时, 我希望某种循环会遍历每个值, 即在你爆炸变量本身之后。但是在你的情况下, 如果只期望3个值, 请使用数组索引格式来获取每个链接

现在要修复第三个函数, save_my_music_links();你正在寻找link-music作为数组, 即link-music []。这是不对的。即使在HTML上使用方括号, 在PHP上, $ _ POST中的索引也仅是链接音乐。因此, 应将其写为:$ _POST [‘link-music’]。同样, 你的sanitize_text_field函数会将Array转换为字符串。你可能想要遍历每个值并对其进行清理或使用array_map

因此, 如果你修复了这些更改, 则你的functions.php中应该包含以下内容:

function download_box_content($post)
{
    $music_links = get_post_meta($post->ID, 'music-links', 'false');
    ?>
    <input type="text" name="link-music[]" value="<?php echo isset($music_links[0]) ? $music_links[0] : "" ?>">
    <input type="text" name="link-music[]" value="<?php echo isset($music_links[1]) ? $music_links[1] : "" ?>">
    <input type="text" name="link-music[]" value="<?php echo isset($music_links[2]) ? $music_links[2] : "" ?>">
    <?php
}

add_action('save_post', 'save_my_music_links');
function save_my_music_links($post_id)
{

    if (!isset($_POST['link-music'])) {
        return;
    }

    if(defined('DOING_AUTOSAVE' && DOING_AUTOSAVE)){
        return;
    }


    $my_links = array_map("sanitize_text_field", $_POST['link-music']);
    update_post_meta($post_id, 'music-links', $my_links);
}
赞(0) 打赏
未经允许不得转载:srcmini » 如何使用WordPress Meta Box保存多文本框
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏