web-dev-qa-db-ja.com

この機能に関して誰かが何か手助けをすることができますか?

私は私のfunctions.phpファイルのための関数を書き込もうとしています。私は以下のことをしなければなりません。

  • 検索結果をループしてテンプレートを確認する
  • テンプレートが 'landing.php'の場合は広告配列に追加します
  • これらのページを検索結果から除外するには、配列に集められたIDを使用してください。

私は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');
1
Dan

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);
    }
}
0
Rarst

検索結果から特定のページや投稿を削除する必要がある場合は、「 WP Hide Post 」プラグインを使用して簡単に削除できます。

その説明によると、「ブログの一部では投稿/ページを非表示にし、その他の部分では表示できるようにすることで、ブログ上のアイテムの表示を制御できます。」

特に、このプラグインを使用すると、さまざまなビューで投稿の表示/非表示を制御できます。

  • フロントページ(ホームページ、あなたのテーマによっては、これは関連性がないかもしれません)
  • カテゴリページ(カテゴリに属する​​投稿のリスト)
  • タグページ(特定のタグでタグ付けされた投稿を一覧表示)
  • 著者ページ(著者に属する記事のリスト)
  • アーカイブページ(期間に属する投稿のリスト:月、週、日など)
  • 検索結果
  • フィード

投稿が消えるように選択した場所から消えます。それ以外の場所では、通常の投稿として表示されます。特に、投稿のパーマリンクはまだ機能していて、あなたがサイトマップを生成するならば、Google XMLサイトマップのようなものでその投稿も同様にあるでしょう。これはあなたの投稿のコンテンツがインデックスされ検索エンジンによって検索可能になることを意味します。

WordPressページの場合、このプラグインを使用すると、2つのオプションで表示設定を制御できます。

  • フロントページ(ホームページ)でのみページを非表示にします。
  • ブログ内のあらゆる場所でページを非表示にします(検索結果にページを隠すはオプションです)。
0
Paulo Coghi