我有一组需要在自定义帖子类型的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' );
我知道上述情况也不正确。
答案 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 />';
}
参考文献: