0

私は現在、カスタム分類法を照会し、そのlocation用語を検索結果として表示するWordpressテーマ内の変更された検索に取り組んでいます。これを処理するための組み込みのWordpress関数が見つからなかったので、$wpdb query

$keywords = $_GET['s'];
$results = $wpdb->get_results( "SELECT * FROM $wpdb->terms WHERE name LIKE '%%$keywords%%'");

<ul>
<?php foreach ( $results as $result ) :?>
   <li><?php echo $result->name;?></li>
<?php endforeach;?>
</ul>

これに関する問題は、テーブルにwp_termsカスタム分類用語だけでなく、他のデフォルト用語も格納されることです。したがって、他のデフォルト用語ではなく、カスタム分類法のみの検索結果を表示するために、カスタム分類法にget_terms属するすべての用語を取得し、結果に基づいlocationてテーブルから用語を表示することを考えました。wp_termsget_termsin_array

$keywords = $_GET['s'];
$results = $wpdb->get_results( "SELECT * FROM $wpdb->terms WHERE name LIKE '%%$keywords%%'");

$terms = get_terms("location");

<ul>
<?php foreach ( $results as $result ) :?>
  if(in_array($result->name, $terms)) :?>
     <li><?php echo $result->name;?></li>
  <?php endif;?>
<?php endforeach;?>
</ul>

ただし、$results$termsは両方ともstdClassオブジェクトであるため、in_array機能しません。

$resultsオブジェクトのコンテンツに基づいてオブジェクトからの結果を表示できるようにする関数、メソッド、または場合によってはMySQLクエリのいずれかがあります$termsか?

前もって感謝します。

編集: の内容$terms

Array ( 
  [0] => stdClass Object ( [term_id] => 32 [name] => US [slug] => us [term_group] => 0 [term_taxonomy_id] => 32 [taxonomy] => signs [description] => [parent] => 25 [count] => 1 ) 
  [1] => stdClass Object ( [term_id] => 22 [name] => EU [slug] => eu [term_group] => 0 [term_taxonomy_id] => 22 [taxonomy] => signs [description] => [parent]  => 0 [count] => 3 ) 
  [2] => stdClass Object ( [term_id] => 26 [name] => AU [slug] => au [term_group] => 0 [term_taxonomy_id] => 26 [taxonomy] => signs [description] => [parent] => 22 [count] => 1 ) 
  [3] => stdClass Object ( [term_id] => 27 [name] => IE [slug] => ie [term_group] => 0 [term_taxonomy_id] => 27 [taxonomy] => signs [description] => [parent] => 22 [count] => 2 ) 
  [4] => stdClass Object ( [term_id] => 23 [name] => PK [slug] => pk [term_group] => 0 [term_taxonomy_id] => 23 [taxonomy] => signs [description] => [parent] => 0 [count] => 2 ) 
)
4

1 に答える 1

1

それらを配列に変換するには、

(array) $variable;

または、stdClass にネストされた stdClasses が含まれている場合は、次の操作を実行できます。

function obj_to_array_recursive(stdClass $obj) {
    foreach ($obj as &$element) {
        if ($element instanceof stdClass) {
            obj_to_array_recursive($element);
            $element = (array)$element;
        }
    }
    $obj = (array)$obj;
    return $obj;
}
于 2012-08-22T09:53:40.807 に答える