【问题标题】:Wordpress Database with custom table带有自定义表格的 Wordpress 数据库
【发布时间】:2011-03-24 03:48:56
【问题描述】:

我正在尝试从已导入我的 wordpress 数据库的表中提取数据。

我的 php 代码适用于所有默认 wp_ 表,但是当我尝试定位我真正想要的表时,我得到了所有的错误。

我的代码(当前回显所有帖子标题并且有效)

$liveposts = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->posts
 WHERE post_status = 'publish'") );

 foreach ($liveposts as $livepost) {
  echo '<p>' .$livepost->post_title. '</p>';
}

我从另一个数据库导入了 3 个表,是的,它们确实有数据要提取。我发现$wpdb-&gt;posts 期望帖子表是 wp_posts.. 所以我尝试将我的表重命名为 wp_bus_route... 但仍然没有。

我使用 phpMyAdmin 从大型数据库(.sql 格式)中导出 3 个表并导入它们。我可以在 phpMyAdmin 中查看表格并查看其中的所有数据。

这是我第一次从 wp 数据库中提取数据,所以我遗漏了一些明显的东西。

【问题讨论】:

    标签: php database wordpress


    【解决方案1】:

    引用$wpdb-&gt;posts 之类的表名仅适用于标准 WP 表。对于自定义表,构建表名如下:

    $liveposts = $wpdb->get_results( $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "tablename WHERE post_status = 'publish'") );
    

    永远,永远,永远不要硬编码前缀。这可以在 wp-config.php 中更改,许多人将其更改为 wp_ 以外的其他内容。从wp_ 更改它是一个很好的安全措施。即使是您自己的代码和自己的网站,$wpdb-&gt;prefix 也是值得养成习惯的最佳实践。

    【讨论】:

      【解决方案2】:

      尽量不要在表名中使用变量:

      $liveposts = $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_bus_route
       WHERE post_status = 'publish'") );
      

      【讨论】:

      • 酷,这已经成功了,谢谢:) 关于为什么这有效而 $wpdb-> 无效的任何想法? $wpdb->bus_routes 和 wp_bus_routes 有什么区别?
      • 这是因为 wordpress 有 $tables 构建在 wp-includes/wp-db.php 中描述的变量中,其中描述了 alloweb 表名称数组('posts','cmets','links','options '、'postmeta'、'terms'、'term_taxonomy'、'term_relationships'、'commentmeta');如果你添加到这个数组 bus_routes 它会工作,但无论在 wordpress 更新到较新版本之后,你的所有更改都将丢失,所以使用表的静态名称而不是变量
      • 好的,感谢您的洞察力。现在在我的脑海中是有道理的:) 欢呼伙计们
      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2014-09-20
      • 2021-06-21
      • 2015-01-22
      • 2012-04-27
      • 2021-01-24
      • 1970-01-01
      • 2013-07-25
      相关资源
      最近更新 更多