私は私のfunctions.phpファイルのための関数を書き込もうとしています。私は以下のことをしなければなりません。
私はWordpress Codexフォーラムでいくつかのコードを見つけました、私は少し自分自身を加えました、しかし残念ながら私が何をしているのかわからない...
function filter_where($where = '') {
global $wpdb; // do I need this?
if ( is_search() ) {
if(is_page_template('landing.php')) { echo 'yes!'; } // ids collected here
$exclude = array(286);
for($x=0;$x<count($exclude);$x++){
$where .= " AND ID != ".$exclude[$x];
}
}
return $where;
}
add_filter('posts_where', 'filter_where');
posts_where
を使用しているフィルタはSQLクエリの作成に影響するため、定義上、クエリの実行前に実行され、検索結果があります。
そのため、現時点では結果をループ処理することはできません。できることは、不要な項目のリストを別の場所から取得またはハードコード化し、それらを使用してクエリを変更することです。
更新
わかりました、これはコメントで解決しようとするよりもコーディングが速いです。これはおそらく完璧ではありませんが、あなたが望むもののための良い出発点であるべきです:
add_action('pre_get_posts','exclude_pages');
function exclude_pages( $query ) {
if( !empty( $query->query_vars['s'] ) ) {
$pages = get_posts(array(
'post_type' => 'page',
'meta_query' => array( array(
'key' => '_wp_page_template',
'value' => 'landing.php',
)),
));
$exclude = array();
foreach( $pages as $page )
$exclude[] = $page->ID;
$query->set('post__not_in', $exclude);
}
}
検索結果から特定のページや投稿を削除する必要がある場合は、「 WP Hide Post 」プラグインを使用して簡単に削除できます。
その説明によると、「ブログの一部では投稿/ページを非表示にし、その他の部分では表示できるようにすることで、ブログ上のアイテムの表示を制御できます。」
特に、このプラグインを使用すると、さまざまなビューで投稿の表示/非表示を制御できます。
投稿が消えるように選択した場所から消えます。それ以外の場所では、通常の投稿として表示されます。特に、投稿のパーマリンクはまだ機能していて、あなたがサイトマップを生成するならば、Google XMLサイトマップのようなものでその投稿も同様にあるでしょう。これはあなたの投稿のコンテンツがインデックスされ検索エンジンによって検索可能になることを意味します。
WordPressページの場合、このプラグインを使用すると、2つのオプションで表示設定を制御できます。