読者です 読者をやめる 読者になる 読者になる

色々でべろっぷ

WordPress、サーバー構築、プログラム等のメモ

Wordpress独自フォームでパスワード一括変更

WordPress PHP

Wordpressプラグインを使わずに、フォームを設置する

※functions.phpとthe_contentフィルターフックを利用してフォームを自作する方法
ttp://dim5.net/wordpress/development-registration-form.html

上のやり方ではなく、独自ショートコードを利用して外部PHPファイルを呼び出す方法

参考
Wordpressで独自ショートコード作成 - 色々でべろっぷ
Wordpressでセッションを使う - 色々でべろっぷ



・投稿記事のパスワードを一括変更する
・セッションを使った重複送信の制御
・新規パスワード入力フォームページ

passchange.php

<?php

if( is_page('passchange')){
  global $wpdb;

  // 管理者以上が必要
  if(!current_user_can('administrator')){
    echo "管理者以上の権限が必要です!";
    die();
  }

  // POST有りなら
  if( !empty($_POST)){
    if(!empty($_POST["pass"])){
      // セッションキーとチケットが一致しているどうか
      if ( $_SESSION['key'] and $_POST['ticket'] and $_SESSION['key'] == $_POST['ticket'] ){
        $rows = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND NOT post_password = '' ");
        $count = 0;
        foreach($rows as $row) {
          $id = $row->ID;
          $result = $wpdb->update( $wpdb->posts, array(
            'post_password' => $_POST["pass"],
          ), array(
            'ID' => $id,
          ), array('%s'), array('%d'));
          $count++;
        }
        $message = $count . "件、記事のパスワードを変更しました。<br>";
      }else{
        $message = '送信済みです。';
      }
    }else{
      $message = 'パスワードが空です。';
    }

    unset($_SESSION['key']);
    echo $message;
  }

  // ワンタイムチケットの生成とセッションへの保存
  $session_key = md5(sha1(uniqid(mt_rand(), true)));
  $_SESSION['key'] = $session_key;
?>

<h3>パスワード一括変更</h3>
<form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
  <input type="hidden" name="post_method" value="Y">
  <input type="hidden" name="ticket" value="<?php echo $session_key; ?>">
  <input type="text" name="pass" value="">
  <input type="submit" name="Submit" value="決定" />
</form>

<?php

}else{
  return $content;
}

?>