0
0

More than 1 year has passed since last update.

PHP & SQL for WordPress TIPS

Last updated at Posted at 2021-06-06

基本Tips

hoge.php

//変数の値をチェック・確認する
var_dump($results);

//改行コードの前に<br>を挿入してくれる関数
$kaigyo=nl2br($hoge);

クラスファイルを読み込んだ後にインスタンス化して利用

hoge.php
     //クラスを読み込む
     include(plugin_dir_path( __FILE__ )."contents.php");
     //クラスをインスタンス化
     $C_contents = new contents();
     //実行
     $C_contents->main_contents();

//--------------------------------------------------------------------

     //phpファイルを読み込む
     include(plugin_dir_path( __FILE__ )."class_info.php");

     //登録情報クラスをインスタンス化
     $regis_info = new C_info();
   //登録テーブル
    $h_option=$regis_info->h_option;
		
    //参照テーブル情報取得
    $get_row =$regis_info->get_row ;

   //テーブル名取得
   $table_name =$regis_info->table_name;

   //キー項目名
   $key_name=$regis_info->key_name;

image.png

class_info.php
<?php
//接続するテーブルの登録情報を"h_option"から取得するクラス
class C_info
{
	//登録テーブル	
	public	$h_option;
	//参照テーブル情報取得	
	public	$get_row;
	//テーブル名取得	
	public	$table_name;
	//キー項目名	
	public	$key_name;
	//テーブル項目取得	
	public	$query;
	public	$colInfo;
	//テキストエリア項目の取得	
	public	$area;
	public	$txt_area;
	
//コンストラクタ
public function __construct() {
	global $wpdb;
		
	//登録テーブル
	$this->h_option=$wpdb->prefix."h_option";

	//参照テーブル情報取得
	$this->get_row =  $wpdb->get_row("SELECT * FROM $this->h_option WHERE option_id = 1");

	//テーブル名取得
	$this->table_name = $wpdb->prefix.$this->get_row->table_name; 

	//キー項目名
	$this->key_name=$this->get_row->key_name;	

	//テーブル項目取得
	$this->query = "DESC $this->table_name";	
	$this->colInfo = $wpdb->get_col($this->query);	

	//テキストエリア項目の取得
	$this->area = $this->get_row->txt_area;
	$this->txt_area = explode(',', $this->area);
  }
	
//テーブルのカラムを取得
function read_col($tb_name){
		global $wpdb;	
		return $col_list = $wpdb->get_col("DESC $tb_name");	
	}
}

$wpdbに含まれるテーブル名を全部取得したい場合

hoge.php
	function main_contents(){
		global$wpdb;
		foreach($wpdb->tables as $key=>$value){
		  echo'<p>['.$key.'] => '.$value.'</p>';
		}
	}

hoge.php
		//データベースのテーブル名を取得して配列に入れる処理
		$cols = array();
		foreach($wpdb->tables as $key=>$value){
		  array_push($cols,$value);
		}

テーブルのフィールド(カラム)を一覧取得する

以下の例では[shops]テーブルを指定しています

hoge.php
$query = "DESC $wpdb->shops";
$colInfo = $wpdb->get_col($query);
foreach ($colInfo as $col){
	echo "<p>$col</p>";
}
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class#.E5.A4.96.E9.83.A8.E8.B3.87.E6.96.99
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class#Getting_Column_Information
//-------テーブル名を変数にするときはprefixをつける--------
$query = "DESC $wpdb->prefix$senTbNam";
$check_list = $wpdb->get_col($query);
$c_dataform->form_check($check_list);

### レコード数を取得する

xxx.php
global $wpdb;  
  $record_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->reviews WHERE field_name ='$atai'

その他

hoge.php
//mysql_connectでMySQLに接続
function shortcode_MySQLConnect(){
  global $wpdb;
  $db_user = $wpdb->dbuser;       //データベース接続ユーザーの取得
  $db_passwd = $wpdb->dbpassword; //データベース接続用パスワードの取得
  $db_host = $wpdb->dbhost;       //データベースホストの取得
  $db_dbname = $wpdb->dbname;     //データベース名の取得
     
  $link = mysqli_connect($db_host, $db_user, $db_passwd, $db_dbname);
  if (!$link) {
    return '接続失敗です。'.mysqli_error();
  }

Update Insert構文

hoge.php
//変更・追加処理
	function save_record($wpdb,$table_name,$key_name,$colInfo) {

		//レコードをセットするための配列
		$set_arr = array();
		//配列にループ代入
		foreach ($colInfo as $col){
			$set_arr[$col]= stripslashes(isset($_POST['label_'.$col])) ? stripslashes($_POST['label_'.$col]) : null;
		}

		//キーの値を取得
		$key_data = isset($_POST['label_'.$key_name]) ? $_POST['label_'.$key_name] : null;

		//該当のレコードがあるかどうか
		$get_id = $wpdb->get_var(
					$wpdb->prepare("SELECT * FROM
					  $table_name WHERE 
					  $key_name = %d", $key_data)
		);
		//レコードがなかったら新規追加あったら更新
		if ($get_id) {

		  $wpdb->update($table_name, $set_arr, array($key_name => $key_data));
		  return	"更新しました";
		} else {

		  $wpdb->insert($table_name, $set_arr);
		  return	"追加しました";
		}
	  }

	//削除処理
	function dalete_record($wpdb,$table_name,$key_name) {
		$meta_id = isset($_POST['label_'.$key_name]) ? $_POST['label_'.$key_name] : null;
		$wpdb->delete($table_name,array( $key_name => $meta_id ));
		return	"削除しました";
	}

form関係

ボタン処理

image.png

hoge.php
//選択ボタンを押したかどうか
		$senInfo=filter_input(INPUT_POST,"sentaku");
		if($senInfo=="選択") {
			$senFlg=1;
			$senTbNam=isset($_POST['テーブルを選択してください']) ? htmlspecialchars($_POST['テーブルを選択してください']) : null;
			echo $senTbNam;
		}		
hoge.html
<tbody>
<form method="POST" action=""></form>
	<tr>				
		<!--プルダウンとテキストボックス-->
		<td style="border-style: none;">テーブル選択:</td>
		<td style="border-style: none;"><select name="テーブルを選択してください">
			<option value=""></option>
			<option value="posts">posts</option>
			<option value="comments">comments</option>
			<option value="links">links</option>
			<option value="options">options</option>
			<option value="postmeta">postmeta</option>
			<option value="terms">terms</option>
			<option value="term_taxonomy">term_taxonomy</option>
			<option value="term_relationships">term_relationships</option>
			<option value="termmeta">termmeta</option>
			<option value="commentmeta">commentmeta</option>
			<option value="shops">shops</option>
		</select>
		</td>
			<td style="border-style: none;"><input type="submit" name="sentaku" value="選択">
		</td>
	</tr>
</tbody

CSVインポート

以下の例ではCSVをインポートしてデータをTable(html)で出力している。

hoge.php

function read_csvimport($filepath){
	

//CSVの取り込みには、「SplFileObject」を使うと便利です。(PHP5.1以上)
  $file = new SplFileObject($filepath); 
  $file->setFlags(SplFileObject::READ_CSV);
  $i = 0;
  $html="";
	// ファイル取得
  foreach ($file as $key => $line) {
    // ヘッダを読込
    if ( $i === 3 ) {
      $csv_heads = $line;
      $csv_heads_key = array_flip($csv_heads);  // ←ここがポイント!!
      $head_count = count($csv_heads);
      $i ++;
      continue;
    }
    if( $i > 3 ){
		$html=$html."<tr>";
		$html=$html."<td>".$line[$csv_heads_key['送信者タイプ']]."</td>";
		$html=$html."<td>".$line[$csv_heads_key['送信者タイプ']]."</td>";
		$html=$html."<td>".$line[$csv_heads_key['送信者名']]."</td>";
		$html=$html."<td>".$line[$csv_heads_key['送信日']]."</td>";
		$html=$html."<td>".$line[$csv_heads_key['送信時刻']]."</td>";
		$html=$html."<td>".$line[$csv_heads_key['内容']]."</td>";
		$html=$html."</tr>";
	} 
    $i++;
  }
?>
		<!--出力-->
		<div class="wrap">
		<div class="wrap">
		<table class="wp-list-table widefat striped posts">
		<?php echo $html; ?>
		</table>
		</div>
		</div>
<?php
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0