2017-09-01 11 views
1

私はPlayersと呼ばれるカスタムポスティングタイプを持っています。これは8人の異なるプレーヤーを生成しており、それぞれに3人のビデオを持っています。これらのビデオにはタイトルが付いています。 「プレイヤーA - ランニング」「プレイヤーA - スイミング」ACFリピータのサブフィールドの検索と表示

プレイヤーAを入力すると、プレイヤーAのビデオのみが表示されるようにキーワードを検索するにはどうすればいいですか?プレイヤーAそれが主な問題は、Wordpressのは、あなたがビデオタイトルのために独自の検索コードを記述しなければならなかった理由である、デフォルトでカスタムフィールドを検索しないということである私の検索結果内のすべての動画

<?php 
$s=($_GET["s"]); // Insert the searched keyword into a variable 
// check if the repeater field has rows of data 
if(have_rows('videos')): 
// loop through the rows of data 
while (have_rows('videos')) : the_row(); 
    $video_1_title= get_sub_field('video_1_title'); 
    $video_2_title= get_sub_field('video_2_title'); 
    $video_3_title= get_sub_field('video_3_title'); 
    $video_1= get_sub_field('video_1'); 
    $video_2= get_sub_field('video_2'); 
    $video_3= get_sub_field('video_3'); 
    ?> 

<?php 
endwhile; 
endif; 
?> 

<?php if (have_posts()) : 
while (have_rows('videos')) : the_row(); ?> 

<div id="post-<?php the_ID(); ?>" class="videoPosts"> 

<?php 
    if(stripos($video_1_title, $_GET["s"])!== false) ||  
(stripos($video_2_title, $_GET["s"])!== false) || 
(stripos($video_3_title, $_GET["s"])!== false)) : 

?> 

<div id="one"><?php echo $video_1?></div> 
<div id="two"><?php echo $video_2?></div> 
<div id="three"><?php echo $video_3?></div> 


<?php endif; ?> 
</div> 

<?php 
endwhile; 
endif; 
?> 
+0

あるvideo_%_titleと呼ばれるすべてのフィールドで検索するワードプレスを伝えるスタックオーバーフローへようこそ。あなたはこれがどのページであるかを確認できますか?例えば、アーカイブ、単一のものなどですか?あなたの '$ post'が – FluffyKitten

+0

であることがわかりました。それはsearch.phpページです。私は別のセクションにすべてのビデオ、画像、説明を表示する特定のデザインでカスタムsearch.phpページを構築しています。 私はその特定の値を含む個々の投稿を表示できません。たとえば、「John」と入力すると、ジョンに関するすべての画像、ビデオ、説明が別のセクションに表示されます。現在、すべての動画が表示されますが、検索結果ページの上部には「John's」の動画が表示されます。 –

+0

これは普通の投稿です。つまり、カスタム投稿タイプは使用していませんか?私は問題を知っていると確信していますが、解決策を提案する前にすべての情報を得たいだけです! – FluffyKitten

答えて

0

を表示します。 WPの検索でカスタムフィールドを含む

は実際には複雑であり、あなたは、通常Relevanssiのようなプラグインを使用しますが、あなたとしてのみは、私たちにできることを、その後、タイトルで動画を検索したいです!

あなたのループやロジックに問題がありますが、Wordpress検索ではキーワードが標準のWPフィールド(投稿のタイトルや内容など)に存在し、ACFフィールドには存在しないという結果が返されるという大きな問題があります。

あなたはそれをやっている方法を継続する(つまり、あなたのsearch.phpで検索置き換える):

1.以下でごsearch.phpからあなたは上記の持っているコードを置き換えます。

これは、WP_Queryを使用して、新しいタイトルを検索して、ビデオタイトルのみを検索します。

$s=($_GET["s"]); 

// this will search all `player` posts for the search keyword in a custom field called video_%_title 
// you don't need to specify video_1_title, video_2_title etc separately 
$args = array(
    'numberposts' => -1, 
    'post_type'  => 'player', 
    'meta_query' => array(
     array(
      'key'  => 'video_%_title', 
      'compare' => 'LIKE', 
      'value'  => $s, 
     ), 
    ) 
); 
$the_query = new WP_Query($args); 

// loop through the results 
if($the_query->have_posts()): 
    while ($the_query->have_posts()) : $the_query->the_post(); 

     // loop through all results to get the videos: 
     while (have_rows('videos')) : the_row(); ?> 

      <div id="post-<?php get_the_ID(); ?>" class="videoPosts"> 

       <div id="one"><?php echo get_sub_field('video_1'); ?></div> 
       <div id="two"><?php echo get_sub_field('video_2'); ></div> 
       <div id="three"><?php echo get_sub_field('video_3'); ></div> 

      </div> 

     <?php 
     endwhile; // end video loop 

    endwhile; // end posts loop 
endif; 

wp_reset_query(); // Restore global post data stomped by the_post(). 
?> 

注:それは自分のコードが何をするかだから

これは、発見された投稿のすべての動画が表示されます。あなたは、検索キーワードとのものだけを表示したい場合は、代わりにこれを行うことができます:あなたはそれを含める場合、それは動作しますが

$video_1_title= get_sub_field('video_1_title'); 
$video_2_title= get_sub_field('video_2_title'); 
$video_3_title= get_sub_field('video_3_title'); 

<?php 
if(stripos($video_1_title, $_GET["s"])!== false)) { ?> 
    <div id="one"><?php echo get_sub_field('video_1'); ?></div> 
<?php 
} 
if(stripos($video_2_title, $_GET["s"])!== false)) { ?> 
    <div id="two"><?php echo get_sub_field('video_2'); ?></div> 
<?php 
} 
if(stripos($video_3_title, $_GET["s"])!== false)) { ?> 
    <div id="three"><?php echo get_sub_field('video_3'); ?></div> 
<?php 
} 
?> 

2.(あなたのfunctions.php

にこれを追加しますあなたのsearch.phpページで)
これは、%は、任意の数

function player_video_posts_where($where) { 
    $where = str_replace("meta_key = 'video_%", "meta_key LIKE 'video_%", $where); 
    return $where; 
} 
add_filter('posts_where', 'player_video_posts_where'); 
+0

wp_queryオプションは機能しませんでしたが、2番目のコードが私のビデオセクションのトリックでした。どうもありがとう。 –

関連する問題