WEBLOG
WordPress > プラグイン
弊社ではプラグインを絞り込んで導入しています。
プラグイン自体を否定しているわけではなく、公開後は使用しませんが開発時に使用するプラグインがあります。
とても重宝しているプラグインなので紹介します。
こちらは、ルーティングに関する開発時には、この上なく便利なプラグインです。
https://wordpress.org/plugins/rewrite-rules-inspector/
URLを入力して「Filter」をクリックすると、リライトルールが優先順に表示されます。デバッグ時は、これがあるととても助かります。
Flash(リライトルールを更新) されてない場合一目で分かり、右のFlashボタンを押すだけ。
add_rewrite_rule($rule, $rewrite); を記述する際もRuleとRewriteそのまま記載されているので参考になります。
CSVで一括インポートができるプラグインです。
弊社では、リニューアルの際のデータ移行に使用しています(有料版)。
画像も wp-posts に attatchment として insert してくれたり、Advanced Custom Fields PRO の更新やタクソノミーの更新も一括で実行してくれます。Advanced Custom Fields PROとの相性は抜群でリピートフィールドにも対応。
ドラッグだけで、各フィールドにCSVの表示されている値を入れてくれ、そのまま wp-postmeta にも追記してくれます。
しかし、いくつか難点もあります。
それでもデータ移行に関して代替策がないため使用しています。
こうすることで移行データを管理しています。
ini_set('display_errors', 1);
error_reporting(E_ALL);
$this_post_type = 'xx';
define('ROOTREALPATH', '/home/xxx/www/yyy');
include_once ROOTREALPATH . '/pp/wp-load.php';
include_once ROOTREALPATH . '/export/CsvDownload.php';
$CsvDownload = new CsvDownload();
$CsvDownload->convert_encoding_to = 'UTF-8';
$prefix = 'wp_csv_for_export_' . 'xx';
$replace = [
[
'from' => 'https://www.aaa/',
'to' => 'https://xxx.bbb/'
],
[
'from' => 'ppp',
'to' => 'qqq'
],
];
function oo_export_replace($subject)
{
global $replace;
return str_replace(array_column($replace, 'from'), array_column($replace, 'to'), $subject);
}
/* get_posts */
$wp_export_arr = [];
$args = [
'post_type' => $this_post_type,
'posts_per_page' => -1
];
$the_query = new WP_Query($args);
if ($the_query->have_posts()) {
while ($the_query->have_posts()) {
$arr = [];
$the_query->the_post();
$this_post_id = $the_query->post->ID;
$arr['post_title'] = $the_query->post->post_title;
$arr['post_name'] = $the_query->post->post_name;
$arr['post_status'] = $the_query->post->post_status;
$arr['post_date'] = $the_query->post->post_date;
// acf
$arr['acf_yyy'] = get_field('acf_yyy', $this_post_id);
$wp_export_arr[] = $arr;
}
}
/* csv */
var_dump($wp_export_arr);
// $CsvDownload->output( $wp_export_arr, $prefix );
生成したら、すぐサーバーから削除。git管理すれば、不足している値などすぐに足せます。
※ 途中出てくる CsvDownlad は、弊社制作のClass(後述)。
結構便利です。
※ laravel でも namespace をつけて使っています。
class CsvDownload
{
public $convert_encoding_to = 'SJIS';
/**
* output
*/
public function output($arr, $file_name_prefix = '', $field_line_from_key = true)
{
$csv_filename = self::createFilename($file_name_prefix);
header('Content-type: text/html; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $csv_filename . '"');
header('Content-Type: application/octet-stream');
if ($field_line_from_key && is_array($arr[0])) {
$field_names = array_keys($arr[0]);
$data = self::makeLine($field_names);
$converted_field_names = mb_convert_encoding($data, $this->convert_encoding_to, 'UTF-8');
echo $converted_field_names;
}
foreach ($arr as $v) {
$data = self::makeLine($v);
$converted_csv_data = mb_convert_encoding($data, $this->convert_encoding_to, 'UTF-8');
echo $converted_csv_data;
}
mb_http_output('pass'); //バイナリデータ誤認識&コード変換防止
}
/**
* makeLine
*/
private static function makeLine($values)
{
foreach ($values as $i => $v) {
if (is_array($v) || is_object($v)) {
$v = var_export($v, true);
}
if (
(strpos($v, ',') !== false) ||
(strpos($v, '"') !== false) ||
(strpos($v, ' ') !== false) ||
(strpos($v, "\t") !== false) ||
(strpos($v, "\n") !== false) ||
(strpos($v, "\r") !== false)
) {
$values[$i] = '"' . str_replace('"', '""', $v) . '"';
}
}
return implode(',', $values) . "\n";
}
/**
* createFilename
*/
private static function createFilename($prefix = '')
{
$filename = '';
$filename .= $prefix ? $prefix . '_' : '';
$filename .= date('Ymd_His');
$filename .= '.csv';
return $filename;
}
}