如何检查多站点中是否存在页面?

时间:2020-10-29 作者:chifliiiii

我有以下功能可以使用路径检查WordPress中是否存在该页面:

    private function page_exists( $path ) {
        $post_types = apply_filters( \'get_page_by_path_post_types\', [ \'page\', \'post\' ] );
        foreach ( $post_types as $pt ) {
            if( get_page_by_path( $path, OBJECT, $pt ) !== null ) {
                return true;
            }
        }
        return false;
    }
问题是,在多站点中,该功能失败。我四处搜索,但找不到类似于get\\u page\\u by\\u path的多站点函数

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

get_page_by_path() 将仅在当前网站中搜索。

如果您需要在多站点网络中的任何位置查找页面,可以执行以下操作。

function network_page_exists( $path ) {
    $args = array(
         // Max sites to retrieve.
         // If you have a large network, increase this.
        \'number\' => 100,
    );
    $sites = get_sites( $args );
    $found = false;
    foreach ( $sites as $site ) {
        if ( ! $found ) {
            switch_to_blog( $site->blog_id );
            // Uses your page_exists() function in the sites
            // till we find the post, or till we run out of sites.
            $found = page_exists( $path );
            restore_current_blog();
        }
    }
    return $found; 
 }
Note: switch_to_blog() 如果你有一个大的网络,你的网站会变慢。您可能希望研究如何缓存结果(可能使用选项)。因为这取决于你的具体情况,所以这个答案没有提到。

参考文献get_sites()
  • switch_to_blog()
  • restore_current_blog()
  • 相关推荐

    本地WordPress MultiSite在AWS开发服务器上不工作“建立数据库连接时出错”

    我在本地mac上使用mamp安装了composer WP starter。它按预期工作。我正在使用phpdotenv隐藏我的wp配置。php设置和我将wordpress目录移动到文档根目录下的子目录中。我在本地mac dev2上使用虚拟主机。域名。com。我使用wp db migrate pro查找dev2并将其替换为dev3作为域名。com在本地和AWS上是相同的。唯一的其他区别是数据库连接设置。我知道数据库连接设置是正确的,因为我在运行composer并使用wp cli安装wp的shell脚本中使用了