HTML表单中的关联数组使用WordPress发布元数据函​​数

时间:2016-08-03 04:06:18

标签: php mysql wordpress wordpress-theming associative-array

我有一组需要在自定义帖子类型的wp_postmeta表中保存/检索的对象。

结构示例:

array(
    array( 
        'firstname'   => 'Johnny',
        'middlename'  => 'William'
    ),
    array( 
        'firstname'   => 'Jane',
        'middlename'  => 'Alice'
    )
)

我希望能够遍历这样的对象:

$children = get_post_meta( $postid, '_children', true);

$arrlength = count($children);
for($x = 0; $x < $arrlength; $x++)
{
    echo '<input type="text" name="_children[][firstname]" id="_children[][firstname]" value="' . $meta_values['_children'][0][$x][firstname] . '" /><br />';
    echo '<input type="text" name="_children[][middlename]" id="_children[][middlename]" value="' . $meta_values['children'][0][$x][middlename] . '" /><br />';
}

我不认为以上是正确的。我试图通过save_post动作保存发布的数据:

function test_meta_save( $post_id ) {

    // Checks save status
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ '_children_nonce' ] ) && wp_verify_nonce( $_POST[ '_children_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';

    // Exits script depending on save status
    if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
        return;
    }
    if( isset( $_POST[ '_children' ] ) ) {
        update_post_meta( $post_id, '_children', array_map( 'sanitize_text_field', $_POST[ '_children' ] );
    }
}
add_action( 'save_post', 'test_meta_save' );

我知道上述情况也不正确。

1 个答案:

答案 0 :(得分:1)

  

此处您遇到的问题与上一个问题相同,但这次是get_post_meta(),其中最后一个参数应为 false 。因为您正在阅读/创建 arrays 值和strings 值。

在您的代码中:

$children = get_post_meta( $postid, '_children', true);

您需要删除get_post_meta()函数中的最后一个参数,因为默认值为 false
相反,你将拥有:

$children = get_post_meta( $postid, '_children');

$arrlength = count($children);
for($x = 0; $x < $arrlength; $x++)
{
    echo '<input type="text" name="_children[][firstname]" id="_children[][firstname]" value="' . $meta_values['_children'][0][$x][firstname] . '" /><br />';
    echo '<input type="text" name="_children[][middlename]" id="_children[][middlename]" value="' . $meta_values['children'][0][$x][middlename] . '" /><br />';
}

参考文献: