
7折
减价出售
¥799
WordPress多站点网络功能允许在同一个WordPress主题中安装中运行多个网站。本文将深入探讨如何在WordPress多站点环境中实现高效、安全的数据共享。
// 获取主站点文章并在子站点显示
function display_main_site_posts() {
$main_site_id = 1; // 主站点ID
$posts = [];
switch_to_blog($main_site_id);
$posts = get_posts([
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC'
]);
restore_current_blog();
return $posts;
}
// 使用示例
add_shortcode('main_site_posts', function() {
$posts = display_main_site_posts();
$output = '<ul class="main-site-posts">';
foreach ($posts as $post) {
$output .= sprintf(
'<li><a href="%s">%s</a></li>',
get_permalink($post->ID),
$post->post_title
);
}
$output .= '</ul>';
return $output;
});
// 直接查询wp_posts表获取所有站点文章
function get_all_sites_posts($limit = 10) {
global $wpdb;
return $wpdb->get_results(
"SELECT * FROM {$wpdb->base_prefix}posts
WHERE post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC LIMIT %d",
$limit
);
}
// 获取网络所有用户
function get_network_users($args = []) {
global $wpdb;
$defaults = [
'number' => 20,
'offset' => 0,
'orderby' => 'user_registered',
'order' => 'DESC'
];
$args = wp_parse_args($args, $defaults);
return $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->base_prefix}users
ORDER BY {$args['orderby']} {$args['order']}
LIMIT %d, %d",
$args['offset'],
$args['number']
)
);
}
// 获取用户在所有站点的角色
function get_user_network_roles($user_id) {
global $wpdb;
$roles = [];
$blogs = get_blogs_of_user($user_id);
foreach ($blogs as $blog_id) {
switch_to_blog($blog_id);
$user = new WP_User($user_id);
$roles[$blog_id] = $user->roles;
restore_current_blog();
}
return $roles;
}
// 跨站点共享媒体库
function share_media_across_sites($source_site_id, $attachment_id, $target_site_id) {
switch_to_blog($source_site_id);
$file = get_attached_file($attachment_id);
$metadata = wp_get_attachment_metadata($attachment_id);
$mime_type = get_post_mime_type($attachment_id);
restore_current_blog();
switch_to_blog($target_site_id);
$upload_dir = wp_upload_dir();
$new_file = $upload_dir['path'] . '/' . basename($file);
if (!copy($file, $new_file)) {
restore_current_blog();
return false;
}
$attachment = [
'post_mime_type' => $mime_type,
'post_title' => preg_replace('/\.[^.]+$/', '', basename($file)),
'post_content' => '',
'post_status' => 'inherit'
];
$new_attachment_id = wp_insert_attachment($attachment, $new_file);
wp_update_attachment_metadata($new_attachment_id, $metadata);
restore_current_blog();
return $new_attachment_id;
}
// 带缓存的跨站点数据获取
function get_cross_site_data($site_id, $callback, $cache_key, $expire = 3600) {
$cache = get_site_transient($cache_key);
if ($cache !== false) {
return $cache;
}
switch_to_blog($site_id);
$data = call_user_func($callback);
restore_current_blog();
set_site_transient($cache_key, $data, $expire);
return $data;
}
// 使用示例
$latest_posts = get_cross_site_data(
1, // 主站点ID
function() {
return get_posts(['posts_per_page' => 5]);
},
'main_site_latest_posts',
HOUR_IN_SECONDS
);
// 批量获取多个站点数据
function batch_get_sites_data($sites, $callback) {
$results = [];
foreach ($sites as $site_id) {
switch_to_blog($site_id);
$results[$site_id] = call_user_func($callback, $site_id);
restore_current_blog();
}
return $results;
}
// 使用示例
$sites = [1, 2, 3]; // 站点ID数组
$all_posts = batch_get_sites_data($sites, function($site_id) {
return get_posts([
'posts_per_page' => 3,
'fields' => 'ids'
]);
});
// 验证用户是否有权限访问跨站点数据
function can_access_cross_site_data($user_id, $site_id) {
$user_blogs = get_blogs_of_user($user_id);
if (!isset($user_blogs[$site_id])) {
return false;
}
switch_to_blog($site_id);
$user = new WP_User($user_id);
$has_access = $user->has_cap('read');
restore_current_blog();
return $has_access;
}
// 设置可共享的数据类型
function get_shareable_post_types() {
return apply_filters('shareable_post_types', [
'post' => '文章',
'product' => '产品'
]);
}
// 验证是否可共享
function is_post_type_shareable($post_type) {
$shareable_types = get_shareable_post_types();
return isset($shareable_types[$post_type]);
}
// 聚合所有站点最新内容
function aggregate_network_content($limit = 10) {
$sites = get_sites(['number' => 50]); // 获取前50个站点
$all_posts = [];
foreach ($sites as $site) {
switch_to_blog($site->blog_id);
$posts = get_posts([
'posts_per_page' => $limit,
'post_status' => 'publish'
]);
foreach ($posts as $post) {
$post->blog_id = $site->blog_id;
$post->blog_name = get_bloginfo('name');
$all_posts[] = $post;
}
restore_current_blog();
}
// 按日期排序
usort($all_posts, function($a, $b) {
return strtotime($b->post_date) - strtotime($a->post_date);
});
return array_slice($all_posts, 0, $limit);
}
// 跨站点搜索实现
function network_wide_search($query, $limit = 10) {
$sites = get_sites(['number' => 20]); // 限制搜索前20个站点
$results = [];
foreach ($sites as $site) {
switch_to_blog($site->blog_id);
$site_results = new WP_Query([
's' => $query,
'posts_per_page' => $limit,
'post_status' => 'publish'
]);
if ($site_results->have_posts()) {
while ($site_results->have_posts()) {
$site_results->the_post();
$results[] = [
'blog_id' => $site->blog_id,
'blog_name' => get_bloginfo('name'),
'post' => get_post()
];
}
}
restore_current_blog();
}
return $results;
}
通过以上方法和技术,可以在WordPress多站点环境中实现高效、安全的数据共享。关键是要注意性能优化和权限控制,确保共享数据的同时不会影响网站性能或造成安全漏洞。实际开发中应根据具体需求选择合适的共享策略,并做好缓存和错误处理。
减价出售
减价出售
减价出售
减价出售
电话咨询
1855-626-3292
微信咨询