Ich habe hier eine kleine Herausforderung, ich importiere Post-Daten von der wp Rest API von Websites in einem Netzwerk mit mehreren Standorten. Die URLs werden als Optionen hinzugefügt, und dann gehe ich durch jede Option mit einer foreach-Schleife mit einer benutzerdefinierten Funktion wie unten gezeigt.wp_insert_post in foreach loop laufen
function import_posts() {
global $wpdb;
$query_name = $wpdb->prefix . 'options';
$options = $wpdb->get_results("SELECT option_name, option_value FROM $query_name WHERE option_name LIKE 'city_%'");
// array of option names
foreach ($options as $key => $row) {
$url = $row->option_value;
$city_name = $row->option_name;
create_import_post_from_url($url,$city_name);
}
echo"The Import Is Finished";
wp_die();
}
Und hier ist die create_post_from_url() Funktion
function create_import_post_from_url($url, $city_name) {
$post_url = file_get_contents($url);
$post_data = json_decode($post_url, true);
$i=1;
foreach($post_data as $article_array) {
$post_color = $article_array['post-meta-fields']['color']['0'];
$post_image = $article_array['post-meta-fields']['feat_url']['0'];
$title = $article_array['title']['rendered'];
$post_title_check = get_page_by_title($title, OBJECT, 'post');
if ($post_title_check == NULL){
$post_args = array(
'post_author' => $article_array['author'],
'post_content' => $article_array['content']['rendered'],
'post_content_filtered' => '',
'post_title' => $article_array['title']['rendered'],
'post_excerpt' => $article_array['excerpt']['rendered'],
'post_status' => $article_array['status'],
'post_type' => $article_array['type'],
'comment_status' => $article_array['comment_status'],
'ping_status' => $article_array['ping_status'],
'post_password' =>$article_array['post_password'],
'to_ping' => $article_array['to_ping'],
'pinged' => $article_array['pinged'],
'post_parent' => $article_array['post_parent'],
'menu_order' => $article_array['menu_order'],
'guid' => $article_array['guid']['rendered'],
'import_id' => 0,
'context' => '',
'meta_input' => array(
'city_name' => $city_name,
'import' => 'import',
'color' => $post_color,
'featured_image' => $post_image,
)
);
}
wp_insert_post($post_args, $wp_error);
}
}
Wenn die Funktion es 2 erzeugt von jedem Pfosten ausgeführt wird, Ich habe Probleme, um dieses Problem aufzuspüren, so wird jede Hilfe dankbar!
EDIT: Wenn ich den Wert von $ post_url auf eine einzige URL (e.x http://example.com/wp-json/wp/v2/posts) setzen, dann läuft es ohne ein Problem. Das Problem scheint zu passieren, wenn ich versuche, create_import_post_from_url() in der foreach-Schleife der Funktion import_posts() auszuführen.
Ihre $ post_data Dump zuerst. Beenden Sie die Schleife in der ersten Schleife, um festzustellen, ob der Post zweimal eingefügt wurde. – TurtleTread
Das Problem scheint von der letzten foreach-Schleife zu kommen, die ausgeführt wird. Wenn ich mehr als eine URL an die foreach-Schleife übergebe, erstellt sie die Duplikate jedes Posts. –