如何将WordPress作为文章数据库供自定义HTML/CSS/PHP站点调用?
两种方案实现自定义PHP站点调用WordPress文章数据
我之前帮朋友处理过类似需求,核心思路就是让你的自定义站点能读取WordPress的文章数据,然后按你自己的HTML结构渲染。这里有两种最常用的方案,你可以根据自己的服务器部署情况选:
方案一:使用WordPress REST API(推荐跨域/独立站点场景)
WordPress默认自带REST API,不需要额外插件就能用,适合你的站点和WP不在同一个项目里的情况。
步骤1:确认REST API可用
先在浏览器里访问你的WP站点的API地址:https://你的WP域名/wp-json/wp/v2/posts,如果能看到返回的文章JSON数据,说明API正常开启(默认是开的,除非你用了安全插件限制)。
步骤2:在自定义PHP里请求API并渲染
用PHP的file_get_contents或者cURL请求API,拿到数据后解析成数组,再循环填充到你的自定义标签里。这里给个完整示例:
<?php // WP REST API地址,加上?_embed可以直接获取特色图片等关联数据 $api_url = 'https://你的WP域名/wp-json/wp/v2/posts?_embed&per_page=10'; // 请求API $response = file_get_contents($api_url); if (!$response) { die('无法连接到WordPress API'); } // 解析JSON为PHP数组 $posts = json_decode($response, true); ?> <!-- 你的自定义HTML结构 --> <div class="blog-list"> <?php foreach ($posts as $post): ?> <article class="blog-item"> <!-- 文章标题 --> <h2><?php echo htmlspecialchars($post['title']['rendered']); ?></h2> <!-- 发布日期 --> <p class="post-date"><?php echo date('Y-m-d', strtotime($post['date'])); ?></p> <!-- 特色图片 --> <?php if (!empty($post['_embedded']['wp:featuredmedia'][0]['source_url'])): ?> <img src="<?php echo htmlspecialchars($post['_embedded']['wp:featuredmedia'][0]['source_url']); ?>" alt="<?php echo htmlspecialchars($post['_embedded']['wp:featuredmedia'][0]['alt_text'] ?: $post['title']['rendered']); ?>"> <?php endif; ?> <!-- 文章内容(已处理HTML) --> <div class="post-content"> <?php echo $post['content']['rendered']; ?> </div> </article> <?php endforeach; ?> </div>
注意事项
- 如果你的自定义站点和WP不在同一个域名,需要在WP的
functions.php里添加CORS允许:
add_action('rest_api_init', function () { remove_filter('rest_pre_serve_request', 'rest_send_cors_headers'); add_filter('rest_pre_serve_request', function ($value) { header('Access-Control-Allow-Origin: 你的自定义站点域名'); header('Access-Control-Allow-Methods: GET'); header('Access-Control-Allow-Credentials: true'); return $value; }); });
- 可以通过API参数过滤文章,比如
categories=1只显示分类ID为1的文章,per_page控制每页数量,具体参数可以自行查阅WP官方的REST API说明。
方案二:直接集成WordPress核心(适合同服务器/同项目场景)
如果你的自定义站点和WP在同一个服务器,甚至是同一个项目目录下,可以直接引入WP的核心文件,然后用WP自带的函数查询文章,这种方式更灵活,能直接调用WP的所有功能。
步骤1:引入WP核心文件
在你的自定义PHP文件开头,引入WP根目录下的wp-load.php:
<?php // 注意路径要正确,比如WP在wp目录下,就写'./wp/wp-load.php' require_once('/path/to/your/wordpress/wp-load.php');
步骤2:用WP函数查询并渲染文章
直接用get_posts()或者WP_Query查询文章,然后循环输出到你的自定义标签里:
<?php // 查询文章参数:显示10篇,按发布日期倒序 $args = array( 'post_type' => 'post', 'posts_per_page' => 10, 'orderby' => 'date', 'order' => 'DESC' ); $posts_query = new WP_Query($args); if ($posts_query->have_posts()): ?> <div class="blog-list"> <?php while ($posts_query->have_posts()): $posts_query->the_post(); ?> <article class="blog-item"> <!-- 文章标题 --> <h2><?php the_title(); ?></h2> <!-- 发布日期 --> <p class="post-date"><?php the_date('Y-m-d'); ?></p> <!-- 特色图片 --> <?php if (has_post_thumbnail()): ?> <img src="<?php the_post_thumbnail_url('large'); ?>" alt="<?php echo get_post_meta(get_post_thumbnail_id(), '_wp_attachment_image_alt', true) ?: get_the_title(); ?>"> <?php endif; ?> <!-- 文章内容 --> <div class="post-content"> <?php the_content(); ?> </div> </article> <?php endwhile; ?> </div> <?php // 重置查询 wp_reset_postdata(); else: echo '<p>暂无文章</p>'; endif; ?>
注意事项
- 路径一定要正确,否则会报错找不到文件,你可以用
realpath()来确认路径是否正确。 - 这种方式会加载WP的整个核心,性能上比REST API稍差,但胜在功能强大,比如可以直接处理短代码、自定义字段等。
总结
- 如果你的站点和WP是独立的(比如不同域名),优先用REST API,简单易维护。
- 如果是同服务器同项目,用集成WP核心的方式,灵活性更高。
内容的提问来源于stack exchange,提问作者Pelayo Martinez
相关产品推荐
相关产品推荐

