web-dev-qa-db-fra.com

Recréer la hiérarchie des taxonomies pour un menu de formulaire déroulant?

J'ai un formulaire qui contient un menu déroulant. Ce formulaire se trouve sur une page form.php et ne fait pas partie de mon thème. Il existe en dehors de mon site. Ce menu déroulant contient ma liste de valeurs pour une taxonomie personnalisée appelée Formats . Mes formats sont les suivants:

Entry Form
Facebook
  - Entry Form
  - Page
Twitter

Ceci est mon code jusqu'à présent:

<?php include("wp-blog-header.php"); ?>
<?php 
global $wpdb;
$getFormats = $wpdb->get_results($wpdb->prepare("

        SELECT * FROM wp_terms p 

        LEFT OUTER JOIN wp_term_taxonomy t ON p.term_id = t.term_id

        WHERE t.taxonomy = 'format'

        ")); ?> // This gets all the values for the format taxonomy

<form> //start form
<select name="format"> //start dropdown

<?php
foreach ($getFormats as $format) { //spit out the formats
    echo "<option value='".$format->name."'>".$format->name."</option>";
} ?>

</select> //end dropdown
</form> // end form
?>

Jusqu'ici, ma liste déroulante ressemble à ceci:

Entry Form
Facebook
Entry Form
Page
Twitter

Première question: comment puis-je faire en sorte que la hiérarchie reste fidèle (c'est-à-dire conserver les tirets)?

Ma sortie HTML est la suivante:

<option value="Entry Form">Entry Form</option>
<option value="Facebook">Facebook</option>
<option value="Entry Form">Entry Form</option>  // <---- this is gonna be a problem
<option value="Page">Page</option>
<option value="Twitter">Twitter</option>

Deuxième question: Vous remarquerez que le résultat de la deuxième instance du formulaire de saisie est identique à celui de la première instance. De toute évidence, cela va poser un problème pour l'envoi du formulaire. Comment puis-je rendre cela unique?

1
Sweepster

Vous pouvez utiliser la fonction WordPress standard , obtenir le menu déroulant déjà formaté et résoudre les deux problèmes à la fois.

Ainsi:

define( 'WP_USE_THEMES', false );
require( './wp-load.php' );

wp_dropdown_categories(
    array(
        'child_of' => 0,
        'class' => 'postform', 
        'depth' => 0,
        'echo' => 1,
        'exclude' => '', 
        'hide_empty' => false, 
        'hide_if_empty' => false,
        'hierarchical' => true,
        'id' => '',
        'name' => 'cat-dropdown', 
        'order' => 'ASC',
        'orderby' => 'name', 
        'selected' => 0, 
        'show_count' => 0,
        'show_option_all' => '', 
        'show_option_none' => __('None'),
        'tab_index' => 0, 
        'taxonomy' => 'category',
    )
);

Les sorties:

<select name='cat-dropdown' id='cat-dropdown' class='postform' >
    <option value='-1'>None</option>
    <option class="level-0" value="2">Other</option>
    <option class="level-0" value="1">Uncategorized</option>
    <option class="level-1" value="4">&nbsp;&nbsp;&nbsp;Other</option>
    <option class="level-2" value="5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Other</option>
</select>

Pour la catégorie par défaut: categories list

4
brasofilo