【问题标题】:Bulk wpdb insert for all posts [Wordpress]为所有帖子批量插入 wpdb [Wordpress]
【发布时间】:2016-09-04 09:24:39
【问题描述】:

我已经设法将一个字符串保存到 Wordpress 数据库中。问题是我只能在此代码在单个 url 中运行时插入字符串。我的数据库中有大约 1500 个帖子,所以我想让它适用于所有帖子。

global $wpdb;

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

我想在所有帖子中插入此内容,而不必加载每个网址。我想我应该通过functions.php做到这一点,但我还没有找到合适的方法。

【问题讨论】:

  • 您可以使用 foreach 循环或更简单:使用 sql

标签: php mysql database wordpress


【解决方案1】:

是的,您可以通过将此代码放入 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();?>

【讨论】:

  • 使用此代码,您只需获得前五个帖子。此外,在不使用循环函数的情况下使用 setup_postdata( $post ) 并不是很有用,并且会降低已经很重的 foreach 循环的性能。
【解决方案2】:

只需使用 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 );

【讨论】:

    猜你喜欢
    • 2022-07-20
    • 2015-06-25
    • 2012-01-23
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2012-09-04
    • 2015-08-22
    • 2020-05-15
    相关资源
    最近更新 更多