web-dev-qa-db-ja.com

ドロップダウンフォームメニューの分類の階層を再作成する

ドロップダウンメニューを含むフォームがあります。このフォームはform.phpページにあり、私のテーマの一部ではありません。私のサイトの外にあります。このドロップダウンメニューには、Formatsというカスタム分類法の値の一覧があります。 Myフォーマットは次のとおりです。

Entry Form
Facebook
  - Entry Form
  - Page
Twitter

これが私のコードです。

<?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
?>

これまでのところ、私のドロップダウンは次のようになっています。

Entry Form
Facebook
Entry Form
Page
Twitter

最初の質問:階層を固定する(つまりインデントを保持する)にはどうすればよいですか。

私のHTML出力は次のとおりです。

<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>

2番目の質問:Entry Formの2番目のインスタンスの出力は最初のインスタンスと同じです。明らかに、これはフォームを送信するための問題になるでしょう。どうやってこれをユニークにすることができますか?

1
Sweepster

標準の WordPress関数を使用して、すでにフォーマットされているドロップダウンを取得し、両方の問題を一度に解決できます。

そのようです:

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

出力:

<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>

デフォルトのカテゴリの場合: categories list

4
brasofilo