私は管理者検索にメタデータを追加するコードスニペットをいじっています。
私が見つけた最高のスニペットは、この質問についてStefanoによって書かれました。
ただし、メタ以外の用語を検索すると、1つの厄介なバグがあるようです。
ここに私のローカル開発インストールからのいくつかのグラブがあります。2つのMySQLクエリを画面に出力しました。
テストに使用している単一のCPT投稿の表示
これは期待どおりに機能し、管理者からメタデータを検索できるようにするコードです
残念ながら、コードは非メタ一致、この場合は投稿のタイトルに重複を作成します
デュープの投稿ステータス、投稿タイプ、投稿先祖を示すグラブ
!デュープの投稿ステータス、投稿タイプ、投稿先祖を示すグラブ
これが私が実行しているコードです。基本的にはStefanoのコードと同じですが、クエリを機能させるための大まかな試みが行われています。
/*
* Search custom fields from admin keyword searches
*/
function rel_search_join( $join ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type'] == 'listings' && $_GET['s'] != '') {
$join .= 'LEFT JOIN ' . $wpdb->postmeta . ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}
echo '<br><strong>JOIN</strong>: ';
print_r ( $join );
echo '<br>';
return $join;
}
add_filter('posts_join', 'rel_search_join' );
function rel_search_where( $where ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type']=='listings' && $_GET['s'] != '' ) {
$where = preg_replace( "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
$where = str_replace( "OR wp_posts.post_status = 'pending'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'private'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'draft'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'future'", "", $where );
}
echo '<br><strong>WHERE</strong>: ';
print_r ( $where );
echo '<br>';
return $where;
}
add_filter( 'posts_where', 'rel_search_where' );
多分それは改訂もリストしていますか?
—
passatgt 2013
保留中、プライベート、ドラフト、フューチャーを削除したので、公開済みのものだけを見ていたと思いました。リビジョンタイプに気づかなかった。
—
jnthnclrk 2013
列の1つで投稿タイプまたは投稿IDをprint_rしようとします。リビジョンは投稿タイプだと思うので、リビジョンを確認できる場合は、結果にも表示されます。しかし、リストの投稿タイプからの結果のみを表示していることも確認できるので、私は間違っていると思います。しかし、試してみる価値はあります:)
—
passatgt 2013
投稿ステータス、投稿タイプ、投稿先祖を含む新しいグラブを追加しました。
—
jnthnclrk 2013