Ich bin die offizielle guide in ACF-Dokumentation, aber war nicht in der Lage, es richtig zu machen. Ich verwende erweiterte benutzerdefinierte Felder und benutzerdefinierte Post-Typ-UI-Plugins.ACF Filter benutzerdefinierte Beiträge nach Unterfeld Repeater Feld
ich eine benutzerdefinierte Post Typ Materialien, jedes Material hat eine Dateien Repeater Feld, einer der Unterfeld ist Titel benannt haben. Ich möchte die Beiträge basierend auf dem Titel abfragen und die Ergebnisse mit Ajax auf die Seite stellen.
Hier ist meine 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');
meine Ajax hier:
(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);
Die Ajax und Abfrage funktionieren, wenn ich alle Materialien veröffentlichen abfragen, ohne den Titel Filterung so die denken, nur das ist, falsch ist die Abfrage selbst. Ich folgte dem Führer, steckte aber stundenlang fest.
Ich verstehe, dass Sie möchten, dass Ihre Abfrage alle 'Materialien' abruft, die mit dem Unterfeld' title' für jede Zeile auf dem Repeater 'files' übereinstimmen, richtig? –
Ja, genau das möchte ich @JordiNebot – YaphatS