Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 所有帖子的批量wpdb插入[Wordpress]_Php_Mysql_Database_Wordpress - Fatal编程技术网

Php 所有帖子的批量wpdb插入[Wordpress]

Php 所有帖子的批量wpdb插入[Wordpress],php,mysql,database,wordpress,Php,Mysql,Database,Wordpress,我已设法将一个字符串保存到Wordpress数据库中。问题是,我只能在单个url中运行此代码时插入字符串。我的数据库中有大约1500篇帖子,所以我想让它对所有的帖子都起作用 global $wpdb; $result = $wpdb->replace( $wpdb->postmeta, array( 'post_id' => $post->ID, 'meta_key' => 'ratingpost',

我已设法将一个字符串保存到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'
    )
);

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

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

$ratingvalue=get\u post\u meta($post->ID,'ratingpost',true);
$result=$wpdb->replace(
$wpdb->postmeta,
排列(
'post_id'=>$post->id,
“meta_key”=>“ratingpost”,
“meta_值”=>$ratingvalue
),  
排列(
“%s”,
“%s”,
“%s”
)
);  

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

$ratingvalue=get\u post\u meta($post->ID,'ratingpost',true);
$result=$wpdb->replace(
$wpdb->postmeta,
排列(
'post_id'=>$post->id,
“meta_key”=>“ratingpost”,
“meta_值”=>$ratingvalue
),  
排列(
“%s”,
“%s”,
“%s”
)
);  
只需使用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 );
只需使用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 );

您可以使用foreach循环或更简单的方法:使用sql您可以使用foreach循环或更简单的方法:使用sql使用此代码,您只需获得前五篇文章。此外,在不使用循环函数的情况下使用
setup\u postdata($post)
并不是很有用,而且会降低已经很重的foreach循环的性能。此外,在不使用循环函数的情况下使用
setup\u postdata($post)
并不是很有用,并且会降低已经很重的foreach循环的性能。