2016-05-09 4 views
0

私はWordpressデータベースに文字列を保存することができました。問題は、このコードが単一のURLで実行されているときにのみ文字列を挿入できることです。私は約1500の投稿を自分のデータベースに持っていますので、私はそれをすべての人に有効にしたいと思います。すべての投稿用の一括wpdb insert [Wordpress]

global $wpdb; 

$result = $wpdb->replace(
    $wpdb->postmeta, 
    array(
     'post_id' => $post->ID, 
     'meta_key' => 'ratingpost', 
     'meta_value' => $ratingvalue 
    ), 
    array(
     '%s', 
     '%s', 
     '%s' 
    ) 
); 

すべての投稿にこのURLを挿入する必要はなく、すべてのURLを1つずつ読み込む必要があります。私はfunctions.php経由でそれを行うべきだと思うが、私はそれを行う適切な方法を見つけていない。

+0

あなたは、foreachループまたは単にシンプルなを使用することができます。あなただけの最初の5つのポストを取得し、このコードを使用してSQL – kindisch

答えて

1

ちょうどこのためにSQLを使用します。

global $wpdb; 

$updated = $wpdb->query(UPDATE {$wpdb->postmeta} pm, {$wpdb->posts} p SET pm.meta_value = {$ratingvalue} WHERE pm.meta_key = 'ratingpost' AND p.ID = pm.post_id); 
2

はい、このコードをfunctions.phpに入れることでこれを達成できますが、サイトが読み込まれるたびにすべての投稿が挿入されるため、一度追加して実行が完了したら削除してください。

<?php 

global $wpdb; 
$args = array('posts_per_page' => 5, 'offset'=> 1, 'category' => 1); 

$myposts = get_posts($args); 
foreach ($myposts as $post) : setup_postdata($post); ?> 

$ratingvalue = get_post_meta($post->ID,'ratingpost',true); 
$result = $wpdb->replace(
$wpdb->postmeta, 
    array(
     'post_id' => $post->ID, 
     'meta_key' => 'ratingpost', 
     'meta_value' => $ratingvalue 
     ), 
    array(
     '%s', 
     '%s', 
     '%s' 
     ) 
    ); 
<?php endforeach; 
wp_reset_postdata();?> 
+0

を使用しています。さらに、ループ機能を使用せずに 'setup_postdata($ post)'を使用することは、あまり有用ではなく、すでに重いforeachループのパフォーマンスを低下させます。 – kindisch

関連する問題