如何仅在移动端屏幕修改posts_per_page值为-1,排除平板设备?
解决仅移动端加载全部文章的问题
wp_is_mobile确实没法精准区分手机和平板,因为它只依赖用户代理的宽泛判断。这里给你两个可行方案,优先推荐第一种,精准度更高:
方案一:前端媒体查询+AJAX动态加载(推荐)
这种方式通过屏幕尺寸判断,完全符合你“仅移动端”的需求,步骤如下:
1. 新增AJAX接口(在主题functions.php中添加)
// 注册AJAX接口,用于获取全部development类型文章 add_action('wp_ajax_get_all_development_posts', 'get_all_development_posts'); add_action('wp_ajax_nopriv_get_all_development_posts', 'get_all_development_posts'); function get_all_development_posts() { $args = array( 'post_type' => 'development', 'posts_per_page' => -1, 'order' => 'ASC' ); $loop = new WP_Query($args); ob_start(); while ($loop->have_posts()) : $loop->the_post(); // 这里复制你原来的HTML渲染代码,比如: ?> <div class="dev-post"> <h2><?php the_title(); ?></h2> <?php the_excerpt(); ?> </div> <?php endwhile; wp_reset_postdata(); wp_send_json_success(ob_get_clean()); }
2. 前端JS实现动态替换(放到主题JS文件或footer.php里)
document.addEventListener('DOMContentLoaded', () => { // 自定义移动端阈值,比如767px及以下(可根据你的需求调整) const isMobileScreen = window.matchMedia('(max-width: 767px)').matches; if (isMobileScreen) { fetch('<?php echo admin_url('admin-ajax.php'); ?>', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: 'action=get_all_development_posts' }) .then(res => res.json()) .then(data => { if (data.success) { // 替换原有文章容器的内容,记得给容器加对应的类名 document.querySelector('.dev-posts-container').innerHTML = data.data; } }) .catch(err => console.log('加载文章出错:', err)); } });
3. 修改原PHP代码的容器结构
给文章列表加个容器,方便JS替换:
$args = array('post_type' => 'development', 'posts_per_page' => 1, 'order' => 'ASC'); $loop = new WP_Query($args); ?> <div class="dev-posts-container"> <?php while ($loop->have_posts()) : $loop->the_post(); ?> <!-- 你的原有HTML代码 --> <div class="dev-post"> <h2><?php the_title(); ?></h2> <?php the_content(); ?> </div> <?php endwhile; wp_reset_postdata(); ?> </div>
方案二:后端解析用户代理排除平板(不推荐)
如果一定要在后端直接判断,可以通过正则匹配用户代理,过滤掉平板设备,但这种方式容易遗漏新设备,精准度不如前端:
function is_actual_mobile() { $userAgent = $_SERVER['HTTP_USER_AGENT']; // 匹配常见平板关键词,排除它们 $tabletRegex = '/(ipad|tablet|android(?!.*mobile)|playbook|silk|kindle|nexus 7)/i'; if (preg_match($tabletRegex, $userAgent)) { return false; } // 匹配手机关键词 $mobileRegex = '/(mobile|iphone|ipod|blackberry|opera mini|opera mobi|skyfire|maemo|symbian|android|windows phone)/i'; return preg_match($mobileRegex, $userAgent); } // 构造查询参数 $perPage = is_actual_mobile() ? -1 : 1; $args = array( 'post_type' => 'development', 'posts_per_page' => $perPage, 'order' => 'ASC' ); $loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); // 你的HTML代码 endwhile; wp_reset_postdata();
内容的提问来源于stack exchange,提问作者yami S
相关产品推荐
相关产品推荐

