web-dev-qa-db-fra.com

WP ne montre pas les champs personnalisés de tableau?

Je me demande pourquoi WordPress ne répertorie pas PHP array() et les données sérialisées dans les champs personnalisés du panneau d'administration (pour les pages, les publications, etc.)? Seuls les champs personnalisés contenant des chaînes et des nombres apparaissent et peuvent être modifiés manuellement par l'utilisateur.

Edit: Pourquoi les méta-valeurs post ne sont-elles pas affichées si elles sont stockées sous forme de valeur non chaîne, c'est-à-dire stockées sous forme de tableaux ou de valeur sérialisée?

Exemple: Si une publication a une clé méta 'custom-meta' avec une valeur de chaîne telle que 'oui', elle est affichée dans la boîte méta, mais si elle a une valeur de tableau telle que array('value' => 'yes'), elle n'est pas affichée dans la boîte méta.

Puis-je l'activer?

3
Paul

Il n'y a pas de filtre pour changer ce comportement, il faudrait remplacer tout le metabox .

D'autre part: je pense qu'il n'y a pas de moyen très simple de montrer et de sauvegarder ces tableaux.

Exemple pour une méta clé fictive 'foo':

array (
    0 => 2,
    'hello' => array (
        0 => 2,
        'hello' => 'world'
    )
)

Créer une interface par défaut pour un tel tableau serait très difficile. Ce metabox est pour les champs simples, il devrait être facile à utiliser. Et vous ne pouvez pas simplement présenter la chaîne sérialisée: une édition qui la casserait probablement. Donc, je pense que c'est un compromis. Mieux que rien, mais pas parfait.

4
fuxia

Pour ceux qui atterrissent ici, vous pouvez toujours créer un modèle de page personnalisé sur une page privée, puis lancer quelque chose comme ceci sur le fichier de page de modèle:

/*Template Name: Test Post Meta */
$thisPostMeta = get_post_meta($yourPostId, 'meta_key');

//Check for type of value
if (is_array($thisPostMeta)) {
print_r($thisPostMeta); 
} else {
echo $thisPostMeta;
}

Remarque: non testé.

0
Eckstein

Je pense que vous pouvez utiliser serialize()

Exemple:

$value = array('value' => 'yes');
$new_value = serialize($value);
add_post_meta($post_id,'meta_key',$new_value);

Ensuite, vous pouvez voir la metabox dans le panneau d'administration.

0
秋蕊李