Inserting Post Meta From SQL

时间:2015-11-06 作者:Julian Flynn

我正试图让post meta更新/替换为$wpdb并遇到问题。我有工作的SQL,但在为我的WP插件编写代码时无法使其工作。

Extra note:

正在保存的post meta是,例如,Twitter follower count,我需要将该数字保存到数据库中,以便将结果导出到表中

这是我的工作SQL。当我把它放在PHPmyAdmin中时,它会更新所有post meta:

INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT wp_posts.ID, \'agency_details_seo_grade\', \'test\'
FROM wp_posts
WHERE wp_posts.post_status = \'publish\' and wp_posts.post_type = \'agencies\'";
这是我失败的尝试把它放在WP。结果没有发生任何事情(没有更改元,也没有错误消息):

// Failed attempt to put into functions.php
function add_grading_post_meta() {
    global $wpdb;
    $wpdb->prepare("SELECT ID,\'\',\'test2\'", $wpdb->query("INSERT INTO wp_postmeta ($post_id,meta_key,meta_value)"));
}
我正在尝试使其正常工作,以便在下一步将其与wp\\u cron一起使用之前,可以将其与wp调度函数一起使用。对于这第一步的任何帮助,我们都将不胜感激,在这个学习PHP的项目上花费大量时间。

Edit:

这里还有一个版本我试过了,但没有成功。由于@Czersplace注释,我对其进行了更改,该注释由旧堆栈交换帖子提供。

function add_grading_post_meta() {
    global $wpdb;

    $twitter_followers = \'agency_details_twitter_followers\';
    $twitter_count = \'test3\';

    $sql = "INSERT INTO $wpdb->wp_postmeta (post_id,meta_key,meta_value) VALUES   (%d,\'%s\',%s) ON DUPLICATE KEY UPDATE meta_value = %s";
    $sql = $wpdb->prepare($sql,$post_id,$twitter_followers,$twitter_count);
    $wpdb->query($sql);
}

2 个回复
SO网友:adelval

实际上,在WordPress中这样做的惯用方法是<?php update_post_meta($post_id, $meta_key, $meta_value, $prev_value); ?> 根据法典:https://codex.wordpress.org/Function_Reference/update_post_meta. 它生成的代码更短,代码的意图更清晰。

SO网友:s_ha_dum

您对的使用$wpdb->prepare 非常破碎。老实说,我甚至不知道你到底想问什么。代码太坏了,我甚至无法推断你想做什么。然而,我猜你想要这样的东西:

$post_id = 1;
$key = \'abc\';
$value = \'def\';
$qry = "INSERT INTO wp_postmeta (post_id,meta_key,meta_value) VALUES (%d,%s,%s)";
$qry = $wpdb->prepare(
  $qry,
  $post_id,
  $key,
  $value
);
var_dump($qry);
$wpdb->query($qry);
注意发生了什么。为动态数据创建一个带有占位符的“格式”字符串。然后你把它传过去prepare 以及占位符的替换字符串,并获取通过query.

相关推荐

在WordPress中将MySQL表格元素显示为页面

我正试图建立一个WordPress网站,但我需要一个特定的功能,我还没有找到一个插件。我将要刮网站信息和张贴到数据库的信息(这已经处理)。但是,我想创建一个页面来显示所有信息的索引,然后创建一个唯一的页面来显示每个单独的元素(ddbb表的行)。有什么办法可以做到这一点吗??