You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在移动端屏幕修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:43:32