我有一个wordpress多站点,一个主要和四个子网站。我已经为子网站分享了woocommerce产品的插件。现在子站点可以从子站点添加或更新mainsite产品。但是当在前端显示时,媒体路径是错误的。我想使用所有子站点产品图像路径到同一路径。怎么可能?
答案 0 :(得分:3)
我会称这是一个尝试和错误的事情,我做了类似的事情,但需要一些时间来定制你想要的。
所以这就是我认为可以解决你的主要问题:
add_action('pre_get_posts', '_my_pre_get_posts', 10, 1);
function _my_pre_get_posts( $wp ) {
global $typenow, $blog_id;
if ( 'product' == $typenow && $blog_id != 1) {
switch_to_blog(1);
}
}
如果$blog_id
不是主站点(读取 ID = 1),您应该切换到博客ID 1,所有这一切都发生在从数据库中提取所有帖子之前。< / p>
产品是要查询的当前post_type,如果您希望这也适用于订单,您可能会检查'shop_order'
。
要知道正在查询哪个post_type,您应该检查网址,例如:/edit.php?post_type=shop_order
。
这可能会带来一些问题,例如管理栏中博客的标题是来自主站点的那个,并且它缺少在某些时候它需要恢复到主站点,但至少这应该做诀窍。
检查此解决方案并让我知道最终结果
答案 1 :(得分:2)
在woocommerce插件和文件类-wc-admin-post-types.php中 woocomerce通过过滤器'upload_dir'
覆盖WordPress上传过滤器add_filter( 'upload_dir', array( $this, 'upload_dir' ) );
public function upload_dir( $pathdata ) {
// Change upload dir for downloadable files
if ( isset( $_POST['type'] ) && 'downloadable_product' == $_POST['type'] ) {
if ( empty( $pathdata['subdir'] ) ) {
$pathdata['path'] = $pathdata['path'] . '/woocommerce_uploads';
$pathdata['url'] = $pathdata['url']. '/woocommerce_uploads';
$pathdata['subdir'] = '/woocommerce_uploads';
} else {
$new_subdir = '/woocommerce_uploads' . $pathdata['subdir'];
$pathdata['path'] = str_replace( $pathdata['subdir'], $new_subdir, $pathdata['path'] );
$pathdata['url'] = str_replace( $pathdata['subdir'], $new_subdir, $pathdata['url'] );
$pathdata['subdir'] = str_replace( $pathdata['subdir'], $new_subdir, $pathdata['subdir'] );
}
}
return $pathdata;
}
因此,如果您想覆盖它,可以使用更高的优先级为此'upload_dir'创建过滤器。