【发布时间】:2021-08-24 23:15:47
【问题描述】:
我正在为 WordPress 创建一个自定义主题,其中包含来自 Google 地图和 Yelp 服务的首页上的已解析评论。我在 functions.php 文件中创建了两个函数来创建一个 reviews 表 并从 reviews.json 文件中填充数据,但是当我切换我的WordPress 主题我注意到所有这些评论都被重复甚至四份。
function create_reviews_db_table() {
global $wpdb;
$reviews_table = $wpdb->prefix . "theme_reviews";
if($wpdb->get_var("SHOW TABLES LIKE '$reviews_table'") != $reviews_table) {
$sql = "CREATE TABLE $reviews_table (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
review_type varchar(10) NOT NULL,
author varchar(50) NOT NULL,
author_avatar_url varchar(255) NOT NULL,
review_date DATE NOT NULL,
review_text TEXT DEFAULT NULL,
review_rating int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
dbDelta( $sql );
}
}
function fill_reviews_table_with_data() {
global $wpdb;
$reviews_table = $wpdb->prefix . "theme_reviews";
if($wpdb->get_var("SELECT * FROM '$reviews_table'") == 0) {
$reviews_json = file_get_contents(__DIR__ . '/assets/reviews/reviews.json');
$decoded_json = json_decode($reviews_json, false);
foreach( $decoded_json->reviews as $value ) {
$wpdb->insert($reviews_table, array(
'review_type' => $value->type,
'author' => $value->author,
'author_avatar_url' => $value->author_avatar,
'review_date' => $value->date,
'review_text' => $value->text,
'review_rating' => (int)$value->rating
));
}
}
}
add_action("after_setup_theme", 'create_reviews_db_table');
add_action("after_setup_theme", "fill_reviews_table_with_data");
MySQL 8.0.25 & PHP 8.0.7
我做错了什么?
【问题讨论】:
-
每次页面加载都会调用你的函数。请改用 cron。
-
@HowardE 确实如此,似乎 'after_setup_theme' 钩子做的事情与我想象的完全不同。谢谢!你可以发布一个答案,我会标记它。
-
您希望多久执行一次?
-
@HowardE,一旦安装了主题或切换回此主题。我想我找到了正确的钩子:“after_switch_theme”你怎么看?
标签: php wordpress wordpress-theming