如何从插件php编辑MySQL wp_posts表?

时间:2017-03-03 作者:38365

我需要更改一个插件,将条目添加到wp\\u posts表中。目前,它的不足之处在于它不能针对某些(其他)插件特定的列。我正在努力编辑插件,以便可以使用插件更改这些列。

我通常如何针对该表创建/编辑条目?

我想到了类似以下伪代码的东西:

function editTable() {
    $table = getTable(wp_posts);
    $tableRow = table.row(1234);
    $tableRow.column(1234) = "new data entry";
}
我认为这是可能的,因为我希望更改的插件已经对wp\\u posts表进行了更改。不过,我意识到,我的伪代码可能太离谱了。我该怎么做?

1 个回复
最合适的回答,由SO网友:38365 整理而成

有两种方法可以编辑wp_posts 我知道的那个桌子。第一个是wp_update_post()wp_insert_post() 功能。这些是与其他任何函数一样使用的典型WP函数。您只需传递正确的参数。例如:

$my_post = array(
      \'ID\'           => $updatePostID, // User defined variable; the post id you want to update.
      \'post_title\'   => \'Update Title\',
      \'post_content\' => \'Update Content\', 
  );
// Update the post into the database
$post_id = wp_update_post( $my_post, true ); // Returns 0 if no error; returns post id if there was an error.

// Check if table was updated without error. For debugging. Remove from your code if it all works, before publishing.
if (is_wp_error($post_id)) {
    $errors = $post_id->get_error_messages();
    foreach ($errors as $error) {
        echo $error;
    }
}
只需将带有预定义字段名的数组传递给函数,它们就会正确运行。update函数自然用于更新,insert函数创建新的表条目(行)。然而,有一个限制。这两个功能仅在WP预定义字段上运行。因此,如果表包含一些自定义字段,则必须使用$wpdb

从WordPress更新mySQL表的另一种方法是使用$wpdb 直接初始化。这门课比wp_update_post()wp_insert_post() 功能。第一个区别是它可以编辑许多其他mySQL表,而不仅仅是wp_posts 桌子它还可以编辑非WP字段。例如:

global $wpdb; // This calls the use of the class. I actually do not think this is necessary, but I do it anyway.
$dbresult = $wpdb->update($wpdb->posts, // Returns 0 if no errors. Post ID if errors occurred. 
            // Notice posts instead of wp-posts. Prefixes are not necessary with this class.
     [\'post_title\' => \'Update Title\', 
      \'post_content\' => \'Update Content\', 
      \'custom_field\' => $customField, ], // User defined table column and variable.
     [\'ID\' => $updatePostID, ]); // User defined variable; the post id.
if (false === $dbresult) {
    echo \'An error occurred while updating...\'; 
    $errors = $post_id->get_error_messages();
}
我对这两个选项都不是很熟悉,但功能的宽度似乎有很大的不同,因此在使用其中一个选项之前,可能需要考虑一些因素。为此,我提出了一个问题:What does wp_update_post() do that the $wpdb class does not?reply 表示:

的缺点$wpdb 您确实需要了解SQL,并且需要意识到正常的数据清理和何时使用prepare() 还有哪些功能已经准备好了你的陈述,而这些几乎都不是缺点。这个$wpdb 类本质上比任何默认WordPress函数都更强大,因为假设您知道获取、修改或删除数据的正确SQL,那么您可以访问所有数据,无论是否自定义。

TL;DR $wpdb 更强大,但不那么友好和宽容。

这对我来说是有道理的。基本上,除非你知道自己在做什么或必须做什么,否则不要摆弄wpdb美元。

相关推荐

如何使用Show Tables Query正确检查WordPress数据库中是否存在表

运行此查询时,始终为数据库错误创建日志。当表存在时,它可以正常工作,但当它不存在时,它会生成如下所示的调试日志。有没有其他方法可以检查数据库表是否存在,或者通过填充调试日志文件来避免这些错误?if($wpdb->get_var(\"SHOW TABLES LIKE \'$table_name\'\") != $table_name) { // do something } 调试日志:[09-Sep-2018 12:21:50 UTC] WordPress datab