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

时间:2018-05-04 14:15:15

标签: php wordpress wordpress-theming metadata meta-boxes

首先抱歉我的英语。

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

这里我的add_meta_boxes代码:

http://{yourwowzaserver}/{yourliveapp}/udp.stream/playlist.m3u8

这里是回调函数:

encode

和更新&保存:

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

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

}

现在,如果将我的文字框的名称改为' link-music'相反,' link-music []'并且只保留一个文本框它工作正常。我可以添加,更新和删除但是对于多文本框没有任何事情发生!

1 个答案:

答案 0 :(得分:0)

从我能看到的代码的快速一瞥可以看出,有些事情是不对的。

download_link_boxes()功能没问题。其他两个功能则不是。

让我们从download_box_content()开始:

  1. 你的每个输入都在php中,它们不能在php包装器中。
  2. 当您尝试将link-music的数据存储为数组时,我希望某种循环可以遍历每个值,即在explode变量本身之后。但在您的情况下,如果您只期望3个值,请使用数组索引格式来获取每个链接
  3. 现在修复第三个函数save_my_music_links();您正在寻找link-music数组,即link-music[]。这不对。即使在HTML上使用方括号,在PHP上,$_POST中的索引也只能是 link-music 。所以它应该写成:$_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);
    }