我几个小时以来一直在寻找这个问题的答案,但是没有发现任何与我的情况有关的事情。
我的设置: 我创建了一个自定义TinyMCE按钮,其中包含一个WordPress主题的弹出窗口,允许用户从下拉列表中选择自定义帖子类型的帖子(在本例中为“客户评论”),然后将其ID插入到短代码中。由于这个主题将运行的网站有超过1,000条评论,我认为json编码下拉列表的数据会更好,然后使用select2搜索有限结果列表(分页结果)并保留整个事物从炸毁。所有这一切都成功,除了2项:
json编码数据显示,但是当我输入搜索词时,select2下拉列表会显示所有带有第一个选中的评论的列表。即使搜索到的文本在列表中
从上面开始,一旦我输入一个搜索词,select2就会显示所有结果,而不仅仅是10,或者我设置的任何限制。
以下是我对json编码数据的方法(在一个名为bpl_content.php的文件中):
var centuries = [
[],[],[],[],[]
];
ancestry.forEach(function(person) {
var centuryOfDeath =(Math.ceil(person.died /100));
var centuryArray =(centuryOfDeath - 16);
centuries[centuryArray].push(person); //Here I am trying to access an element in an array using a variable. I know this doesn't work, but is there a way to make it work?
});
返回
$args = array('post_type' => 'customer_reviews', 'posts_per_page' => -1, 'fields' => 'ids');
$posts = get_posts($args);
if( $posts ) :
$reviews = array();
foreach( $posts as $post ) : setup_postdata( $post );
$title = get_the_title();
$the_ID = get_the_ID();
$reviews[] = array (
'id' => $the_ID,
'text' => $title
);
endforeach;
endif;
echo json_encode( $reviews )
(有超过800件商品退货,所以上面只显示了2件,但你明白了)
以下是我用来获取我的< select>的javascript菜单填充了json数据:
[{"id":12286,"text":"John Doe"},{"id":12285,"text":"Jane Doe"},...]
我不能为我的生活找出为什么一切正常,除了搜索和分页。有什么想法吗?
答案 0 :(得分:5)
您的服务器端代码中似乎没有任何代码可用于过滤和分页结果。 Select2意识到在服务器端完成此任务更有效,并期望开发人员在那里实现它。搜索字词将以q
传递,页面将以page
传递(如果可用)。
如果您不想在服务器端实现搜索和分页,或者只有一个返回所有结果的端点,您仍然可以解决它。您只需将JSON结果初始化为Select data
而不是使用AJAX功能。
$.ajax({
url: "_bpl_content/bpl_content.php",
type: 'POST',
contentType: 'application/json; charset=utf-8'
}).then(function (response) {
$(".js-data-example-ajax").select2({
placeholder: "Select a Review",
minimumInputLength: 3,
data: response
});
});