web-dev-qa-db-ja.com

SQLからのポストメタの挿入

私はpost metaを$ wpdbに更新/置き換えて問題にぶつかるようにしようとしています。 SQLは動作していますが、WPプラグイン用にコーディングしても動作しません。

追加の注意事項:

保存されている投稿メタは、例えば、私がテーブルに結果をエクスポートすることができるようにデータベースに保存される数が必要であるというTwitterフォロワー数です。

これが私の実用的なSQLです。これをPHPmyAdminに入れると、すべての投稿メタが更新されます。

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スケジューリング関数で使う次のステップの前にwp_cronで使うことができます。この最初のステップで、PHPを学ぶこのプロジェクトに多くの時間を割いたことで、どんな助けでも感謝されるでしょう。

編集:

これは私が成功しなかったもう1つのバージョンです。私は@czerspalaceのコメント、古いStack Exchangeの投稿によって提供されたコーディングのためにそれを変更しました。

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
Julian Flynn

実際には、WordPressでこれを行う慣習的な方法は、codex:<?php update_post_meta($post_id, $meta_key, $meta_value, $prev_value); ?>を使用することです。 https://codex.wordpress.org/Function_Reference/update_post_meta 。コードが短くなり、コードの意図がより明確になります。

1
adelval

あなたの$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を介して送信される文字列を返します。

0
s_ha_dum