将保存的元数据值放回字段中,然后在前端显示

时间:2013-10-13 作者:asaunders

我有一组元盒,现在终于可以保存了,但正在努力将保存的值返回到它们来自的输入框中。例如,我有一个名为link text的元字段,如果我在其中放入“link 1 text”并保存,我会保存它,但它不会显示在表单中。

我使用的代码是:

function home_callout_meta_box_cb($post) {
    global $post;
    wp_nonce_field(\'home_callout_nonce\', \'home_callout_meta_box_nonce\');
    $values = get_post_custom($post->ID);

    for ($i = 1; $i <= 3; $i++) {

        $imagefield1[$i] = isset($values[\'imagefields\'][$i][\'image1\']) ? esc_attr($values[\'imagefields\'][$i][\'image1\'][0]): \'\';
        $imagefield2[$i] = isset($values[\'imagefields\'][$i][\'image2\']) ? esc_attr($values[\'imagefields\'][$i][\'image2\'][0]): \'\';

        $linktext[$i] = isset($values[\'linktext\'][$i]) ? esc_attr($values[\'linktext\'][$i][0]): \'\';
        $link[$i] = isset($values[\'link\'][$i]) ? esc_attr($values[\'link\'][$i][0]): \'\';


        echo \'<p><strong>Call out box \' . $i .\' image 1</strong></p>\';
        echo \'<div>\';
        echo \'<input type="text" id="imagefields[\' . $i . \'][image1]" name="imagefields[\' . $i . \'][image1]" class="upload-url image_url" readonly="readonly" value="\' . $imagefield1[$i] .\'" />\';
        echo \'<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />\';
        echo \'</div>\';

        echo \'<p><strong>Call out box \' . $i .\' image 2</strong></p>\';
        echo \'<div>\';
        echo \'<input type="text" id="imagefields[\' . $i . \'][image2]" name="imagefields[\' . $i . \'][image2]" class="upload-url image_url" readonly="readonly" value="\' . $imagefield2[$i] .\'" />\';
        echo \'<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />\';
        echo \'</div>\';

        echo \'<p><strong>Call out box \' . $i .\' link text</strong></p>\';
        echo \'<input type="text" id="linktext[\' . $i . \']" name="linktext[\' . $i . \']" value="\' . $linktext[$i] . \'" />\';

        echo \'<p><strong>Call out box \' . $i .\' link</strong></p>\';
        echo \'<input type="text" id="link[\' . $i . \']" name="link[\' . $i . \']" value="\' . $link[$i] . \'" />\';
        // var_dump($values[\'imagefields\'][0]);
    }
}

function home_callout_save($post_id) {
    if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) return;
    if(!isset($_POST[\'home_callout_meta_box_nonce\']) || !wp_verify_nonce($_POST[\'home_callout_meta_box_nonce\'], \'home_callout_nonce\')) return;
    if(!current_user_can(\'edit_pages\')) return;

    if(isset($_POST[\'imagefields\'])) {
        update_post_meta($post_id, \'imagefields\', $_POST[\'imagefields\']);   
    }

    if(isset($_POST[\'linktext\'])) {
        update_post_meta($post_id, \'linktext\', $_POST[\'linktext\']);
    }
    if(isset($_POST[\'link\'])) {
        update_post_meta($post_id, \'link\', $_POST[\'link\']);
    }
}
add_action(\'save_post\', \'home_callout_save\');
我知道字段会保存,因为如果我进行var\\u转储($values[\'linktext\');

这是返回的数组:

array(1) { [0]=> string(75) "a:3:{i:1;s:11:"link text 1";i:2;s:11:"Link 2 text";i:3;s:11:"Link 3 text";}" } 
我不确定如何将保存的值返回到每个字段中。

我还有一个小问题,那就是检索前端每个元框的值,我会使用:

get_post_meta($post_id, \'linktext\'][1]\', true);
提前感谢您的帮助。

2 个回复
最合适的回答,由SO网友:Imperative Ideas 整理而成

您希望从自定义post类型中获取数据,将其分配给变量,然后在页面加载时将该值回显到字段中。如果没有其他内容,这将使您的代码更具可读性(并且更容易进行故障排除),而不是明确说明您正在做什么,您可以在这里看到具体的工作方法(WP Stackexchange Post).

您还可以发现Justin Tadlock\'s review of meta boxes 《粉碎杂志》是一本启发性的读物。

最后,如果需要快捷方式,可以使用以下系统WordPress Alchemy 为快速原型化和执行提供了一个很好的代码库Advanced Custom Fields 采用更加GUI的方法。

SO网友:asaunders

所以我最终得到了字段中出现的值。我不确定我是否做得很好。但我很高兴能就如何做得更好发表一些意见。

这是我的代码:

function home_callout_meta_box_cb($object, $post) {
    global $post;
    wp_nonce_field(\'home_callout_nonce\', \'home_callout_meta_box_nonce\');
    $values = get_post_custom($post->ID);

    for ($i = 1; $i <= 3; $i++) {

        $imagefield1[$i] = isset($values[\'imagefields\'][$i][\'image1\']) ? esc_attr($values[\'imagefields\'][$i][\'image1\'][0]): \'\';
        $imagefield2[$i] = isset($values[\'imagefields\'][$i][\'image2\']) ? esc_attr($values[\'imagefields\'][$i][\'image2\'][0]): \'\';

        $linktext[$i] = isset($values[\'linktext\'][$i]) ? esc_attr($values[\'linktext\'][$i][0]): \'\';
        $link[$i] = isset($values[\'link\'][$i]) ? esc_attr($values[\'link\'][$i][0]): \'\';

        $linkText = get_post_meta( $object->ID, \'linktext\', true );
        $linkUrl = get_post_meta( $object->ID, \'link\', true );
        $image = get_post_meta( $object->ID, \'imagefields\', true );



        echo \'<p><strong>Call out box \' . $i .\' image 1</strong></p>\';
        echo \'<div>\';
        echo \'<input type="text" id="imagefields[\' . $i . \'][image1]" name="imagefields[\' . $i . \'][image1]" class="upload-url image_url" readonly="readonly" value="\' . $image[$i][\'image1\'] .\'" />\';
        echo \'<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />\';
        echo \'</div>\';

        echo \'<p><strong>Call out box \' . $i .\' image 2</strong></p>\';
        echo \'<div>\';
        echo \'<input type="text" id="imagefields[\' . $i . \'][image2]" name="imagefields[\' . $i . \'][image2]" class="upload-url image_url" readonly="readonly" value="\' . $image[$i][\'image2\'] .\'" />\';
        echo \'<input id="st_upload_button" class="st_upload_button button-secondary upload_image" type="button" name="upload_button" value="Upload" />\';
        echo \'</div>\';

        echo \'<p><strong>Call out box \' . $i .\' link text</strong></p>\';
        echo \'<input type="text" id="linktext[\' . $i . \']" name="linktext[\' . $i . \']" value="\' . $linkText[$i] . \'" />\';

        echo \'<p><strong>Call out box \' . $i .\' link</strong></p>\';
        echo \'<input type="text" id="link[\' . $i . \']" name="link[\' . $i . \']" value="\' . $linkUrl[$i] . \'" />\';

    }
}
我所做的是创建了一些变量来检索元数据,它返回了一个数组,这样我就可以使用$i来获取正确的变量并在字段中回显该值。

我觉得这是一种混乱的方式,所以如果有办法的话,希望能就如何做得更好发表一些意见?

结束

相关推荐

WordPress:可排序的Metabox字段不保存位置

我遇到了一个让我困惑的问题:升级到WP 3.6后,当您重新订购时,我的可排序metabox字段没有保存它们的位置。下面是我的代码:PHP:function save_box( $post_id ) { $post_type = get_post_type(); // verify nonce if ( ! isset( $_POST[\'custom_meta_box_nonce_field\'] ) ) return $p