サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

WordPressのプラグイン更新にともなうルーチンワークを1Click化する

2023-12-30 記載
概要 : WordPressのプラグイン更新にともなうルーチンワークを1Click化する
Keyword : WordPress, 更新,

WordPressは更新すると、書き加えていた変更はリセットされてしまいます。なるべくそうならないように、更新で置き換わるファイル自体は変更せずに、外野から操作するのがコツですが、そうもいかないケースもあります。

そこで使いやすい phpのftpを用いて、ファイルを決まった手順で書き換えるphp処理を作成しました。はやい話「更新バッチ」ですね。

  //基本設定
  mb_language('Japanese');
  mb_internal_encoding('UTF-8');
  date_default_timezone_set("Asia/Tokyo");
  setlocale(LC_ALL, 'ja_JP.UTF-8');

  $sPlugin = $_GET['plugin'] ?? 'nop';
  $sServer = $_GET['server'] ?? 'localhost';

  $cParam = array();

  if ($sPlugin === 'nop') {
  } elseif ($sPlugin === 'wpplugin') {
    //================================================================================
    // プラグインを更新した後、管理画面に広告を出させないように修正する
    //================================================================================
    $cParam['local_temp_folder'] = 'c:/home/cfsid/cfsid.cloudfree.jp/public_html/temp/';
    //$ftp 生成
    if ($sServer === 'localhost') {
      //ftp-local
      $ftp = getftp('localhost/ftpuser/password');
      ftp_chdir($ftp, '/cloudfree_home/cfsid/cfsid.cloudfree.jp/public_html/mywprdpress/wp-content/plugins/wpplugin/includes/admin/');
    }
    if ($sServer === 'cloudfree') {
      //ftp-cloudfree
      $ftp = getftp('svXX.cloudfree.ne.jp/cfsid_ftpuser@cfsid.cloudfree.jp/password');
      ftp_chdir($ftp, '/cfsid.cloudfree.jp/public_html/mywprdpress/wp-content/plugins/wpplugin/includes/admin/');
    }

    //[作業内容]
    //class-admin.php の wpplugin()->add_notice で始まる行を//でコメントアウトする
    //step1:ftpでdownload > step2:ファイル編集 > step3:Upload
    //step1:ftpでdownload
    $sLocalFile = $cParam['local_temp_folder'].'class-admin.php';
    ftp_get($ftp, $sLocalFile, 'class-admin.php', FTP_BINARY);

    //step2:ファイル編集
    $sContent = file_get_contents($sLocalFile);
    $sContent = str_replace('wpplugin()->add_notice', '//wpplugin()->add_notice', $sContent);
    file_put_contents($sLocalFile, $sContent);

    //step3:Upload
    ftp_put($ftp, 'class-admin.php', $sLocalFile, FTP_BINARY);
    sleep(1); //一呼吸おいて
    unlink($sLocalFile);

    //$ftp 後始末
    ftp_close($ftp);

    echo '処理完了';
  }

  // === function ================================================================
  //FTPサーバへの接続
  function getftp($sServerVal) {
    $asServerVal = explode('/', $sServerVal);
    $ftp = ftp_connect($asServerVal[0]) or die("Couldn't connect to $asServerVal[0]");
    ftp_login($ftp, $asServerVal[1], $asServerVal[2]) or die("Couldn't login");
    return $ftp;
  }

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog