将数组保存在单个自定义字段中

时间:2017-01-06 作者:Philip

我想将以下数组存储在单个自定义字段中。

array("Accounting"=>"Peter", "Finance"=>"Ben", "Marketing"=>"Joe");
我想通过在wp admin的自定义字段中键入来存储它。

然后我想在页面中以数组的形式检索这个自定义字段,如下所示

$pos = get_post_meta($post_id, \'pos \', true);
并使用以下命令输出阵列:

foreach($pos  as $x => $x_value) {
    echo $x_value . " head " . $x;
    echo "<br>";
}
我的问题是:

如何在单个自定义字段中保存数组?我必须在自定义字段中键入什么?

如何在wordpress模板中以数组形式检索此自定义字段值?

Final Solution to problem thx to Ray:

  1. 我将以下内容直接写入wp admin中的自定义字段(或者在模板中使用带有json编码的update_post_meta)

    {"Accounting":"Peter","Finance":"Ben","Marketing":"Joe"}
    
    在自定义字段中检索数组时使用:

    $json_data = get_post_meta($post_id, "my_custom_meta_key", true);
    $arr_data = json_decode($json_data, true);
    

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

你可以json_encode() 它将使其成为一个字符串,您可以将其放入自定义字段,然后只需确保json_decode() 将其带回对象或json_decode($data, true) 将其作为数组返回

$arr = array("Accounting"=>"Peter", "Finance"=>"Ben", "Marketing"=>"Joe");
update_post_meta($post_id, "my_custom_meta_key", json_encode($arr));
$json_data = get_post_meta($post_id, "my_custom_meta_key", true); // true to ensure it comes back as a string and not an array
$arr_data = json_decode($json_data, true); // 2nd parameter == true so it comes back as an array();

SO网友:Benoti

通常,自定义字段是从表单输入保存的。如果要保存类似于您的阵列,可以在后期编辑屏幕上创建元盒。

此元框应显示具有相同名称的输入,类似于

<input type="text" name="pos[Accounting]" value=""/>
<input type="text" name="pos[Finance]" value=""/>
<input type="text" name="pos[Marketing]" value=""/>
您建议的显示方式看起来不错。

您可以找到更多详细信息以显示和保存元数据库add_meta_boxes 动作etadd_meta_box()

希望它能给你一些提示!

SO网友:sMyles

听起来您希望能够从核心WordPress自定义字段元框中输入这些值:

enter image description here

要做到这一点,我将使用自定义格式,然后在保存帖子时进行转换。

// This function converts "Accounting,Peter|Finance,Ben|Marketing,Joe" format
// to array("Accounting"=>"Peter", "Finance"=>"Ben", "Marketing"=>"Joe");
function smyles_convert_custom_format_to_array( $val ){

    $employee_data = array();

    // Create array with | as separator
    $parts = explode( \'|\', $val );

    if( ! empty( $parts ) ){

        // Loop through each one
        foreach( $parts as $part ){

            // Split again based on comma
            $part_array = explode( \',\', $part );

            // As long as there is a value, let\'s add it to our employee array
            if( ! empty( $part_array[0] ) && ! empty( $part_array[1] ) ){

                // First value in array will be our key, second will be the value
                $employee_data[ $part_array[0] ] = $part_array[1];
            }

        }

    }

    return $employee_data;
}
然后,您需要添加一个操作以在使用上述函数转换自定义格式后更新元数据:

// Add a custom action on save post so we can convert our custom format
add_action( \'save_post\', \'smyles_save_post_format_custom_field\', 99, 3 );
// This function will update the post meta with an array instead of using our custom format
function smyles_save_post_format_custom_field( $id, $post, $update ){

    $custom_field = \'employees\';

    // Change `post` below to something else if using custom post type
    if( $post->post_type != \'post\' ) {
        return;
    }

    // Only try to process if a value exists
    if( ! empty( $_POST[ $custom_field ] ) ){
        $value = smyles_convert_custom_format_to_array( $_POST[ $custom_field ] );
    } else {
        // Otherwise set $value to empty value, meaning custom field was deleted or has an empty value
        $value = array();
    }

    update_post_meta( $id, $custom_field, $value, true );

}
如果要提取这些值,只需使用以下命令:

// Arrays are stored serialized, so let\'s get that first
$value = get_post_meta( $post_id, \'employees\', true);
瞧!利润

相关推荐

网站警告:CALL_USER_FUNC_ARRAY()要求参数1是有效的回调,类‘WPPR_Public’没有方法‘amp_Support’

警告:call_user_func_array() 要求参数1为有效回调,类“Wppr\\u Public”在/home1/thrfolde/Public\\u html/3foldtraining/wp includes/class wp hook中没有方法“amp\\u support”。php在线288如何解决此错误?https://3foldtraining.com/ - 在顶部标题上(如果双击黑条,可以看到该错误) // Avoid the array_slice if p