wake-up-neo.com

Wo wird der Schlüssel _wp_page_template übergeben?

Wenn Sie benutzerdefinierte Post-Meta-Boxen hinzufügen, wird das von Ihnen eingegebene name-Attribut input über das Formular an den Server übergeben.

Daher, wenn ich habe

<input type="text" name="my_custom_field" id="my_custom_field" />

mit

get_post_meta($post->ID, 'my_custom_field', true);

Ich bin in der Lage, den Wert dieser input abzurufen, ist möglich.

In Bezug darauf habe ich ein wenig gegoogelt, wie benutzerdefinierte Seitenvorlagen ausgerichtet werden sollen, und dies habe ich gefunden.

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' );

Woher kommt _wp_page_template?

Ich habe die Seite WP zum Bearbeiten des Backends im Meta-Feld "Seitenattribute" überprüft, aber in keinem Feld ist dieser Schlüsselname angegeben. Was mich verwundert, ist, wie _wp_page_template auch in der wp_postmeta-Tabelle der Datenbank erscheint.

Kann mir jemand helfen, das zu erklären?

Danke im Voraus.

1
Bobby

Das HTML-Attribut name wird an den Server gesendet. Es gibt einen PHP Code, der es liest und mit einem bestimmten Schlüssel in der Datenbank speichert.

Der HTML-Name und der Datenbankschlüssel müssen nicht dieselbe Zeichenfolge sein. Der Code PHP kann einen völlig anderen Namen verwenden oder einen Wert in mehrere Datenbankwerte aufteilen.

Der Vorlagenattribut-Handler führt Folgendes aus: Er nimmt den Namen page_template aus der Seitenattribut-Metabox und speichert ihn als _wp_page_template in der Datenbank. Der führende Unterstrich schützt dieses Feld davor, in den Feldern custom metabox angezeigt zu werden.

Siehe diesen Teil in 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

Das Speichern von Daten aus einem Formular erfolgt nicht automatisch, wie Sie vielleicht denken ...

Beim Hinzufügen von benutzerdefinierten Post-Meta-Feldern wird die Eingabe von Namensattributen, die Sie eingegeben haben, über das Formular an den Server weitergeleitet. Wenn also <input type="text" name="my_custom_field" id="my_custom_field" /> verwendet wird, ist die Verwendung von get_post_meta($post->ID, 'my_custom_field', true); zum Abrufen des Werts dieser Eingabe möglich.

Ja, die Formulardaten werden entweder als POST oder als GET an den Server übergeben, aber diese Daten werden nicht verarbeitet, wenn sie nicht absichtlich vom Skript verarbeitet werden. Das bedeutet oft, in der Datenbank zu speichern, aber nicht unbedingt. Sie können die Daten stattdessen per E-Mail senden, beispielsweise als Teil eines Kontaktformulars.

Das Attribut name, das das Formular verwendet, muss nicht mit dem in der Datenbank gespeicherten Schlüssel übereinstimmen. Der Code, der das Formular verarbeitet, kann es unter jedem vom Programmierer gewünschten Schlüssel speichern.

Die Daten, von denen Sie sprechen, werden von der Funktion wp_insert_post in wp-includes/post.php verarbeitet.

0
s_ha_dum