値を変数に格納するパーサーがあります (duh)。ここで問題の変数は次のとおりです。
$item[2] <- contains the string 'facebook'
選択メニューを含む html フォームがあります。メニューは、データベースに保存されているものに基づいて動的に入力されます。これは私のメニューがどのように構築されるかです:
<?php
$formats = $wpdb->get_results($wpdb->prepare("
SELECT * FROM table
WHERE taxonomy = 'format'
"));
?>
<div id="format" class="form">
Format: <?php echo $item[2]; ?> <!-- echoes the variable to know it works -->
<?php
$terms = array();
foreach($formats as $key => $term){
$terms[$term->parent][$term->term_id] = $term;
}
?>
<select name="formats">
<option value="empty"></option>
<?php printTerms($terms, $item); ?> <!--- THIS DOESN'T APPEAR TO PASS $item INTO THE FUNCTION -->
</select>
</div>
<?php
function printTerms($terms, $item, $parent = 0, $deep = 0){ // HOW DO I USE $item ???
if(count($terms[$parent]) > 0){
$indent = "";
for($i = 0; $i < $deep; $i++){
$indent .= " ";
}
foreach($terms[$parent] as $key => $term){
if(count($terms[$term->term_id]) > 0){
if($deep == 0){
echo "<option class='toplevel' value='".$term->name."' ".$selected.">".$term->name."</option>"; // <- Outputs top level parents
} else {
echo "<option class='child".$deep."' value='".$term->name."' ".$selected.">".$indent.$term->name."</option>"; // <- Outputs children that are also parents
}
printTerms($terms, $term->term_id, ($deep+1));
} else {
echo "<option class='solo' value='".$term->name."' ".$selected.">".$indent.$term->name."</option>"; // <- outputs bottom level children and solos.
}
}
}
}
?>
これまでのところ、これはすべて機能しますが、ここに私の問題があります。
items[2] に文字列 'Facebook' が含まれている場合 (含まれている場合)、対応するメニュー オプションがデフォルトで選択されるようにしたいと考えています。
次のような単純な静的選択メニューで動作するようにしました。
foreach ($formats as $format) {
$selected = '';
if ($item[2] == 'facebook' || $item[2] == 'wall' && $format->slug == 'facebook'){
$selected = 'selected';
}
echo "<option value='".$format->name."' ".$selected.">".$format->name."</option>";
}
$format->slug は、$item[2] に一致させたい値を含むものです。そのため、$term->slug は $format->slug に対応します。
$format->name は、メニュー自体に出力するための選択オプションのタイトルです。同様に、$term->name は $format->name に対応します。
$formats は、この MySQL テーブルにアクセスします。
term_id name slug taxonomy parent
1 Entry Form entry-form format 0
2 Page page format 3
3 Facebook facebook format 0
4 Entry Form facebook-entry-form format 3
5 Twitter twitter format 0
6 Single single format 2
$selected 変数を関数に既に挿入していることに気付くでしょう。私の問題は、上記のコードを printTerms 関数のコンテキスト内で動作させることができないことです。
私の質問の目的のために、どの変数にも空白がまったくないと仮定します(私がチェックしました)。
留意すべきいくつかのルール:
$term->slug と $item[2] は常に一致するとは限りません。$item[2] が「wall」の場合、「facebook」もデフォルトで選択されます。(上記の私のコードを参照してください)。
問題は、printTerm() 関数を select コードと組み合わせるにはどうすればよいかということです。