Meta Box值是否未保存/填充?

时间:2013-07-15 作者:mtuttle

好的,我现在有一个元框设置,它填充了所有注册的帖子类型。那部分很好用。但是,在下拉列表中选择一个选项并保存/更新后,该值将在页面重新加载时显示第一个选项。还有,有人知道get\\u post\\u类型是否可以排除特定的post类型吗?

这是我的代码:

    add_action( \'add_meta_boxes\', \'cd_meta_box_add\' );
    function cd_meta_box_add()
    {
add_meta_box( \'my-meta-box-id\', \'My First Meta Box\', \'cd_meta_box_cb\', \'page\', \'normal\', \'high\' );
    }

    function cd_meta_box_cb( $post )
    {
$values = get_post_custom( $post->ID );
$selected = isset( $values[\'my_meta_box_select\'] ) ? esc_attr( $values[\'my_meta_box_select\'][0] ) : \'\';
wp_nonce_field( \'my_meta_box_nonce\', \'meta_box_nonce\' );
?>

<p>
    <label for="my_meta_box_select">Post type: </label>
    <select name="my_meta_box_select" id="my_meta_box_select">
        <?php $post_types=get_post_types(\'\', \'objects\'); foreach ($post_types as $post_type): ?>
        <option value="<?php echo esc_attr($post_type->name);?>"  <?php selected( $selected, \'$post_type->name\' ); ?>><?php echo esc_html($post_type->label); selected ?></option>
        <?php endforeach; ?>
    </select>
</p>    


<?php   
    }


    add_action( \'save_post\', \'cd_meta_box_save\' );
    function cd_meta_box_save( $post_id )
    {
// Bail if we\'re doing an auto save
if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;

// if our nonce isn\'t there, or we can\'t verify it, bail
if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'my_meta_box_nonce\' ) ) return;

// if our current user can\'t edit this post, bail
if( !current_user_can( \'edit_post\', $post_id ) ) return;

// now we can actually save the data
$allowed = array( 
    \'a\' => array( // on allow a tags
        \'href\' => array() // and those anchords can only have href attribute
    )
);

// Probably a good idea to make sure your data is set

if( isset( $_POST[\'my_meta_box_select\'] ) )
    update_post_meta( $post_id, \'my_meta_box_select\', esc_attr( $_POST[\'my_meta_box_select\'] ) );

    }

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

变量不会在单引号内展开,因此--selected( $selected, \'$post_type->name\'-- 正在逐字检查类似“$post\\u type->name”的字符串。如果您正在保存选项名称,那么只要删除引号就可以了(尽管我没有运行您的代码来测试)。

您可以通过public_builtin 参数到get_post_types, 但是,如果您希望排除那些参数所能做的以外的特定类型,我看不到直接做到这一点的方法,但是there is a filter. 只需在您的foreach 尽管如此。

结束

相关推荐

如何在用户添加新帖子时为非管理员隐藏插件metabox

我已经能够在后端为非管理员禁用所有元框,但我在Facebook AWD All in one 它创建了一个小部件,所有用户在创建新帖子时都可以看到。如何禁用它?是否有某种命令适用于由插件创建的任何小部件,我可以将其添加到我的函数中。php如果我知道插件的短代码?我需要你的帮助!谢谢http://wordpress.org/extend/plugins/facebook-awd/我使用以下代码删除元框######################################################