jquery - onchange 类别下拉列表显示功能帖子和博客列表
问题描述
我有三个功能。
第一个是从自定义帖子中显示我的类别下拉列表。
第二个是显示最新帖子(如果用户选中,我在每个帖子中添加了复选框,那么它将显示在最新帖子中)
第三个将显示我的所有帖子。
下面是我正在使用的代码。
//category dropdown
function categoriesDropdown(){
$categories = get_categories( array(
'orderby' => 'name',
'order' => 'ASC',
'taxonomy' => 'blogs_cat',
) );
$output='';
$output.='<select>';
foreach( $categories as $category ) {
$output.='<option value="'.$category->term_id.'">'.$category->name.'</option>';
}
$output.='</select>';
return $output;
}
add_shortcode( 'showCategoryList', 'categoriesDropdown');
// Feature blog if check box selected.
function latestBlogView( $atts ){
$the_query =array(
'post_type' => 'blog',
'post_status' => 'publish',
'posts_per_page' => 3,
'meta_key' => 'latestblog',
'meta_value' => 1,
'order' => 'DESC'
);
$postData = '';
// The Loop
$featured = new WP_Query($the_query);
$postData.='<div class="latestBlogsWrapper articlesWrapper"><ul>';
if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post();
$postData.= '<li><div class="grid-item"><a href="'.get_permalink($post->ID).'">
<div class="blogBoxwrapper">
<img src="'. get_the_post_thumbnail_url($post->ID, "full").'">
<div class="blogCatname"><h5>'.get_the_title($post->ID).'</h5></div>
</div></div></a></li>';
endwhile; else:
$postData.="Please select the feature post check box";
endif;
$postData .= '</ul></div>';
wp_reset_postdata();
return $postData;
}
add_shortcode( 'latestblogs', 'latestBlogView');
// Blog list
function BlogView( $atts ){
$args = array(
'post_type' => 'blog',
'post_status' => 'publish',
'posts_per_page' => 30,
'orderby' => 'title',
'order' => 'DESC',
); $loop = new WP_Query( $args );
$data ='';
$data.='<div class="articlesWrapper"><ul>';
while ( $loop->have_posts() ) : $loop->the_post();
$tid = $loop->ID;
$data.= '
<li>
<a href="'.get_permalink($tid).'">
<div class="blogBoxwrapper">
<img src="'.get_the_post_thumbnail_url($tid).'">
<div class="blogCatname">
<h5>'.get_the_title($id).'</h5>
</div>
</div>
</a>
</li>';
endwhile;
$data.='</ul>
<div class="pt-5 text-center btnLoadmore"><a class="blogbtn blogbtnred loadMore" href="javascript:void(0);">Read More Blog Posts</a></div>
</div>';
wp_reset_postdata();
return $data;
}
add_shortcode( 'blogandarticles', 'BlogView');
现在我正在做的是,当用户从下拉列表中更改类别时,我必须显示与该类别相关的最新博客和博客列表。
例如。在页面加载时,我默认显示所有帖子。Movie
现在我在下拉列表中有一个类别。一旦用户从下拉列表中选择了电影,我就必须在最新的博客和博客列表中显示与电影相关的帖子。
你能帮我解决这个问题吗?
解决方案
我找到了我的解决方案。
在更改下拉列表中,我必须显示帖子列表和特色帖子。所以我使用了ajax。
我在 onchange 事件之外使用了以下函数,因为每当用户刷新页面时,它都会调用我的 ajax 并显示输出,无论选择什么下拉菜单。
callAjax_forLatestblog();
callAjax_forBloglist();
我使用了两个 ajax 调用,因为我必须显示两件事以及动态标题。
如果注意到这里,我在下面添加if-condition
了两个函数。如果它不为空,它将检查下拉列表的值,然后它将调用此条件。
if(!empty($_REQUEST['keyword'])){
$args['tax_query'] = array(
array(
'taxonomy' => 'blogs_cat',
'field' => 'term_id',
'terms' => sanitize_text_field($_REQUEST['keyword'])
)
);
}
function categoriesDropdown(){
$categories = get_categories( array(
'orderby' => 'name',
'order' => 'ASC',
'taxonomy' => 'blogs_cat',
) );
$output='';
$output.='<select name="catDropdown" id="catDropdown"><option value="">Everything</option>';
foreach( $categories as $category ) {
$output.='<option value="'.$category->term_id.'">'.$category->name.'</option>';
}
$output.='</select>';
$output.='<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" crossorigin="anonymous"></script><script>
(function($) { // ready handler
callAjax_forLatestblog();// on page load call ajax to get the latest post
callAjax_forBloglist();// on page load call ajax to get the blog list
$("#catDropdown").change(function() {
callAjax_forLatestblog();
callAjax_forBloglist();
});
function callAjax_forLatestblog(){
$.ajax({
url: "/wp-admin/admin-ajax.php",
type: "post",
data: { action: "latestBlogView", keyword: $("#catDropdown").val() },
success: function(data) {
$("#latestblogs").html(data);
}
});
}
function callAjax_forBloglist(){
$.ajax({
url: "/wp-admin/admin-ajax.php",
type: "post",
data: { action: "blogList", keyword: $("#catDropdown").val() },
success: function(data) {
$("#blogList").html(data);
}
});
}
})(jQuery);</script>';
return $output;
}
add_shortcode( 'showCategoryList', 'categoriesDropdown');
下面是博客列表的代码
add_action('wp_ajax_nopriv_blogList', 'blogList');
add_action('wp_ajax_blogList', 'blogList');
function blogList( $atts ){
$args = array(
'post_type' => 'blog',
'post_status' => 'publish',
'posts_per_page' => 30,
//'orderby' => 'title',
//'order' => 'ASC',
);
if(!empty($_REQUEST['keyword'])){
$args['tax_query'] = array(
array(
'taxonomy' => 'blogs_cat',
'field' => 'term_id',
'terms' => sanitize_text_field($_REQUEST['keyword'])
)
);
}
$loop = new WP_Query( $args );
$data ='';
$data.='<div class="articlesWrapper"><ul>';
while ( $loop->have_posts() ) : $loop->the_post();
$tid = $loop->ID;
$data.= '
<li>
<a href="'.get_permalink($tid).'">
<div class="blogBoxwrapper">
<img src="'.get_the_post_thumbnail_url($tid).'">
<div class="blogCatname">
<h5>'.get_the_title($id).'</h5>
</div>
</div>
</a>
</li>';
endwhile;
$data.='</ul></div>';
echo $data;
wp_die(); // it will remove 0.
}
下面是功能帖子的代码
add_action('wp_ajax_nopriv_latestBlogView', 'latestBlogView');
add_action('wp_ajax_latestBlogView', 'latestBlogView');
function latestBlogView($atts){
$the_query =array(
'post_type' => 'blog',
'post_status' => 'publish',
'posts_per_page' => 3,
'meta_key' => 'latestblog',
'meta_value' => 1,
'order' => 'DESC'
);
if(!empty($_REQUEST['keyword'])){
$the_query['tax_query'] = array(
array(
'taxonomy' => 'blogs_cat',
'field' => 'term_id',
'terms' => sanitize_text_field($_REQUEST['keyword'])
)
);
}
$postData = '';
// The Loop
$featured = new WP_Query($the_query);
$postData.='<div class="latestBlogsWrapper articlesWrapper"><ul>';
if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post();
$postData.= '<li><div class="grid-item"><a href="'.get_permalink($post->ID).'">
<div class="blogBoxwrapper">
<img src="'. get_the_post_thumbnail_url($post->ID, "full").'">
<div class="blogCatname"><h5>'.get_the_title($post->ID).'</h5></div>
</div></a></div></li>';
endwhile; else:
$postData.="Please select the feature post check box";
endif;
$postData .= '</ul></div>';
echo $postData;
wp_die(); // it will remove 0.
}
HTML
<div id="blogList"></div>
<div id="latestblogs"></div>
推荐阅读
- amazon-ec2 - 如何重用 puppet SSL 证书
- android - Appcelerator云重置密码默认页面,用户重置密码,没有任何反应
- java - 如何在 java 中从 10-JUN-02 01.57.07.848594000 PM 转换为 yyyy-MM-dd-HH24.MI.SS.FF6
- multithreading - 通过多线程完成的应用程序对执行时间的改进受到物理内核数量的限制?
- crystal-reports - Crystal Reports,将子报表链接到日期组
- mysql - MySQL表注释跨越多行
- java - 无法在 intellij 中导入 JavaFx
- python - 并发和 Selenium - 多处理与多线程
- docker - 无法启动 docker 守护进程(graphdriver 问题)
- python - MinMaxScaling 没有返回正确的值