从自定义元框中的下拉列表中保存数组

时间:2013-01-15 作者:souporserious

我已成功地将自定义帖子类型拉入自定义元框中的下拉列表。然而,当在前端显示它时,我还想提供一个到实际帖子的链接,而不仅仅是帖子的名称。所以我猜我需要将其保存为数组?是否可以通过下拉列表进行此操作?对我应该如何处理这件事感到困惑。非常感谢您的帮助。

以下是我目前掌握的情况:

// Add Meta Box To Select Overseeing Pastor
add_action(\'admin_init\', \'ministry_select_add_meta\');
function ministry_select_add_meta(){
    add_meta_box(\'ministry_select_post\', __(\'Overseeing Pastor\'), \'ministry_select_meta\', \'ministry\', \'side\');
}

function ministry_select_meta( $post ) {
    $values = get_post_custom( $post->ID );
    $selected = isset( $values[\'pastor_select\'] ) ? esc_attr( $values[\'pastor_select\'][0] ) : \'\';
    wp_nonce_field( \'my_meta_box_nonce\', \'meta_box_nonce\' );
    ?>
        <select name="pastor_select">
            <?php
            $args = array(
                \'post_type\' => \'employee\',
                \'position\' => \'pastor\'
            );
            $pastorList = new WP_Query($args); while ($pastorList->have_posts()) : $pastorList->the_post();
                $is_selected = (get_the_title() == $selected) ? \'selected="selected"\' : \'\';
                echo \'<option value="\'.get_the_title().\'" \'.$is_selected.\'>\'.get_the_title().\'</option>\';
            endwhile; wp_reset_postdata();
            ?>
        </select>
    <?php   
}

add_action( \'save_post\', \'ministry_select_save\' );
function ministry_select_save( $post_id )
{
    // Stop If Autosaving
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;

    // Stop If Nonce Can\'t Be Verified
    if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'my_meta_box_nonce\' ) ) return;

    // Stop If Unauthorized User
    if( !current_user_can( \'edit_post\' ) ) return;

    // Make Sure Data Is Set Then Save      
    if( isset( $_POST[\'pastor_select\'] ) )
        update_post_meta( $post_id, \'pastor_select\', esc_attr( $_POST[\'pastor_select\'] ) );
}

1 个回复
最合适的回答,由SO网友:brasofilo 整理而成

非常简单。保存帖子ID,而不是保存帖子标题,这样在前端就可以提取所有必要的信息
像这样:get_post( $the_saved_ID_value );get_permalink( $the_saved_ID_value );.

在代码中,更改此行:

echo \'<option value="\'.get_the_ID().\'" \'.$is_selected.\'>\'.get_the_title().\'</option>\';
备注:

使用WP_Query 考虑一下,似乎有点太多了get_posts. 有很多很好的例子add_meta_box.

代替get_post_custom, 检查get_post_meta.

结束

相关推荐

从管理中的特定页面模板中删除Metabox

当用户在管理中编辑特定页面时,我想通过编程删除一些元框。页面本身使用的是一个模板(tpl about.php)。我知道我可以使用此功能从所有页面中删除所有元框:function remove_post_meta_boxes() { if(!current_user_can(\'administrator\')) { remove_meta_box(\'tagsdiv-post_tag\', \'post\', \'normal\'); remove_meta_box(\'