importRobotsTxtFromText( $lines, $network );
}
return true;
} catch ( \Exception $e ) {
throw new \Exception( esc_html( $e->getMessage() ) );
}
}
/**
* Import robots.txt from a URL.
*
* @since 4.4.2
*
* @param string $text The text to import from.
* @param bool $network True if inside WordPress network administration pages.
* @throws \Exception If no User-agent is found.
* @return boolean Whether the file imported correctly or not.
*/
public function importRobotsTxtFromText( $text, $network ) {
$ruleset = $this->extractRules( $text );
if ( ! key( $ruleset ) ) {
throw new \Exception( esc_html__( 'No User-agent found in the content beginning.', 'all-in-one-seo-pack' ) );
}
$options = aioseo()->options;
if ( $network ) {
$options = aioseo()->networkOptions;
}
$currentRules = $this->groupRulesByUserAgent( $options->tools->robots->rules );
$ruleset = $this->mergeRules( $currentRules, $ruleset, false, true );
$options->tools->robots->rules = aioseo()->robotsTxt->prepareRobotsTxt( $ruleset );
return true;
}
/**
* Import robots.txt from a URL.
*
* @since 4.4.2
*
* @param string $url The URL to import from.
* @param bool $network True if inside WordPress network administration pages.
* @throws \Exception If request fails.
* @return bool Whether the import was successful or not.
*/
public function importRobotsTxtFromUrl( $url, $network ) {
$request = wp_remote_get( $url, [
'timeout' => 10,
'sslverify' => false
] );
$robotsTxtContent = wp_remote_retrieve_body( $request );
if ( ! $robotsTxtContent ) {
throw new \Exception( esc_html__( 'There was an error importing the robots.txt content from the URL.', 'all-in-one-seo-pack' ) );
}
$options = aioseo()->options;
if ( $network ) {
$options = aioseo()->networkOptions;
}
$newRules = $this->extractRules( $robotsTxtContent );
$currentRules = $this->groupRulesByUserAgent( $options->tools->robots->rules );
$newRules = $this->mergeRules( $currentRules, $newRules, false, true );
$options->tools->robots->rules = aioseo()->robotsTxt->prepareRobotsTxt( $newRules );
return true;
}
/**
* Deletes the physical robots.txt file.
*
* @since 4.4.5
*
* @throws \Exception If the file is not readable, or it can't be deleted.
* @return true True if the file was successfully deleted.
*/
public function deletePhysicalRobotsTxt() {
try {
$fs = aioseo()->core->fs;
if (
! $fs->isWpfsValid() ||
! $fs->fs->delete( trailingslashit( $fs->fs->abspath() ) . 'robots.txt' )
) {
throw new \Exception( __( 'There was an error deleting the physical robots.txt file.', 'all-in-one-seo-pack' ) );
}
Models\Notification::deleteNotificationByName( 'robots-physical-file' );
return true;
} catch ( \Exception $e ) {
throw new \Exception( esc_html( $e->getMessage() ) );
}
}
/**
* Prepare robots.txt rules to save.
*
* @since 4.1.4
*
* @param array $allRules Array with the rules.
* @return array The prepared rules array.
*/
public function prepareRobotsTxt( $allRules = [] ) {
$robots = [];
foreach ( $allRules as $userAgent => $rules ) {
if ( empty( $userAgent ) ) {
continue;
}
foreach ( $rules as $rule ) {
list( $directive, $value ) = $this->parseRule( $rule );
if ( empty( $directive ) || empty( $value ) ) {
continue;
}
if (
'*' === $userAgent &&
(
'allow' === $directive && '/wp-admin/admin-ajax.php' === $value ||
'disallow' === $directive && '/wp-admin/' === $value
)
) {
continue;
}
$robots[] = wp_json_encode( [
'userAgent' => $userAgent,
'directive' => $directive,
'fieldValue' => $value
] );
}
}
return $robots;
}
/**
* Checks if a physical robots.txt file exists.
*
* @since 4.0.0
*
* @return boolean True if it does, false if not.
*/
public function hasPhysicalRobotsTxt() {
$fs = aioseo()->core->fs;
if ( ! $fs->isWpfsValid() ) {
return false;
}
$accessType = get_filesystem_method();
if ( 'direct' === $accessType ) {
$file = trailingslashit( $fs->fs->abspath() ) . 'robots.txt';
return $fs->exists( $file );
}
return false;
}
/**
* Get the default Robots.txt lines (excluding our own).
*
* @since 4.1.7
* @version 4.4.2
*
* @return string The robots.txt content rules (excluding our own).
*/
public function getDefaultRobotsTxtContent() {
// First, we need to remove our filter, so that it doesn't run unintentionally.
remove_filter( 'robots_txt', [ $this, 'buildRules' ], 10000 );
ob_start();
do_robots();
if ( is_admin() ) {
header( 'Content-Type: text/html; charset=utf-8' );
}
$rules = strval( ob_get_clean() );
// Add the filter back.
add_filter( 'robots_txt', [ $this, 'buildRules' ], 10000 );
return $rules;
}
/**
* A check to see if the rewrite rules are set.
* This isn't perfect, but it will help us know in most cases.
*
* @since 4.0.0
*
* @return boolean Whether the rewrite rules are set or not.
*/
public function rewriteRulesExist() {
// If we have a physical file, it's almost impossible to tell if the rewrite rules are set.
// The only scenario is if we still get a 404.
$response = wp_remote_get( aioseo()->helpers->getSiteUrl() . '/robots.txt' );
if ( 299 < wp_remote_retrieve_response_code( $response ) ) {
return false;
}
return true;
}
}
Fatal error: Uncaught Error: Class "AIOSEO\Plugin\Common\Tools\RobotsTxt" not found in /home/valigeria/public_html/wp-content/plugins/all-in-one-seo-pack-pro/app/AIOSEO.php:300
Stack trace:
#0 /home/valigeria/public_html/wp-content/plugins/all-in-one-seo-pack-pro/app/AIOSEO.php(97): AIOSEO\Plugin\AIOSEO->load()
#1 /home/valigeria/public_html/wp-content/plugins/all-in-one-seo-pack-pro/app/AIOSEO.php(76): AIOSEO\Plugin\AIOSEO->init()
#2 /home/valigeria/public_html/wp-content/plugins/all-in-one-seo-pack-pro/app/AIOSEO.php(414): AIOSEO\Plugin\AIOSEO::instance()
#3 /home/valigeria/public_html/wp-content/plugins/all-in-one-seo-pack-pro/all_in_one_seo_pack.php(96): aioseo()
#4 /home/valigeria/public_html/wp-settings.php(517): include_once('/home/valigeria...')
#5 /home/valigeria/public_html/wp-config.php(111): require_once('/home/valigeria...')
#6 /home/valigeria/public_html/wp-load.php(50): require_once('/home/valigeria...')
#7 /home/valigeria/public_html/wp-blog-header.php(13): require_once('/home/valigeria...')
#8 /home/valigeria/public_html/index.php(17): require('/home/valigeria...')
#9 {main}
thrown in /home/valigeria/public_html/wp-content/plugins/all-in-one-seo-pack-pro/app/AIOSEO.php on line 300