1

私はACF文書の公式guideに従っていますが、それを正しく取得できませんでした。私は高度なカスタムフィールドとカスタムポストタイプのUIプラグインを使用しています。リピータフィールドのサブフィールドによるACFフィルタカスタム投稿

私は材料という名前のカスタムポストタイプを持って、それぞれの材料がファイルリピータフィールドを持って、サブフィールドの一つは、タイトルです。私は、タイトルに基づいて投稿を照会し、ajaxを使用して結果をページに載せたいと思います。ここで

は私のfunctions.phpです:

function materialsSearchAjax() { 

    $html = ""; 
    $keyword = $_POST['keyword']; 
    // args 
    $args = array(
    'numberposts' => -1, 
    'posts_per_page' => -1, 
    'post_type'  => 'materials', 
    'meta_key' => 'type', 
    'meta_value' => 'students', 
    'meta_query' => 
     array(
      'key'  => 'files_%_title', 
      'compare' => 'LIKE', 
      'value'  => $keyword, 
    ) 
); 

    $query = new WP_Query($args); 
    $posts = array(); 
    $html .= '<div class="Materials-students">'; 

    while($query->have_posts()) : $query->the_post(); 
    $html .= '<div class="Files-list u-padding-left--12">'; 
     if(have_rows('files')){ 
     while (have_rows('files')) : the_row(); 
      $html .= '<div class="Files-item u-margin-right--30 u-margin-bottom--18">'; 
      $html .= '<div class="Files-itemImage"></div>'; 
      $html .= '<a href="' . the_sub_field("document") . '" target="_blank" class="Files-itemLink">'; 
      $html .= the_sub_field('title'); 
      $html .= '</a>'; 
      $html .= '</div>'; 
     endwhile; 
     } 
    $html .= '</div>'; 
    endwhile; 

    $html .= '</div>'; 

    wp_reset_query(); 
    return $html; 
} 

// filter 
function materials_where($where) { 

    $where = str_replace("meta_key = 'files_%", "meta_key LIKE 'files_%", $where); 

    return $where; 
} 

function igs_scripts_styles() { 
    wp_enqueue_script('ajaxMaterialsSearch', get_template_directory_uri() . '/assets/scripts/ajaxMaterialsSearch.js', array(), false, true); 
    wp_localize_script('ajaxMaterialsSearch', 'ajax_data_object', array('url' => admin_url('admin-ajax.php'))); 
} 

add_action('wp_ajax_nopriv_materialsSearchAjax', 'materialsSearchAjax'); 
add_action('wp_ajax_materialsSearchAjax', 'materialsSearchAjax'); 
add_filter('posts_where', 'materials_where'); 
add_action('wp_enqueue_scripts', 'igs_scripts_styles'); 

ここに私のAjaxです:

(function($) { 
    // Trigger submit 
    $('.Search-magnifier').on('click', function(){ 
    var $form = $(this).parent(); 
    $($form).submit(); 
    }); 

    $('.Search-form').on('submit', function(event){ 
    event.preventDefault(); 
    var $form = $(this); 
    var searchKeyword = $($form).find('input[type="search"]').val(); 
    console.log('keyword: ' + searchKeyword); 
    $.ajax({ 
     type: 'POST', 
     url: ajax_data_object.url, 
     data: {action: 'materialsSearchAjax', keyword: searchKeyword}, 
     success: function(textStatus) { 
     // update the content 
     console.log(textStatus); 
     $('.Materials-students').replaceWith(textStatus); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
     console.log(errorThrown); 
     } 
    }); 
    }); 
})(jQuery); 

AJAXとクエリの作業罰金は、私はすべての材料のみを考えることのようにタイトルをフィルタリングすることなく、Postクエリ場合クエリー自体が間違っています。私はガイドに従ったが、何時間も立ち往生した。

+0

リピータ 'ファイル 'の行のサブフィールド' title'と一致するすべての 'materials'を検索するようにしたいと思います。 –

+0

はい、まさに私が欲しいものです@JordiNebot – YaphatS

答えて

0

あなたの唯一の間違いは、meta_query内にあると思います。 (オプションの)第1レベルのrelationのほかに、meta_queryは配列の配列でなければなりません。試してみてください:

$args = array(
    'posts_per_page' => -1, 
    'post_type'  => 'materials', 
    'meta_key'  => 'type', 
    'meta_value'  => 'students', 
    'meta_query'  => array(
     array(
      'key'  => 'files_%_title', 
      'compare' => 'LIKE', 
      'value' => $keyword, 
     ) 
    ) 
); 

WP Codexから: -

meta_query(配列)は、1つまたは複数のアレイ以下のキーを持つが含まれています。[...]私は除いて(あなたのケースを複製し

Ajaxの場合)、クエリはうまくいきました。だから、これはAjax呼び出しでもうまくいくはずです。

関連する問題