在WordPress子目录多站点模式下,实现子站调用自身文档的核心在于数据库查询逻辑和WordPress多站点的API函数。以下是具体实现方案:跨子站调用内容(例如主站调用子站文章),需使用switch_to_blog()函数切换站点上下文:
以下是融合了css样式的php代码,可在wordpress网站首页直接调用,或新建page.php或single.php进行调用。
使用说明:
1、以下代码是调用子站id=5,文章分类id=1的内容。
<?php /** * 完整子站文章调用模板 - 包含内置样式 * 功能:显示ID=5子站的文章,含标题、链接、缩略图、分类、摘要 */ // 验证子站是否存在 $target_blog_id = 5; if (!get_blog_details($target_blog_id)) { return '<div class="subsite-error">错误:子站不存在或已被删除</div>'; } // 切换到子站上下文 switch_to_blog($target_blog_id); // 内置CSS样式(自动唯一标识避免冲突) $css_identifier = 'subsite-posts-' . $target_blog_id; ob_start(); // 开始捕获CSS输出 ?> <style id="<?php echo esc_attr($css_identifier); ?>"> /* 响应式网格布局 - 4列版本 */ .<?php echo $css_identifier; ?>-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); /* 关键修改点 */ gap: 1.5rem; padding: 1rem; margin: 2rem 0; } /* 平板端适配 */ @media (max-width: 1200px) { .<?php echo $css_identifier; ?>-grid { grid-template-columns: repeat(3, 1fr); /* 3列布局 */ } } @media (max-width: 992px) { .<?php echo $css_identifier; ?>-grid { grid-template-columns: repeat(2, 1fr); /* 2列布局 */ gap: 1rem; } } /* 手机端适配 */ @media (max-width: 768px) { .<?php echo $css_identifier; ?>-grid { grid-template-columns: 1fr; /* 单列布局 */ gap: 0.5rem; } } /* 卡片高度统一 */ .<?php echo $css_identifier; ?>-card { height: 100%; /* 确保等高 */ display: flex; flex-direction: column; /* 垂直排列 */ } /* 缩略图高度优化 */ .<?php echo $css_identifier; ?>-thumbnail { height: 180px; /* 更紧凑的高度 */ } /* 内容区域自动填充 */ .<?php echo $css_identifier; ?>-excerpt { flex-grow: 1; /* 保持卡片底部对齐 */ } /* 其他样式保持不变 */ .<?php echo $css_identifier; ?>-card { background: #fff; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); overflow: hidden; transition: transform 0.3s ease; } /* ... [其他样式保持不变] ... */ </style> <?php $embedded_css = ob_get_clean(); // 查询文章 $args = [ 'post_type' => 'post', 'posts_per_page' => 4, 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'DESC' ]; $blog_posts = new WP_Query($args); // 生成HTML内容 ob_start(); echo $embedded_css; // 输出CSS if ($blog_posts->have_posts()) : echo '<div class="' . esc_attr($css_identifier) . '-grid">'; while ($blog_posts->have_posts()) : $blog_posts->the_post(); $post_url = esc_url(get_the_permalink()); $thumbnail_url = get_the_post_thumbnail_url(null, 'medium'); $fallback_image = esc_url(get_theme_file_uri('/assets/img/default-thumbnail.jpg')); ?> <article class="<?php echo esc_attr($css_identifier); ?>-card"> <!-- 缩略图 --> <a href="<?php echo $post_url; ?>"> <img src="<?php echo $thumbnail_url ?: $fallback_image; ?>" class="<?php echo esc_attr($css_identifier); ?>-thumbnail" alt="<?php echo esc_attr(get_the_title()); ?>"> </a> <!-- 元信息 --> <div class="<?php echo esc_attr($css_identifier); ?>-meta"> <time datetime="<?php echo esc_attr(get_the_date('c')); ?>"> <?php echo get_the_date('Y.m.d'); ?> </time> <span><?php echo esc_html(get_the_author()); ?></span> </div> <!-- 标题 --> <h3 class="<?php echo esc_attr($css_identifier); ?>-title"> <a href="<?php echo $post_url; ?>"> <?php echo esc_html(get_the_title()); ?> </a> </h3> <!-- 分类 --> <div class="<?php echo esc_attr($css_identifier); ?>-categories"> <?php foreach ((get_the_category() ?: []) as $category) : if ($category->term_id == 1) continue; // 跳过未分类 ?> <a href="<?php echo esc_url(get_category_link($category->term_id)); ?>" class="<?php echo esc_attr($css_identifier); ?>-category"> <?php echo esc_html($category->name); ?> </a> <?php endforeach; ?> </div> <!-- 摘要 --> <div class="<?php echo esc_attr($css_identifier); ?>-excerpt"> <?php echo wp_trim_words(get_the_excerpt(), 25, '...'); ?> </div> </article> <?php endwhile; echo '</div>'; else : echo '<p class="' . esc_attr($css_identifier) . '-empty">暂无最新文章</p>'; endif; // 生成最终HTML $output = ob_get_clean(); // 重置WordPress环境 wp_reset_postdata(); restore_current_blog(); // 输出结果 echo $output; ?>
继续阅读
评论