wordpress 直接操作数据库显示文章?

服务器

在 WordPress 中,不推荐直接操作数据库来显示文章,因为这会绕过 WordPress 的核心机制(如缓存、钩子、安全检查等),容易导致安全问题、性能下降或兼容性问题。但如果你确实需要直接查询数据库(例如在特殊插件开发、性能优化或调试场景中),可以使用 WordPress 提供的 $wpdb 类来安全地操作数据库。


✅ 正确方式:使用 $wpdb 查询文章

WordPress 提供了全局变量 $wpdb,用于安全地与数据库交互。

示例:直接查询数据库并显示文章标题和内容

global $wpdb;

// 查询已发布的文章(post_status = 'publish',post_type = 'post')
$posts = $wpdb->get_results(
    $wpdb->prepare(
        "SELECT ID, post_title, post_content, post_date 
         FROM $wpdb->posts 
         WHERE post_status = %s AND post_type = %s 
         ORDER BY post_date DESC 
         LIMIT 10",
        'publish',
        'post'
    )
);

if ( $posts ) {
    foreach ( $posts as $post ) {
        echo '<h2>' . esc_html( $post->post_title ) . '</h2>';
        echo '<p><strong>发布于:</strong>' . esc_html( $post->post_date ) . '</p>';
        echo '<div>' . wp_kses_post( wp_trim_words( $post->post_content, 50 ) ) . '</div>';
    }
} else {
    echo '暂无文章。';
}

⚠️ 注意事项

  1. 不要直接使用 SQL 拼接,务必使用 $wpdb->prepare() 防止 SQL 注入。
  2. 使用 WordPress 函数更安全:如 get_posts()WP_Query 等。
  3. 手动查询不会触发 the_content 过滤器,比如短代码、自动排版等不会生效,除非手动调用:
    echo apply_filters( 'the_content', $post->post_content );

✅ 推荐方式:使用 WP_Query(标准做法)

$args = array(
    'posts_per_page' => 10,
    'post_status'    => 'publish',
    'post_type'      => 'post',
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<div>' . get_the_excerpt() . '</div>';
    }
    wp_reset_postdata();
} else {
    echo '暂无文章。';
}

总结

方法 是否推荐 说明
$wpdb 直接查询 ⚠️ 仅限特殊需求 需注意安全、过滤、性能
WP_Query / get_posts() ✅ 强烈推荐 安全、兼容、支持钩子和缓存

建议

除非你有非常特殊的需求(如高性能报表、跨表统计等),否则请使用 WordPress 标准的查询方式(如 WP_Query)来显示文章。

如需帮助构建具体查询,请告诉我你的使用场景(如:显示某个分类的文章、自定义字段等),我可以给出更合适的代码。

未经允许不得转载:CDNK博客 » wordpress 直接操作数据库显示文章?