web-dev-qa-db-fra.com

Où la clé _wp_page_template est-elle transmise?

Lors de l'ajout de boîtes de méta de publication personnalisées, je comprends que tout attribut nameinput 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.

1
Bobby

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);
}
1
fuxia

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'utiliser get_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 .

0
s_ha_dum