PHP

[PHP]idiorm #10 カラム名取得

public function get_columns($table_name,$ignore_clumns = null)
{
    $result = ORM::for_table('information_schema.columns')
    ->select('column_name')
    ->where('table_name',$table_name ) 
    ->order_by_expr('ordinal_position')
    ->find_array();
    $columns = array_column($result,'column_name');
    if(empty($columns)){
        $result = ORM::raw_execute("show columns from {$table_name}");
        $statement = ORM::get_last_statement();
        $rows = [];
        $columns = [];
        while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
            $columns[] = $row['Field'];
        }
    }
    if(!empty($ignore_clumns)){
        $columns = array_diff($columns,$ignore_clumns);
    }
    return $columns;
}

[PHP]idiorm #9 create

$record = ORM::for_table('posts')->create();
$record->number = $post['number'];
$record->name = $post['name'];
$record->save();

[WordPress]カスタム投稿タイプ記事一覧にタクソノミー絞り込み機能を追加

functions.php

/**
 * WP_Termの配列の各要素にterm_ordersを設定する
 *
 * @param array $terms
 * 
 */
function set_parents_term_orders_to_terms(&$terms)
{
    if(empty($terms)){
        return;
    }
    foreach ($terms as $i => $term) {
        $terms[$i]->term_orders = [$term->term_order];
        if(!empty($term->parent)){
            $tmp = $term;
            while(!empty($tmp->parent)){
                $tmp_id = $tmp->term_id;
                foreach ($terms as $j => $term_) {
                    if($tmp->parent === $term_->term_id){
                        array_unshift($terms[$i]->term_orders,$term_->term_order);
                        $tmp = $term_;
                        break;
                    }
                }
                if($tmp_id === $tmp->term_id){
                    break;
                }
            }
        }
    }
}
/**
 * WP_Termの配列をterm_ordersに則ってソートする
 * set_parents_term_orders_to_terms を実行してから使用する
 *
 * @param array $terms
 * 
 */
function sort_terms_by_term_orders(&$terms)
{
    usort($terms,function($a,$b){
        $imax = max(count($a->term_orders),count($b->term_orders));
        for($i=0;$i<$imax;$i++){
            if(count($a->term_orders) <= $i){
                return -1;
            }
            if(count($b->term_orders) <= $i){
                return 1;
            }
            if($a->term_orders[$i] === $b->term_orders[$i]){
                continue;
            }
            return ($a->term_orders[$i] > $b->term_orders[$i]) ? 1 : -1;
        }
    });
}
/**
 * 管理画面記事一覧カテゴリフィルタ追加
 */
function add_post_taxonomy_restrict_filter()
{
global $post_type;
if($post_type === 'カスタム投稿タイプ'){
?>
<select name="タクソノミー">
<option value="">カテゴリーを指定する</option>
<?php
$terms = get_terms('タクソノミー');
/*
プラグイン「Category Order and Taxonomy Terms Order」導入済みの場合
set_parents_term_orders_to_terms($terms);
sort_terms_by_term_orders($terms);
*/
foreach ($terms as $term) { ?>
<option value="<?php echo $term->slug; ?>"><?php echo $term->name; ?></option>
<?php } ?>
</select>
<?php
}
}
add_action('restrict_manage_posts', 'add_post_taxonomy_restrict_filter');

[PHP]CORS

public static function set_header_for_cors($domain = '*')
{
    header("Access-Control-Allow-Origin: ".$domain);
    header("Access-Control-Allow-Methods: GET, POST");
    header("Access-Control-Allow-Headers: Accept, Content-Disposition, Content-Type, Content-Length, Accept-Encoding");
}

[WordPress]不要ページを無効化

/**
 * WordPress標準の不要ページを無効化
 * @param WP_Query $query
 */
function force_404($query)
{
    if(is_attachment() || is_author() || is_search() || is_date() || is_tag()){
        /** 404ページを返す */
        $query->set_404();
        /** 404コードを返す */
        status_header(404);
        /** キャッシュの無効化 */
        nocache_headers();
	}
}
add_filter('parse_query', 'force_404');

[WordPress]不要なデフォルトmeta削除

/** meta name="generator" を非表示にする */
remove_action('wp_head', 'wp_generator');
/** EditURIを非表示にする */
remove_action('wp_head', 'rsd_link');
/** wlwmanifestを非表示にする */
remove_action('wp_head', 'wlwmanifest_link');
/** 短縮URLを非表示にする */
remove_action('wp_head', 'wp_shortlink_wp_head');
/** 絵文字用JS・CSSを非表示にする */
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');
/** 投稿の RSS フィードリンクを非表示にする */
remove_action('wp_head', 'feed_links', 2);
/** コメントフィードを非表示にする */
remove_action('wp_head', 'feed_links_extra', 3);
/** dns-prefetchを非表示にする */
add_filter('wp_resource_hints', 'remove_dns_prefetch', 10, 2);
/**
 * @param array $hints
 * @param string $relation_type
 * 
 * @return array
 */
function remove_dns_prefetch($hints, $relation_type)
{
    if($relation_type === 'dns-prefetch'){
        return array_diff(wp_dependencies_unique_hosts(), $hints);
    }
    return $hints;
}
/** wp versionを非表示にする */
remove_action('wp_head','rest_output_link_wp_head');
/** oEmbedを非表示にする */
remove_action('wp_head','wp_oembed_add_discovery_links');
/** rel="next" rel="prev" を非表示にする */
remove_action('wp_head','adjacent_posts_rel_link_wp_head');
/** <meta name='robots' content='max-image-preview:large' />を非表示にする */
remove_filter('wp_robots','wp_robots_max_image_preview_large');

[PHP]idiorm #8 save

$record = ORM::for_table($this->table_name)->where('id', $id)->find_one();
if(empty($record)){
    return false;
}
foreach ($data as $key => $value){
    $record->set($key,$value);
}
$result = $record->save();

[PHP]idiorm #7 raw_execute + AES_ENCRYPT

define('DB_ENCRYPT_KEY','aabbccddeeff');
require_once __DIR__ . '/idiorm.php';
ORM::configure('mysql:host=localhost;dbname=xxxx');
ORM::configure('username', 'yyy');
ORM::configure('password', 'zzz');
ORM::configure('driver_options', [
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
]);

$query = "INSERT INTO {$table_name}(`e_id`,`description`) VALUES(:e_id,AES_ENCRYPT(:description,'xxyyzz'))";
result = ORM::for_table('users')->raw_execute($query,['e_id'=>1,'description'=>'あいうえお']);

$query = "UPDATE {$table_name} SET `description`=AES_ENCRYPT(:description,'xxyyzz') WHERE `e_id` = :e_id";
result = ORM::for_table('users')->raw_execute($query,['e_id'=>1,'description'=>'あいうえお']);

[Laravel]AES_ENCRYPT

$result = DB::table('users')->insert([
                ['email' => \DB::raw("AES_ENCRYPT('{$xxx}',SHA2('".env('DB_ENCRYPT_KEY')."',512))"), 'token' => \DB::raw("AES_ENCRYPT('{$yyy}',SHA2('".env('DB_ENCRYPT_KEY')."',512))")]
            ]);