如何将 "text" 来自 Twitter JSON 的数据保存到 ACF 字段?

How to save "text" from Twitter JSON data to a ACF field?

我的代码需要帮助。它应该做的是用户从 Twitter 输入完整的 URL 到文本字段 ('https://twitter.com/openbayou/status/1487977976033685506') 并且当 post 被保存时,它将 url 分解为使用 explode 然后通过 Twitter API v2.

从推文中获取数据

我的代码:

$tweet_url_raw = get_field('twitter_url');
$parts = explode('/', $tweet_url_raw);
$url = 'https://api.twitter.com/2/tweets/' . $parts[5] . '?expansions=author_id&tweet.fields=created_at&user.fields=username,verified';
$authorization = 'Authorization: Bearer ' . get_field_object('twitter_bearer_token', 'option')['value'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization ));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);
$tweet_data = json_encode($result);
$tweet_data2 = json_decode($tweet_data);

上面的代码确实获取了数据:

{"data":{"text":"SEC Super Bowl!!","created_at":"2022-01-31T02:36:09.000Z","author_id":"1471331","id":"1487977976033685506"},"includes":{"users":[{"name":"OpenBayou","verified":false,"id":"1471331","username":"openbayou"}]}}

我遇到的问题是当我试图从输出中获取单个数据时。我正在尝试使用 text 中的文本更新名为 tweet 的文本字段。我试过使用 update_field('tweet', $tweet_data2->data, $post_id); 但它是空白的。当我使用 update_field('tweet2', $tweet_data2["data"], $post_id); 时,它只保存 {

知道我做错了什么吗?

你快到了。

由于您省略了 json_decodeassociative 参数,它默认为 false 因此您得到一个对象,而不是数组。然后您需要这样引用它:

$tweet_data2 = json_decode($tweet_data);
echo 'Tweet text: ' . $tweet_data2->data->text;

如果您更喜欢使用数组,只需将 true 传递给 json_decode:

$tweet_data2 = json_decode($tweet_data, true);
echo 'Tweet text: ' . $tweet_data2['data']['text'];

有关 json_decode 的更多信息,请访问 PHP 手册站点: https://www.php.net/manual/en/function.json-decode.php