Lors de l'ajout de boîtes de méta de publication personnalisées, je comprends que tout attribut name
input
que vous avez mis serait transmis via le formulaire au serveur.
Par conséquent, si j'ai
<input type="text" name="my_custom_field" id="my_custom_field" />
en utilisant
get_post_meta($post->ID, 'my_custom_field', true);
Je suis capable de récupérer la valeur de cette input
est possible.
À ce propos, j'ai cherché quelques articles sur Google pour cibler les modèles de page personnalisés. C'est ce que j'ai découvert.
global $post;
function func_name {
if ( 'foobar.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {
do something...
}
}
add_action( 'add_meta_boxes_page', 'func_name' );
D'où vient _wp_page_template
?
J'ai effectué une inspection sur la page d'édition dorsale WP de la boîte de méta Attributs de page, mais aucun champ ne porte ce nom de clé. Ce qui me trouble, c'est que _wp_page_template
apparaît également dans la table de la base de données wp_postmeta.
Quelqu'un peut-il m'aider à expliquer cela?
Merci d'avance.
L'attribut HTML name
est ce qui est envoyé au serveur. Il y a du code PHP qui le lit et le stocke avec une clé spécifique dans la base de données.
Le nom HTML et la clé de la base de données ne doivent pas obligatoirement être la même chaîne. Le code PHP peut utiliser un nom complètement différent ou fractionner une valeur en plusieurs valeurs de base de données.
Le gestionnaire d'attributs de gabarit fait cela: Il prend le nom page_template
dans la métabox d'attributs de page et le stocke sous le nom _wp_page_template
dans la base de données. Le trait de soulignement en tête empêche ce champ d’apparaître dans les champscustommetabox.
Voir cette partie dans wp_insert_post()
:
if ( !empty($page_template) && 'page' == $data['post_type'] ) {
$post->page_template = $page_template;
$page_templates = wp_get_theme()->get_page_templates();
if ( 'default' != $page_template && ! isset( $page_templates[ $page_template ] ) ) {
if ( $wp_error )
return new WP_Error('invalid_page_template', __('The page template is invalid.'));
else
return 0;
}
update_post_meta($post_ID, '_wp_page_template', $page_template);
}
L'enregistrement des données d'un formulaire n'est pas automatique, comme vous semblez le penser ...
Lors de l'ajout de boîtes de méta post personnalisées, je comprends que toute entrée d'attribut de nom que vous indiquez soit transmise via le formulaire au serveur. Par conséquent, si
<input type="text" name="my_custom_field" id="my_custom_field" />
, il est possible d'utiliserget_post_meta($post->ID, 'my_custom_field', true);
pour récupérer la valeur de cette entrée.
Oui, les données de formulaire seront transmises au serveur sous forme de données POST
ou GET
, mais rien ne se passe pour ces données si elles ne sont pas intentionnellement traitées par le script. Cela signifie souvent qu'il faut enregistrer dans la base de données, mais pas nécessairement. Vous pouvez également envoyer les données par courrier électronique, dans le cadre d'un formulaire de contact par exemple.
L'attribut name
utilisé par le formulaire ne doit pas nécessairement correspondre à la clé enregistrée dans la base de données. Le code qui traite le formulaire peut l'enregistrer sous n'importe quelle clé souhaitée par le programmeur.
L'élément de données dont vous parlez est traité par la fonction wp_insert_post
dans wp-includes/post.php
.