Question

Je suis en train de créer un plug-in qui crée plusieurs types de postes personnalisés (CPT) (qui fonctionnent tous très bien). Certains de ces CPTs nécessitent un « panneau d'écriture personnalisé » qui signifie en fait qu'il dispose d'un ensemble de boîtes de méta personnalisés plutôt que la tourbière standard case « modifier » que vous obtenez avec vos messages ou pages.

L'un de ces CPTs nécessite un ensemble « dynamique » des boîtes de méta qui a essentiellement une quantité indéterminée de valeurs. Je vais essayer de donner un exemple:

(ce n'est pas ce que je fais, mais il semble comme un exemple décent de la façon dont je voudrais que cela fonctionne)

Imaginez que nous avons un CPT de « maisons » et l'une des options de méta personnalisées pour ce CPT est « chambres » - évidemment, différentes maisons ont quantité différente de chambres, qui ont toutes des propriétés différentes. Donc, je voudrais être en mesure de permettre à l'utilisateur d'ajouter plusieurs propriétés différentes d'un i.e. chambre.

Dimensions, aspect, nombre de fenêtres et le type de sol

Lorsque l'utilisateur a ajouté ces détails pour la première chambre, si la maison a une deuxième chambre alors je les voudrais avoir un bouton « ajouter chambre » et un autre ensemble de ces boîtes méta est ajoutée afin qu'ils puissent remplir le détails sur 2 chambres.

Je comprends que je vais avoir besoin de javascript pour ajouter cette installation (et quelque chose que je ne me dérange pas écrit) mais ce que je me bats dans mon pauvre cerveau inutile est de savoir comment sauvegarder dans la base de données. Je veux y parvenir en utilisant WordPress méta pour que je ne rajoutons pas de tables de base de données inutiles et je suis sûr qu'il est possible que je ne peux pas tout à fait comprendre les principes de la façon de sauvegarder les données.

Pointeurs à des tutoriels serait génial, ou quelques exemples de plug-ins qui font déjà ce genre de chose serait très chaleureusement reçu.

Était-ce utile?

La solution

Je pense que la meilleure façon de le faire serait d'utiliser des tableaux dans les formes. Si vous venez d'avoir une collection de valeurs qui ont été enregistrées dans post_meta, vous ne pourrez les relier au poste (dans cette maison de cas), mais pas quelle dimensions correspondent quel type de sol, etc

Si vous aviez les noms de chaque champ de formulaire quelque chose comme chambre [largeur], chambre à coucher [num_windows], chambre à coucher [bed_type] etc, vous stockerait un tableau dans la table post_meta, donc quand vous obtenez la méta post pour la chambre à coucher d'une maison, il retournerait un tableau de tableaux (la première niveau represnting les chambres, le second représentant les attributs d'une pièce

Vous pouvez même prendre un peu plus loin si vous voulez, et nommez-les chambres sur le terrain [i] [attribut] où i est un compteur que vous maintenez dans le JS. Ensuite, vous aviez seulement une seule méta poste pour toutes les chambres

Autres conseils

Voici un des articles vraiment bons sur la création de boîtes méta.

Ensuite, se fondant sur les articles ci-dessus, si vous voulez des boîtes meta spécifiques par type de poste personnalisé, vous pouvez utiliser certains si des déclarations comme suit pour y parvenir.

$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID']; $post = get_post($post_id);
$post_meta = array();
if ($post->post_type == 'hardware') { $post_meta[] = array( "type" => "text", "name" => "Input Example", "id" => $shortname."_input_one", "desc" => 'Description', "std" => '');

} elseif ($post->post_type == 'software') {
$post_meta[] = array( "type" => "textarea", "name" => "Text Area Example", "id" => $shortname."_textarea", "desc" => 'Description.', "std" => '', "rows" => "3"); $post_meta[] = array( "type" => "text", "name" => "Input Example", "id" => $shortname."_input_two", "desc" => 'Description', "std" => '', "rows" => "5"); }

$ post_id = ... définit en quelque sorte le crochet que vous êtes IF déclaration sera basée sur son.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top