userFramework != 'WordPress') { return []; } if (is_multisite()) { // There are a lot potential configurations in a multisite context where // this could show a false positive. This completely skips multisite for // now. return []; } switch (self::pageExists($config->wpBasePage)) { case 1: // Page is here and published return []; case 0: $messageText = [ ts( 'CiviCRM relies upon a base page in WordPress, but it is not published.', [ 1 => $config->userFrameworkBaseURL, 2 => $config->wpBasePage, ] ), ]; break; case -1: // Page is missing, but let's look around to see if the default is there // --either the default as modified by civicrm_basepage_slug or the // default default, `civicrm`. $cmsSettings = CRM_Utils_System::url( 'civicrm/admin/setting', $query = ['reset' => 1], FALSE, NULL, TRUE, FALSE, TRUE ); $messageText = [ ts( 'CiviCRM relies upon a base page in WordPress at %1%2, but it is missing.', [ 1 => $config->userFrameworkBaseURL, 2 => $config->wpBasePage, ] ), ]; $altSlugs = array_unique([ apply_filters('civicrm_basepage_slug', 'civicrm'), 'civicrm', ]); if (in_array($config->wpBasePage, $altSlugs)) { $messageText[] = ts( 'If you have an alternative base page, it can be set in the WordPress integration settings.', [ 1 => $config->userFrameworkBaseURL, 2 => $cmsSettings, ] ); } else { foreach ($altSlugs as $slug) { $exists = self::pageExists($slug); if ($exists >= 0) { // One of the possible defaults is here, published or not. $messageText[] = ts( 'The default is %1%2, which does exist on this site.', [ 1 => $config->userFrameworkBaseURL, 2 => $slug, ] ); if ($exists == 0) { $messageText[] = ts('However, it is not published.'); } // We've found one, and if the `civicrm_basepage_slug` filter has // modified the default, we should go with it. break; } } if ($exists == -1) { // We went through the default(s) and couldn't find one. Defer to // the one modified by the filter. $messageText[] = ts( 'The default is %1%2, but that does not exist on this site either.', [ 1 => $config->userFrameworkBaseURL, 2 => $altSlugs[0], ] ); } $messageText[] = ts( 'You can set the correct base page in the WordPress integration settings.', [1 => $cmsSettings] ); } } return [ new CRM_Utils_Check_Message( __FUNCTION__, implode(' ', $messageText), ts('WordPress Base Page Missing'), \Psr\Log\LogLevel::ERROR, 'fa-wordpress' ), ]; } /** * See if a page exists and is published. * * @param string $slug * The page path. * @return int * -1 if it's missing * 0 if it's present but not published * 1 if it's present and published */ private static function pageExists($slug) { $basePage = get_page_by_path($slug); if (!$basePage) { return -1; } return (int) ($basePage->post_status == 'publish'); } }