web-dev-qa-db-ja.com

投稿タイプの添付ファイルのタイトルを検索

私はid=10を持つテーブルの中のページのすべての添付ファイルを表示するページを持っています。

何百もの添付ファイルがあり、添付ファイルのタイトルを検索キーとして使用するAJAX検索フォームを実装したいと思います。

実際のところ問題はAJAX呼び出しを実装することではなく、添付ファイルリストを返すクエリです。

あなたが問い合わせるようなものかもしれません

<?php
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' =>'any', 'post_parent' => 10 ); 
$attachments = get_posts($args);
if ($attachments) {
    foreach ( $attachments as $attachment ) {
        if('you title of image'==$attachment->post_title ){
              //your code goes here
        }
    }
}
?>

重要なリンク

get_posts()

Ajax検索フォーム

2
Ravinder Kumar

カスタムクエリのパラメータとしてs(検索)を適用してみてください。

この例を参照してください。

$query = new WP_Query( 's=keyword' );

そして通常のループを適用して結果を繰り返すことができます。これは@Ravsの回答のためにコメントで述べた演算子%keyword%と同じように文字列マッチングも実行します。

こちらのドキュメント を参照してください

2
Rohit Pande

WP_Queryはデフォルトであなたが望むことをしません。 post_nameで検索しようとすると、厳密すぎるpost_name=クエリが表示されます。 sパラメータを使用すると、投稿名と投稿内容の両方に対して%term%検索が行われ、termは先頭だけでなくWordの任意の場所に一致します。そしてそれはあなたがしていることのためには広すぎます。そしてsはあなたが用語を追加するにつれてますます効率が悪くなりますが、それはあなたにとって問題ではないかもしれません。

「最初のn」の文字を入力した場合は、一致が必要だと言うので、クエリをフィルタ処理する必要があります。これでうまくいくはずです。

function search_filter_right_wild($search) {
  remove_filter('posts_where','search_filter_right_wild');
  global $wpdb;
  $pattern = "|{$wpdb->posts}.post_name = '([^']*)'|";
  $search = preg_replace($pattern,"{$wpdb->posts}.post_name LIKE '$1%'",$search);
  return $search;
}
add_filter('posts_where','search_filter_right_wild');

$q = new WP_Query( 
  array(
    'name' => 'test',
    'post_type' => 'attachment', 
    'numberposts' => -1, 
    'post_status' => 'inherit'
  ) 
);
var_dump($q->request);

あなたは投稿名のみを検索していて、フィルタは右側にのみ%を追加しているので、ワイルドカードの一致は用語の右側にのみあります。

クエリの前にAJAXコールバックにフィルタを追加すると、自動的に自分自身を削除します(ただし、最後の部分はおそらく不要です)。

2
s_ha_dum