我为WordPress创建了一个名为Rubrics的自定义帖子类型,这只是后端用户可以看到的,所以我使用参数'public' => false
创建它可以正常工作。
在另一个帖子类型(作业)中,我使用以下函数生成自定义rubrics帖子类型的列表:
<select id="ldrm-select-rubric">
<option data-id="0" value="default">Select a Rubric</option>
<?php
$args = array( 'post_type' => 'sfwd-rubrics', 'posts_per_page' => -1 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<option data-id="<?php the_ID(); ?>"><?php the_title(); ?></option>
<?php endwhile; ?>
</select>
也可以,所以现在我有一个Rubric帖子列表出现在所有作业的编辑页面上。我想知道如何在不将所有内容加载到页面的情况下查询Rubric帖子内容。
我知道我可以使用上面的函数查询内容,但是我只想加载一旦用户选择它就从下拉列表中选择的Rubric的内容,以防止加载所有其他的rubric好。关于如何实现这一点的任何想法?
答案 0 :(得分:1)
所以如果我认为你想要保留当前的代码是正确的。这是使用标题的标题填充下拉列表。无论您喜欢与否,您都已经查询了内容。从性能角度来看,最好设置一些变量并使用Javascript来显示正确的变量。另一种选择是使用AJAX并将帖子ID发送到服务器并使用您想要的量规的内容进行响应。我将在这里演示
执行一次/简单加载
<?php
// instantiate some variables
$titles = array();
$contents = array();
// set our arrays
foreach (get_posts(array('post_type'=>'sfwd-rubrics','posts_per_page'=>-1)) as $post) {
$titles[$post->ID] = $post->title;
$content[$post->ID] = $post->content;
} ?>
<select id="ldrm-select-rubric">
<?php foreach ($titles as $id => $title): ?>
<option id="<?= $id ?>"><?= $title ?></option>
<?php endforeach; ?>
<select>
<?php // time to echo out the contents
foreach ($contents as $id => $content): ?>
<div id="<?= $id ?>"><?= $content ?></div>
<?php endforeach; ?>
<script type="text/javascript">
// assuming jQuery is being loaded
(function($) {
var $select = $('#ldrm-select-rubric');
$select.bind('change', function() {
$(this).find('option').css('display', 'none');
$('#' + $(this).val()).css('display', 'block');
});
$select.trigger('change');
})(jQuery);
</script>
使用AJAX的更复杂,性能更低的示例
有一些安全功能我不会在演示中烦恼。以下是使用AJAX in WordPress
的链接<?php // somewhere in your php wordpress code
add_action('wp_ajax_rubric_content', function() {
echo get_post($_REQUEST['id'])->ID;
});
// Below the PHP code in your current question content
<div id="rubric-content"></div>
<script type="text/javascript">
(function($) {
$('#ldrm-select-rubric').bind('change', function() {
$.ajax({
type: 'GET',
url: ajaxurl,
data: {
action: 'rubric_content',
id: $(this).val(),
},
success: function(resp) {
$('#rubric-content').html(resp);
}
});
});
})(jQuery);
</script>
警告:我没有测试上面的代码,但这通常是WP AJAX的工作原理。您需要在服务器代码中添加大量验证。我强烈推荐前一个例子,因为它更简单,性能更高(查询更少),更安全。