Последние несколько месяцев я усердно работал над улучшением производительности моего устройства. WordPress детская тема. Периодически при оптимизации моей дочерней темы возникала проблема, и мне приходилось возвращаться к более старой копии кода, который я обновил в своей теме. Однако ежедневные резервные копии на моем хосте превышают гигабайт, поэтому загрузка и поиск кода для восстановления занимает время.

Потеря темы WordPress из-за несчастного случая или злонамеренной атаки может стать кошмаром. Поэтому надежная система резервного копирования очень важна. Многие плагины предлагают комплексные решения для резервного копирования, но иногда вам нужен простой и целенаправленный подход. В этой статье обсуждается специальный плагин WordPress, предназначенный для ежедневного автоматического резервного копирования активных тем, обеспечивая дополнительный уровень защиты дизайна и функциональности вашего сайта.

ПРИМЕЧАНИЕ. Он не заменяет полную резервную копию вашего экземпляра WordPress. Это простой способ быстро получить доступ к копии активной темы. Это экономит до 10 экземпляров, поэтому вам не нужно заполнять хост резервными копиями.

Плагин WordPress для ежедневного резервного копирования тем

Я создал Ежедневное резервное копирование темы плагин, который берет вашу активную тему, сжимает ее и помещает в папку резервного копирования вашего сайта. Это также делает эту папку недоступной для внешних зрителей, поэтому вы можете быть уверены, что никто не загрузит файлы.

Добавьте в папку, чтобы использовать его wp-content/plugins папка под названием daily-theme-backup и скопируйте следующий код в файл в этом каталоге: daily-theme-backup.php.

Backup Now';
  array_unshift( $links, $backup_link ); // Add the link with a separator
  return $links;
}

// Check for the "backup_now" query parameter and trigger the backup.
if ( isset( $_GET['backup_now'] ) && $_GET['backup_now'] == 'true' ) {
  create_theme_backup();

  // Optionally, display a success message.
  add_action( 'admin_notices', 'display_backup_success_message' );
}

function display_backup_success_message() {
  echo '

Theme backup created successfully!

'; } function create_theme_backup() { // Get the active theme directory. $theme_dir = get_stylesheet_directory(); $theme_name = basename($theme_dir); // Create the backup filename with timestamp if triggered manually. if ( isset( $_GET['backup_now'] ) && $_GET['backup_now'] == 'true' ) { $backup_file = WP_CONTENT_DIR . '/backup/' . $theme_name . '-' . date('Y-m-d-H-i-s') . '.zip'; } else { $backup_file = WP_CONTENT_DIR . '/backup/' . $theme_name . '-' . date('Y-m-d') . '.zip'; } // Create the zip archive. $zip = new ZipArchive(); if ($zip->open($backup_file, ZipArchive::CREATE) === TRUE) { // Add the theme directory to the zip archive. $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($theme_dir), RecursiveIteratorIterator::LEAVES_ONLY ); foreach ($files as $name => $file) { // Skip directories (they would be added automatically) if (!$file->isDir()) { // Get real and relative path for current file $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($theme_dir) + 1); // Add current file to archive $zip->addFile($filePath, $relativePath); } } $zip->close(); // Delete old backups. $backup_files = glob(WP_CONTENT_DIR . '/backup/' . $theme_name . '-*.zip'); if (count($backup_files) > 10) { usort($backup_files, 'filemtime_compare'); for ($i = 0; $i

Код: распределение

Этот плагин использует PHP и встроенные функции WordPress для достижения вашей цели. Разберем основные компоненты:

1. Монтаж сцены:

// Create the backup directory if it doesn't exist.
if (!file_exists(WP_CONTENT_DIR . '/backup')) {
  mkdir(WP_CONTENT_DIR . '/backup', 0755);
}

// Function to create the .htaccess file for backup directory protection
function protect_backup_directory() {
  $htaccess_file = WP_CONTENT_DIR . '/backup/.htaccess';
  $htaccess_content="deny from all";

  if (!file_exists($htaccess_file)) {
    if (insert_with_markers($htaccess_file, 'Daily Theme Backup', $htaccess_content)) {
      error_log('Backup directory protected with .htaccess.');
    } else {
      error_log('Error creating .htaccess file for backup directory protection.');
    }
  }
}

// Run the protect_backup_directory function on plugin activation.
register_activation_hook( __FILE__, 'protect_backup_directory' );
  • Код начинается с создания специального «резервного» каталога. wp-content если он еще не существует. Здесь будут храниться резервные копии наших тем.
  • Безопасность имеет первостепенное значение. protect_backup_directory() функция использует .htaccess файл, чтобы ограничить доступ к этому каталогу. Это не позволяет кому-либо напрямую загружать ваши файлы резервных копий через веб-браузер. Эта функция связана с активацией плагина, обеспечивающего немедленную защиту каталога резервных копий.

2. Планирование резервного копирования:

// Schedule the daily backup.
if (!wp_next_scheduled('daily_theme_backup')) {
  wp_schedule_event(time(), 'daily', 'daily_theme_backup');
}

// Hook the backup function to the scheduled event.
add_action('daily_theme_backup', 'create_theme_backup');
  • WordPress предлагает удобный механизм планирования. wp_schedule_event используется для планирования create_theme_backup функция для запуска каждый день. Это гарантирует ежедневное автоматическое резервное копирование вашей темы.

3. Процесс резервного копирования:

function create_theme_backup() {
  // Get the active theme directory.
  $theme_dir = get_stylesheet_directory();
  $theme_name = basename($theme_dir);

  // Create the backup filename with timestamp if triggered manually.
  if ( isset( $_GET['backup_now'] ) && $_GET['backup_now'] == 'true' ) {
    $backup_file = WP_CONTENT_DIR . '/backup/' . $theme_name . '-' . date('Y-m-d-H-i-s') . '.zip';
  } else {
    $backup_file = WP_CONTENT_DIR . '/backup/' . $theme_name . '-' . date('Y-m-d') . '.zip';
  }

  // Create the zip archive.
  $zip = new ZipArchive();
  if ($zip->open($backup_file, ZipArchive::CREATE) === TRUE) {
    // Add the theme directory to the zip archive.
    $files = new RecursiveIteratorIterator(
      new RecursiveDirectoryIterator($theme_dir),
      RecursiveIteratorIterator::LEAVES_ONLY
    );

    foreach ($files as $name => $file) {
      if (!$file->isDir()) {
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($theme_dir) + 1);
        $zip->addFile($filePath, $relativePath);
      }
    }

    $zip->close();

    // Delete old backups.
    $backup_files = glob(WP_CONTENT_DIR . '/backup/' . $theme_name . '-*.zip');
    if (count($backup_files) > 10) {
      usort($backup_files, 'filemtime_compare');
      for ($i = 0; $i 
  • Сердце плагина create_theme_backup() функция. Он определяет активную тему, создает zip-архив и аккуратно добавляет все файлы темы.
  • Код также включает механизм очистки, позволяющий избежать помех. Он сохраняет только последние десять резервных копий, удаляя более старые для экономии места.

4. Резервные копии по запросу:

// Add a "Backup Now" link to the plugin actions.
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'add_theme_backup_action_link' );

function add_theme_backup_action_link( $links ) {
  $backup_link = 'Backup Now';
  array_unshift( $links, $backup_link . ' | ' ); 
  return $links;
}

// Check for the "backup_now" query parameter and trigger the backup.
if ( isset( $_GET['backup_now'] ) && $_GET['backup_now'] == 'true' ) {
  create_theme_backup();
  add_action( 'admin_notices', 'display_backup_success_message' );
}

function display_backup_success_message() {
  echo '

Theme backup created successfully!

'; }
  • Гибкость является ключевым моментом. Плагин добавляет Резервное копирование сейчас ссылка на его страницу в админке WordPress. Это позволяет вам создавать резервную копию по требованию в дополнение к запланированным ежедневным резервным копиям. Эти ручные резервные копии имеют метку времени, чтобы предотвратить перезапись ежедневных резервных копий.

Почему это важно?

Этот плагин предоставляет целевое решение для защиты вашей темы WordPress. Автоматизация процесса резервного копирования и защита файлов резервных копий обеспечивают спокойствие и быстрое восстановление в случае непредвиденных проблем. Как только вы поймете этот код, вы сможете дополнительно настроить его в соответствии с вашими конкретными потребностями или расширить его для дублирования других важных элементов вашего сайта WordPress.

Source

ЧИТАТЬ  Google Cloud заявляет, что исправил существенный недостаток безопасности