WordPress多站点下创建multisite-pod及template.php调用示例咨询
多站点环境下Pods(multisite-pod)创建及调用实操指南
前置配置确认
操作前先确认基础配置符合要求:
- 站点多站点配置按你给出的规则完成,已配置
define('DOMAIN_CURRENT_SITE', 'network.example.org'); - Pods插件在网络管理层面全局启用,进入Pods设置页勾选「开启网络级Pod共享」选项
多站点共用Pod创建步骤
不用给每个子站点单独创建Pod,直接在主站配置网络级共用Pod即可:
- 登录network.example.org后台,进入「Pods > 新增Pod」
- 按需选择创建自定义内容类型或者给已有内容类型加自定义字段组,勾选「网络全域可用」选项后保存
- 进入字段编辑页,添加所需的4个自定义字段:
- 字段标识
name,显示名称自定义,字段类型选「单行文本」 - 字段标识
content,显示名称自定义,字段类型选「富文本编辑器」 - 字段标识
link_german,显示名称自定义,字段类型选「URL」 - 字段标识
link_english,显示名称自定义,字段类型选「URL」
- 字段标识
- 保存Pod配置后,进入网络管理的「站点 > 所有站点」,给example.org、example.de两个子站点开启该Pod的访问权限,避免子站无权限读取字段
template.php调用Pod的具体代码示例
场景1:当前站点调用自身的Pod内容
以下代码可直接放在对应页面模板中,会自动根据当前站点域名匹配对应语言的链接:
// 替换括号内内容为你实际创建的Pod别名,第二个参数为内容的ID $current_pod = pods( '你的自定义Pod别名', get_the_ID() ); // 读取基础字段内容 $name = $current_pod->field( 'name' ); $content = $current_pod->field( 'content' ); // 根据当前站点域名匹配对应链接 $current_domain = sanitize_text_field( $_SERVER['HTTP_HOST'] ); if ( $current_domain === 'example.de' ) { $output_link = $current_pod->field( 'link_german' ); } else { $output_link = $current_pod->field( 'link_english' ); } // 安全输出内容 if ( ! empty( $name ) ) { echo '<h3>' . esc_html( $name ) . '</h3>'; } if ( ! empty( $content ) ) { echo '<div class="pod-custom-content">' . wp_kses_post( $content ) . '</div>'; } if ( ! empty( $output_link ) ) { echo '<a href="' . esc_url( $output_link ) . '" target="_blank" rel="noopener">查看详情</a>'; }
场景2:子站点调用主站(network.example.org)的共用Pod内容
如果Pod内容统一在主站维护,子站需要跨站读取的话用以下代码:
// 切换到主站点,1为主站默认ID,可在网络管理站点列表查看实际ID switch_to_blog( 1 ); // 读取主站的Pod内容,替换Pod别名和目标内容ID $network_pod = pods( '你的自定义Pod别名', $主站对应内容的ID ); $name = $network_pod->field( 'name' ); $content = $network_pod->field( 'content' ); $de_link = $network_pod->field( 'link_german' ); $en_link = $network_pod->field( 'link_english' ); // 必须执行切回当前站点的操作,否则后续页面逻辑会出错 restore_current_blog(); // 按需输出内容即可,匹配域名逻辑和上方场景1一致
常见问题注意事项
- 自定义字段标识不要用空格、括号等特殊字符,推荐用下划线命名,避免读取失败
- 跨站调用Pod时
switch_to_blog()和restore_current_blog()必须配对使用,禁止只切换不恢复 - 如果需要批量获取Pod内容,可以用
pods()的find()方法,参数写法和单站点环境完全一致
内容的提问来源于stack exchange,提问作者Konstantin-007
相关产品推荐
相关产品推荐

