VK All in One Expansion Unit - Version 9.76.1.0

Version Description

[ Bug Fix ][ Custom Post Type Manager ] Fix translate [ Bug Fix ][ CSS Optimize lib ] library Update [ Bug Fix ] Fix load Font Awesome Files on WordPress.com [ Other ][ BreadCrumb ] Update composer library 0.2.2

Download this release

Release Info

Developer kurudrive
Plugin Icon 128x128 VK All in One Expansion Unit
Version 9.76.1.0
Comparing to
See all releases

Code changes from version 9.76.0.1 to 9.76.1.0

inc/post-type-manager/package/class.post-type-manager.php CHANGED
@@ -365,17 +365,24 @@ if ( ! class_exists( 'VK_Post_Type_Manager' ) ) {
365
  // REST API を使用するかどうか.
366
  $rest_api_true = ( empty( $taxonomy['rest_api'] ) ) ? false : true;
367
 
 
 
 
 
368
  $args = array(
369
  'hierarchical' => $hierarchical_true,
370
  'update_count_callback' => '_update_post_term_count',
371
- 'label' => $taxonomy['label'],
372
- 'singular_label' => $taxonomy['label'],
373
  'public' => true,
374
  'show_ui' => true,
375
  'show_in_rest' => $rest_api_true,
376
  'show_admin_column' => true,
377
  );
378
 
 
 
 
 
379
  register_taxonomy(
380
  $taxonomy['slug'],
381
  $post_type_id,
@@ -401,7 +408,9 @@ if ( ! class_exists( 'VK_Post_Type_Manager' ) ) {
401
  add_action( 'admin_init', array( $this, 'add_cap_post_type_manage' ) );
402
  add_action( 'save_post', array( $this, 'save_cf_value' ) );
403
  add_action( 'admin_menu', array( $this, 'add_meta_box' ) );
404
- add_action( 'after_setup_theme', array( $this, 'add_post_type' ), 0 );
 
 
405
  add_action( 'admin_notices', array( $this, 'add_post_notice' ) );
406
  }
407
 
365
  // REST API を使用するかどうか.
366
  $rest_api_true = ( empty( $taxonomy['rest_api'] ) ) ? false : true;
367
 
368
+ $labels = array(
369
+ 'name' => $taxonomy['label'],
370
+ );
371
+
372
  $args = array(
373
  'hierarchical' => $hierarchical_true,
374
  'update_count_callback' => '_update_post_term_count',
375
+ 'labels' => $labels,
 
376
  'public' => true,
377
  'show_ui' => true,
378
  'show_in_rest' => $rest_api_true,
379
  'show_admin_column' => true,
380
  );
381
 
382
+ if ( $rest_api_true ) {
383
+ $args['rest_base'] = $taxonomy['slug'];
384
+ }
385
+
386
  register_taxonomy(
387
  $taxonomy['slug'],
388
  $post_type_id,
408
  add_action( 'admin_init', array( $this, 'add_cap_post_type_manage' ) );
409
  add_action( 'save_post', array( $this, 'save_cf_value' ) );
410
  add_action( 'admin_menu', array( $this, 'add_meta_box' ) );
411
+ // after_setup_theme では 6.0 頃から翻訳があたらなくなる .
412
+ // init でも 0 などなど早めのpriority 指定しないと投稿タイプに連動するウィジェットエリアが動作しない .
413
+ add_action( 'init', array( $this, 'add_post_type' ), 0 );
414
  add_action( 'admin_notices', array( $this, 'add_post_notice' ) );
415
  }
416
 
inc/vk-css-optimize/package/class-css-tree-shaking.php CHANGED
@@ -7,252 +7,376 @@ If you want to change this file, please change the original file.
7
  /**
8
  * CSS Simple Tree Shaking
9
  *
10
- * Description: CSS 定義データから未使用の id, class, tag に関する定義を取り除き縮小化します
11
  *
12
- * Version: 1.0.2
13
  * Author: enomoto@celtislab
14
  * Modefied: Vektor:Inc.
15
  * Author URI: https://celtislab.net/
16
  * License: GPLv2
 
17
  */
18
- namespace celtislab;
19
 
20
  defined( 'ABSPATH' ) || exit;
21
 
 
22
  class CSS_tree_shaking {
23
 
24
- private static $cmplist;
25
- private static $varlist;
26
- private static $jsaddlist;
27
- private static $atrule_data;
 
28
  function __construct() {}
29
 
30
- // アットルール一時退避( @{md5key} に置き換えておく)
31
- private static function atrule_store( $css ) {
32
- $pattern = array(
33
- '|(@(\-[\w]+\-)?keyframes.+?\{)(.+?\})\}|',
34
- '|(@(\-[\w]+\-)?supports.+?\{)(.+?\})\}|',
35
- '|(@(\-[\w]+\-)?media.+?\{)(.+?\})\}|',
36
- '|@[^;\{]+?;|',
37
- '|@[^;\{]+?\{(.+?)\}|',
38
- );
39
- foreach ( $pattern as $atrule ) {
40
- $css = preg_replace_callback(
41
- $atrule,
42
- function( $matches ) {
43
- $key = 'AR_' . md5( $matches[0] );
44
- $data = $matches[0];
45
- if ( ! empty( $matches[3] ) ) {
46
- $incss = self::atrule_store( $matches[3] );
47
- $incss = self::tree_shaking( $incss );
48
- $data = ( ! empty( $incss ) ) ? $matches[1] . $incss . '}' : '';
49
- }
50
- self::$atrule_data[ $key ] = $data;
51
- return '@{' . $key . '}';
52
- },
53
- $css
54
- );
55
- }
56
- return $css;
57
- }
58
 
59
- // アットルール復元
60
- private static function atrule_restore( $css ) {
61
- $css = preg_replace_callback(
62
- '|@\{(.+?)\}|',
63
- function( $matches ) {
64
- $data = $matches[0];
65
- $key = $matches[1];
66
- if ( strpos( $key, 'AR_' ) !== false ) {
67
- $data = ( ! empty( self::$atrule_data[ $key ] ) ) ? self::atrule_restore( self::$atrule_data[ $key ] ) : '';
68
- }
69
- return $data;
70
- },
71
- $css
72
- );
73
- return $css;
74
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
- // CSS から未使用の id, class, tag を含む定義を削除
77
- private static function tree_shaking( $css ) {
78
- $ncss = preg_replace_callback(
79
- '|(.+?)(\{.+?\})|u',
80
- function( $matches ) {
81
- $data = $matches[0];
82
- $sel = $matches[1];
83
- if ( $sel !== '@' ) {
84
- $pattern = array(
85
- 'id' => '|(#)([\w\-\\%]+)|u',
86
- 'class' => '|(\.)([\w\-\\%]+)|u',
87
- 'tag' => '/(^|[,\s>\+~\(\)\]\|])([\w\-]+)/iu',
88
- );
89
 
90
- $slist = array_map( 'trim', explode( ',', $sel ) );
91
- foreach ( $slist as $s ) {
92
- // selector の判定条件から :not(...) を除外 ($_s で判定して削除時は $s で行う)
93
- $_s = $s;
94
- if ( preg_match( '/:not\(.+?\)/', $s ) ) {
95
- $_s = preg_replace( '/:not\(.+?\)/', '', $s );
96
- }
97
- foreach ( array( 'id', 'class', 'tag' ) as $item ) {
98
- if ( ! empty( $_s ) && preg_match_all( $pattern[ $item ], $_s, $match ) ) {
99
- foreach ( $match[2] as $val ) {
100
- // $jsaddlist 登録名が一部でも含まれていれば削除しない(処理を簡略化するため上位層のセレクタのみで判定)
101
- if ( in_array( $val, self::$jsaddlist ) ) {
102
- break;
103
- }
104
 
105
- // $cmplist 登録名に含まれていないものが一つでもあれば削除
106
- if ( ! preg_match( '/^[0-9]+/', $val ) && ! in_array( $val, self::$cmplist[ $item ] ) ) {
107
- $sel = preg_replace( '/(' . preg_quote( $s ) . ')(,|$)/u', '$2', $sel, 1 );
108
- $s = '';
109
- break;
110
- }
111
- }
112
- }
113
- }
114
- }
115
- $sel = preg_replace( '/,+/su', ',', $sel );
116
- $sel = preg_replace( '/\s+/su', ' ', $sel );
117
- $sel = trim( $sel );
118
- $sel = trim( $sel, ',' );
119
- $data = ( ! empty( $sel ) ) ? $sel . $matches[2] : '';
120
- }
121
- return $data;
122
- },
123
- $css
124
- );
125
- return $ncss;
126
- }
 
 
 
127
 
128
- // 未使用変数定義の削除(tree_shaking 実行後に実施する必要あり)
129
- public static function tree_shaking4var( $css ) {
130
- $ncss = $css;
131
- self::$varlist = array();
132
- if ( preg_match_all( '/var\((\-\-.+?)\)/iu', $css, $vmatchs ) ) {
133
- foreach ( $vmatchs[1] as $v ) {
134
- $v = trim( $v );
135
- if ( ! in_array( $v, self::$varlist ) ) {
136
- self::$varlist[] = $v;
137
- }
138
- }
139
- }
140
- // url() 定義時は文字列中に ; がそのまま含まれている場合があるの分けて処理
141
- $ncss = preg_replace_callback(
142
- '|(\-\-[\w\-]+?):url\(.+?\);?|u',
143
- function( $matches ) {
144
- $data = $matches[0];
145
- if ( ! in_array( trim( $matches[1] ), self::$varlist ) ) {
146
- $data = '';
147
- }
148
- return $data;
149
- },
150
- $ncss
151
- );
152
- $ncss = preg_replace_callback(
153
- '|(\-\-[\w\-]+?):(.+?)([;\}])|u',
154
- function( $matches ) {
155
- $data = $matches[0];
156
- if ( ! preg_match( '|url\(|u', $matches[2] ) && ! in_array( trim( $matches[1] ), self::$varlist ) ) {
157
- $data = ( $matches[3] === '}' ) ? '}' : '';
158
- }
159
- return $data;
160
- },
161
- $ncss
162
- );
163
 
164
- return $ncss;
165
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
 
167
- /*
168
- =============================================================
169
- * CSS 内のコメント、改行、空白等を削除するだけのシンプルな縮小化
170
- */
171
- public static function simple_minify( $css ) {
172
- $res = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css );
173
- if ( ! empty( $res ) ) {
174
- $css = $res;
175
- $css = str_replace( array( "\r", "\n" ), '', $css );
176
- $css = str_replace( "\t", ' ', $css );
177
- $css = preg_replace( '/\s+/su', ' ', $css );
178
- $css = preg_replace( '/\s([\{\}:=,\)*\/;>])/', '$1', $css );
179
- $css = preg_replace( '/([\{\}:=,\(*\/!;>])\s/', '$1', $css );
180
- }
181
- return $css;
182
- }
183
 
184
- /*
185
- =============================================================
186
- * CSS 内の未使用 id, class, tag に関する定義を取り除く縮小化
187
- */
188
- public static function extended_minify( $css, $html, $jsaddlist = array() ) {
189
- self::$atrule_data = array();
190
- self::$jsaddlist = $jsaddlist; // JS によりDOMロード後に追加される ID や class 等が除外されなくするための名前の事前登録用
191
- $inidata = array(
192
- 'id' => array(),
193
- 'class' => array(
194
- 'device-mobile',
195
- 'header_scrolled',
196
- 'active',
197
- 'menu-open',
198
- 'vk-mobile-nav-menu-btn',
199
- 'vk-mobile-nav-open',
200
- 'vk-menu-acc-active',
201
- 'acc-parent-open',
202
- 'acc-btn',
203
- 'acc-btn-open',
204
- 'acc-btn-close',
205
- 'acc-child-open',
206
- 'carousel-item-left',
207
- 'carousel-item-next',
208
- 'carousel-item-right',
209
- 'carousel-item-prev',
210
- 'form-control',
211
- 'btn',
212
- 'btn-primary',
213
- '.vk_post_imgOuter a:hover .card-img-overlay::after',
214
- ),
215
- 'tag' => array(
216
- 'html',
217
- 'head',
218
- 'body',
219
- 'title',
220
- 'style',
221
- 'meta',
222
- 'link',
223
- 'script',
224
- 'noscript',
225
- ),
226
- );
227
- $inidata = apply_filters( 'css_tree_shaking_exclude', $inidata );
228
- $pattern = array(
229
- 'id' => '|[\s\t\'"]id\s?=\s?[\'"](.+?)[\'"]|u',
230
- 'class' => '|[\s\t\'"]class\s?=\s?[\'"](.+?)[\'"]|u',
231
- 'tag' => '|<([\w\-]+)|iu',
232
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
 
234
- if ( empty( self::$cmplist['parse'] ) ) {
235
- self::$cmplist['parse'] = true;
236
- foreach ( array( 'id', 'class', 'tag' ) as $item ) {
237
- self::$cmplist[ $item ] = $inidata[ $item ];
238
- if ( preg_match_all( $pattern[ $item ], $html, $matches ) ) {
239
- foreach ( $matches[1] as $val ) {
240
- $arr = array_map( 'trim', explode( ' ', $val ) );
241
- foreach ( $arr as $dt ) {
242
- if ( ! empty( $dt ) && ! in_array( $dt, self::$cmplist[ $item ] ) ) {
243
- self::$cmplist[ $item ][] = $dt;
244
- }
245
- }
246
- }
247
- }
248
- }
249
- }
250
- $css = self::simple_minify( $css );
251
- $css = self::atrule_store( $css );
252
- $css = self::tree_shaking( $css );
253
- $css = self::atrule_restore( $css );
254
- // 変数のTreeshaking は必要なのに除外されてしまうので停止
255
- // $css = self::tree_shaking4var( $css );
256
- return $css;
257
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
  }
7
  /**
8
  * CSS Simple Tree Shaking
9
  *
10
+ * Description: CSS tree shaking minify library
11
  *
12
+ * Version: 2.1.0
13
  * Author: enomoto@celtislab
14
  * Modefied: Vektor:Inc.
15
  * Author URI: https://celtislab.net/
16
  * License: GPLv2
17
+ *
18
  */
19
+ namespace celtislab\v2_1;
20
 
21
  defined( 'ABSPATH' ) || exit;
22
 
23
+
24
  class CSS_tree_shaking {
25
 
26
+ private static $cmplist;
27
+ private static $jsaddlist;
28
+
29
+ const SHAKING_PATTERN = '#@(?<pref>\-[\w]+\-)?(?<atname>((keyframes|supports|media|container|layer)[^\{]+?))\{(?<atstyle>.*?\})\}|@([^;\{\}]+?)(;|\{.*?\})|(?<sel>.+?)\{(?<pv>.+?)\}#u';
30
+
31
  function __construct() {}
32
 
33
+ //上書きカスタムCSS(simple_minify済)をセレクタ(md5),プロパティ,値の配列にする
34
+ //※セレクタが複数の場合も考慮して完全同一記述のセレクタのみを簡潔に重複判定出来るよう md5 を使用
35
+ public static function create_csslist($cusomcss, &$csslist) {
36
+ if(preg_match_all( self::SHAKING_PATTERN, $cusomcss, $matches, PREG_SET_ORDER)){
37
+ foreach ($matches as $style) {
38
+ if(!empty($style['atname'])){
39
+ $atkey = md5(trim($style['pref'] . $style['atname']));
40
+ if(preg_match_all( '#(?<sel>.+?)\{(?<pv>.+?)\}#u', $style['atstyle'], $atcustoms, PREG_SET_ORDER)){
41
+ foreach ($atcustoms as $subitem) {
42
+ self::_create_csslist($atkey, $subitem['sel'], $subitem['pv'], $csslist);
43
+ }
44
+ }
45
+ } elseif(!empty($style['sel'])) {
46
+ self::_create_csslist(0, $style['sel'], $style['pv'], $csslist);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ private static function _create_csslist($key, $sel, $pv, &$csslist) {
52
+ $sel = md5(trim($sel));
53
+ $pv = array_map("trim", preg_split("|[:;]|", $pv));
54
+ $pcnt= count($pv);
55
+ for($i=0; $i<$pcnt; $i += 2){
56
+ if(empty($pv[$i]))
57
+ break;
58
+ $csslist[ $key ][ $sel ][ $pv[$i] ] = $pv[$i+1];
59
+ }
60
+ }
61
 
62
+ //selector 内の :not :where :is :has 疑似クラスを退避(カッコ内の,区切りによるセレクタ誤解析回避のため)
63
+ public static function evacuate_pseudo($selector, &$temp) {
64
+ $newsel = '';
65
+ $ofset = 0;
66
+ $maxlen = strlen($selector);
67
+ while($ofset < $maxlen){
68
+ if(preg_match('#(:not|:where|:is|:has)\(#u', substr($selector, $ofset), $omatch)){
69
+ $open = strpos($selector, $omatch[0], $ofset) + strlen($omatch[0]);
70
+ if($ofset < $open){
71
+ $newsel .= substr($selector, $ofset, $open - $ofset);
72
+ }
73
+ $ofset = $open;
74
+ $depth = 1;
75
+ while($depth > 0){
76
+ if(preg_match('#(\(|\))#u', substr($selector, $ofset), $cmatch)){
77
+ $ofset = strpos($selector, $cmatch[0], $ofset) + strlen($cmatch[0]);
78
+ if($cmatch[1] == '('){
79
+ $depth++;
80
+ } else{
81
+ $depth--;
82
+ }
83
+ if($depth === 0){
84
+ $replace = substr($selector, $open, $ofset - $open - 1);
85
+ $pskey = md5($replace);
86
+ $temp[$pskey] = $replace;
87
+ $newsel .= $pskey . ')';
88
+ }
89
+ } else {
90
+ $newsel .= substr($selector, $ofset);
91
+ $ofset = $maxlen;
92
+ break;
93
+ }
94
+ }
95
+ } else {
96
+ $newsel .= substr($selector, $ofset);
97
+ break;
98
+ }
99
+ }
100
+ return $newsel;
101
+ }
102
 
103
+ //selector 内の :not :where :is :has 疑似クラスを復元
104
+ public static function restore_pseudo($selector, &$temp) {
105
+ if(!empty($temp)){
106
+ $selector = preg_replace_callback( '#(:not|:where|:is|:has)\((.*?)\)#u', function($match) use(&$temp) {
107
+ $kv = $match[2];
108
+ if(!empty($kv) && isset($temp[ $kv ])){
109
+ $kv = $temp[ $kv ];
110
+ }
111
+ return $match[1] . '(' . $kv . ')';
112
+ }, $selector);
113
+ }
114
+ return $selector;
115
+ }
116
 
117
+ //CSS から未使用の id, class, tag を含む定義を削除
118
+ private static function tree_shaking($css, $customcsslist=array(), $atkey='') {
119
+ $ncss = preg_replace_callback( self::SHAKING_PATTERN, function($mstyle) use(&$customcsslist, &$atkey) {
120
+ $data = $mstyle[0];
121
+ if(!empty($mstyle['atname'])){
122
+ $atkey = md5(trim($mstyle['pref'] . $mstyle['atname']));
123
+ $atcss = self::tree_shaking( $mstyle['atstyle'], $customcsslist, $atkey );
124
+ $atkey = ''; //key clear
125
+ $data = (!empty($atcss))? '@' . trim($mstyle['pref'] . $mstyle['atname']) . '{' . $atcss . '}' : '';
 
 
 
 
 
126
 
127
+ } elseif(!empty($mstyle['sel'])) {
128
+ $sel = $mstyle['sel'];
129
+ $pv = $mstyle['pv'];
130
+ if(!empty($customcsslist)){
131
+ //tree shaking 前に上書きカスタムCSSとの重複あれば該当プロパティを削除
132
+ $atkey = (!empty($atkey))? $atkey : 0;
133
+ $skey = md5(trim($sel));
134
+ if(!empty($customcsslist[$atkey][$skey])){
135
+ $_pv = array_map("trim", preg_split("|[:;]|", $pv));
136
+ $pcnt= count($_pv);
137
+ for($i=0; $i<$pcnt; $i += 2){
138
+ if(!empty($_pv[$i]) && isset( $customcsslist[ $atkey ][ $skey ][ $_pv[$i] ] )){
139
+ $pv = preg_replace( '/(^|;|\s)(' . preg_quote($_pv[$i]) . ')\s?:.*?(url\([^\)]+?\).*?)?(;|$)/u', '$1', $pv, 1 );
140
+ }
141
+ }
142
+ if(!empty($pv)){
143
+ $pv = preg_replace('/\s+/su', ' ', $pv);
144
+ $pv = trim($pv);
145
+ }
146
+ }
147
+ }
148
+ $pattern = array( 'id' => '|(#)([\w\-\\%]+)|u',
149
+ 'class' => '|(\.)([\w\-\\%]+)|u',
150
+ 'tag' => '/(^|[,\s>\+~\(\)\]\|])([\w\-]+)/iu',
151
+ );
152
 
153
+ $pseudo = array();
154
+ $sel = self::evacuate_pseudo($sel, $pseudo);
155
+ $slist = array_map("trim", explode(',', $sel));
156
+ foreach ($slist as $s) {
157
+ //selector の判定条件から :not :where :is :has を除外 ($_s で判定して削除時は $s で行う)
158
+ $_s = $s;
159
+ foreach (array(':not',':where',':is',':has') as $psd) {
160
+ if(strpos($_s, $psd) !== false){
161
+ $_s = preg_replace("/$psd\(.+?\)/", '', $_s );
162
+ }
163
+ }
164
+ foreach (array('id','class','tag') as $item) {
165
+ if(!empty($_s) && preg_match_all( $pattern[$item], $_s, $match)){
166
+ foreach ($match[2] as $v) {
167
+ //$jsaddlist 登録名が含まれていれば削除しない(処理を簡略化するため上位層のセレクタのみで判定)
168
+ if(isset(self::$jsaddlist[$v]))
169
+ break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
 
171
+ //$cmplist 登録名に含まれていなければ削除
172
+ $delfg = false;
173
+ if(!isset(self::$cmplist[$item][$v]) && !preg_match('/^[0-9]+/', $v)){
174
+ $delfg = true;
175
+ } elseif($item === 'tag' && preg_match('#\[type\s?=\s?[\'"](.+?)[\'"]#', $_s, $type)){
176
+ if(!isset(self::$cmplist['type'][$type[1]])){
177
+ $delfg = true;
178
+ }
179
+ }
180
+ if($delfg){
181
+ $sel = preg_replace( '/(' . preg_quote($s) . ')(,|$)/u', '$2', $sel, 1 );
182
+ $_s = '';
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ }
188
+ if(!empty($_s)){
189
+ // id / css 属性セレクタ限定の部分マッチチェック
190
+ if(preg_match_all( '#\[(?<attr>class|id)(?<type>\^|\$|\*)?=["\'](?<str>[\w\-]+?)["\'].*?\]#', $_s, $smatch, PREG_SET_ORDER)){
191
+ foreach ($smatch as $item) {
192
+ $attr = $item['attr'];
193
+ $type = $item['type'];
194
+ if($type == '^'){
195
+ $str = $type . $item['str'];
196
+ } elseif($type == '$'){
197
+ $str = $item['str'] . $type;
198
+ } elseif($type == '*'){
199
+ $str = $item['str'];
200
+ } else {
201
+ $str = '^' . $item['str'] . '$';
202
+ }
203
+ //属性セレクタにマッチしなければ削除 
204
+ if ( ($ret = strpos(self::$cmplist[ $attr . '_str' ], $str )) === false){
205
+ $sel = preg_replace( '/(' . preg_quote($s) . ')(,|$)/u', '$2', $sel, 1 );
206
+ $_s = '';
207
+ break;
208
+ }
209
+ }
210
+ }
211
+ }
212
+ }
213
+ $sel = self::restore_pseudo($sel, $pseudo);
214
 
215
+ if(!empty($sel)){
216
+ $sel = preg_replace('/,+/su', ',', $sel);
217
+ $sel = preg_replace('/\s+/su', ' ', $sel);
218
+ $sel = trim($sel);
219
+ $sel = trim($sel, ',');
220
+ }
221
+ $data = (!empty($sel) && !empty($pv))? $sel . '{'. $pv .'}' : '';
222
+ }
223
+ return $data;
224
+ }, $css);
225
+ return $ncss;
226
+ }
 
 
 
 
227
 
228
+ //未使用変数定義の削除(tree_shaking 実行後に実施する)
229
+ //CSSファイルが分割されていると使われている変数定義まで削除の可能性があるので amp-custom style に限定した使用を想定
230
+ public static function tree_shaking4var($css) {
231
+ $varlist = array();
232
+ if(preg_match_all( "/var\((\-\-[^\s\),]+?)[\s\),]/iu", $css, $vmatches)){
233
+ foreach ($vmatches[1] as $v) {
234
+ $v = trim($v);
235
+ if(!isset($varlist[$v])){
236
+ $varlist[$v] = 1;
237
+ }
238
+ }
239
+ }
240
+ //url() 定義時は文字列中に ; が含まれている場合あり
241
+ $pattern = '/(\-\-[\w\-]+?):.*?(url\([^\)]+?\).*?)?([;\}])/u';
242
+ $css = preg_replace_callback( $pattern, function($match) use(&$varlist) {
243
+ $vdef = $match[0];
244
+ $var = trim($match[1]);
245
+ if(!isset($varlist[ $var ])){
246
+ $vdef = ($match[3] === '}')? '}' : '';
247
+ }
248
+ return $vdef;
249
+ }, $css);
250
+ return $css;
251
+ }
252
+
253
+ /*=============================================================
254
+ * CSS 内のコメント、改行、空白等を削除するだけのシンプルな縮小化
255
+ */
256
+ public static function simple_minify( $css ) {
257
+ $css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css );
258
+ $css = str_replace(array("\r", "\n"), '', $css);
259
+ $css = str_replace("\t", ' ', $css);
260
+ $css = preg_replace('/\s+/su', ' ', $css);
261
+ $css = preg_replace('/\s([\{\}=,\)\/;>])/', '$1', $css);
262
+ $css = preg_replace('/([\{\}:=,\(\/!;])\s/', '$1', $css);
263
+ return $css;
264
+ }
265
+
266
+ /*=============================================================
267
+ * css(simple_minify済)の未使用 id, class, tag に関する定義を取り除き縮小化
268
+ */
269
+ public static function extended_minify($css, $html, $jsaddlist=array(), $varminify=false, $customcsslist=array()) {
270
+ self::$jsaddlist = array();
271
+ if(!empty($jsaddlist)){ //JS によりDOMロード後に追加される ID class 等が除外されなくするための名前の事前登録用
272
+ foreach ($jsaddlist as $tag) {
273
+ if(!isset(self::$jsaddlist[$tag])){
274
+ self::$jsaddlist[$tag] = 1;
275
+ }
276
+ }
277
+ }
278
+
279
+ if(empty(self::$cmplist['parse'])){
280
+ self::$cmplist['parse'] = true;
281
+ self::$cmplist['id_str'] = '';
282
+ self::$cmplist['class_str'] = '';
283
+
284
+ $inidata = array(
285
+ 'id' => array(),
286
+ 'class' => array(
287
+ 'device-mobile',
288
+ 'header_scrolled',
289
+ 'active',
290
+ 'menu-open',
291
+ 'vk-mobile-nav-menu-btn',
292
+ 'vk-mobile-nav-open',
293
+ 'vk-menu-acc-active',
294
+ 'acc-parent-open',
295
+ 'acc-btn',
296
+ 'acc-btn-open',
297
+ 'acc-btn-close',
298
+ 'acc-child-open',
299
+ 'carousel-item-left',
300
+ 'carousel-item-next',
301
+ 'carousel-item-right',
302
+ 'carousel-item-prev',
303
+ 'form-control',
304
+ 'btn',
305
+ 'btn-primary',
306
+ '.vk_post_imgOuter a:hover .card-img-overlay::after',
307
+ ),
308
+ 'tag' => array(
309
+ 'html',
310
+ 'head',
311
+ 'body',
312
+ 'title',
313
+ 'style',
314
+ 'meta',
315
+ 'link',
316
+ 'script',
317
+ 'noscript',
318
+ ),
319
+ );
320
+ $inidata = apply_filters( 'css_tree_shaking_exclude', $inidata );
321
 
322
+ foreach (array('id','class','tag') as $item) {
323
+ foreach ($inidata[$item] as $tag) {
324
+ if(!isset(self::$cmplist[$item][$tag])){
325
+ self::$cmplist[$item][$tag] = 1;
326
+ }
327
+ }
328
+ }
329
+ //HTML から使用している tag, id, class 抽出
330
+ $pattern = '#<style(?<catrb>.*?)>.*?<\/style|<script(?<satrb>.*?)>.*?<\/script|<!--.+?-->|<(?<tag>[\w\-]+)(?<tatrb>.*?)>#si';
331
+ if(preg_match_all( $pattern, $html, $items, PREG_SET_ORDER)){
332
+ foreach ($items as $item) {
333
+ $atrb = '';
334
+ if(!empty($item['tag'])){
335
+ if(!isset(self::$cmplist['tag'][$item['tag']])){
336
+ self::$cmplist['tag'][$item['tag']] = 1;
337
+ }
338
+ $atrb = $item['tatrb'];
339
+ //type ほぼ input のみと思われる
340
+ if(preg_match('#type\s?=\s?[\'"](.+?)[\'"]#u', $atrb, $type)){
341
+ if(!isset(self::$cmplist['type'][$type[1]])){
342
+ self::$cmplist['type'][$type[1]] = 1;
343
+ }
344
+ }
345
+ } elseif(!empty($item['catrb'])) {
346
+ $atrb = $item['catrb'];
347
+ } elseif(!empty($item['satrb'])) {
348
+ $atrb = $item['satrb'];
349
+ }
350
+ $atrb = trim($atrb);
351
+ if(!empty($atrb)){
352
+ if(preg_match('#id\s?=\s?[\'"](.+?)[\'"]#u', $atrb, $id)){
353
+ $arr = array_map("trim", explode(' ', $id[1]));
354
+ foreach($arr as $id){
355
+ $id = trim($id);
356
+ if(!isset(self::$cmplist['id'][$id])){
357
+ self::$cmplist['id'][$id] = 1;
358
+ self::$cmplist['id_str'] .= '^' . $id . '$';
359
+ }
360
+ }
361
+ }
362
+ if(preg_match('#class\s?=\s?[\'"](.+?)[\'"]#u', $atrb, $cls)){
363
+ $arr = array_map("trim", explode(' ', $cls[1]));
364
+ foreach($arr as $cls){
365
+ $cls = trim($cls);
366
+ if(!isset(self::$cmplist['class'][$cls])){
367
+ self::$cmplist['class'][$cls] = 1;
368
+ self::$cmplist['class_str'] .= '^' . $cls . '$';
369
+ }
370
+ }
371
+ }
372
+ }
373
+ }
374
+ }
375
+ }
376
+ $css = self::tree_shaking( $css, $customcsslist );
377
+ if($varminify){
378
+ $css = self::tree_shaking4var( $css );
379
+ }
380
+ return $css;
381
+ }
382
  }
inc/vk-css-optimize/package/class-vk-css-optimize.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /**
3
  * VK CSS Optimize
4
- *
5
  * @package VK CSS Optimize
6
  */
7
 
@@ -27,8 +27,7 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
27
  $options = self::get_css_optimize_options();
28
 
29
  if ( ! empty( $options['tree_shaking'] ) ) {
30
- add_action( 'get_header', array( __CLASS__, 'get_html_start' ), 2147483647 );
31
- add_action( 'shutdown', array( __CLASS__, 'get_html_end' ), 0 );
32
  }
33
 
34
  if ( ! empty( $options['preload'] ) ) {
@@ -38,6 +37,8 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
38
 
39
  /**
40
  * Customize Register
 
 
41
  */
42
  public static function customize_register( $wp_customize ) {
43
  global $prefix_customize_panel;
@@ -49,9 +50,7 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
49
  )
50
  );
51
 
52
- // Tree shaking
53
- //
54
-
55
  $wp_customize->add_setting(
56
  'tree_shaking_title',
57
  array(
@@ -67,7 +66,6 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
67
  'section' => 'css_optimize',
68
  'type' => 'text',
69
  'custom_title_sub' => '',
70
- // 'custom_html' => __( 'Move part of CSS and JS to the footer to improve display speed.', 'vk-all-in-one-expansion-unit' ),
71
  )
72
  )
73
  );
@@ -116,8 +114,7 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
116
  )
117
  );
118
 
119
- // Preload
120
- //
121
  $wp_customize->add_setting(
122
  'css_preload_title',
123
  array(
@@ -133,7 +130,6 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
133
  'section' => 'css_optimize',
134
  'type' => 'text',
135
  'custom_title_sub' => '',
136
- // 'custom_html' => __( 'Move part of CSS and JS to the footer to improve display speed.', 'vk-all-in-one-expansion-unit' ),
137
  )
138
  )
139
  );
@@ -186,6 +182,8 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
186
 
187
  /**
188
  * CSS Optimize Default Options
 
 
189
  */
190
  public static function get_css_optimize_options_default() {
191
  $vk_css_optimize_options_default = array(
@@ -197,10 +195,15 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
197
 
198
  /**
199
  * CSS Optimize Options
 
 
 
200
  */
201
  public static function get_css_optimize_options() {
202
 
203
  $theme_textdomain = wp_get_theme()->get( 'TextDomain' );
 
 
204
  if ( 'lightning' === $theme_textdomain || 'lightning-pro' === $theme_textdomain ) {
205
  $old_options = get_option( 'lightning_theme_options' );
206
  } elseif ( 'katawara' === $theme_textdomain ) {
@@ -212,12 +215,11 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
212
  $vk_css_optimize_options = get_option( 'vk_css_optimize_options' );
213
  $vk_css_optimize_options_default = self::get_css_optimize_options_default();
214
 
215
- // fall back function
216
- // Actualy other array exist but optimize_css is most important
217
  if ( ! isset( $vk_css_optimize_options['tree_shaking'] ) ) {
218
-
219
  if ( isset( $old_options['optimize_css'] ) ) {
220
- if ( $old_options['optimize_css'] === 'optomize-all-css' || $old_options['optimize_css'] === 'tree-shaking' ) {
221
  $vk_css_optimize_options['tree_shaking'] = 'active';
222
  } else {
223
  $vk_css_optimize_options['tree_shaking'] = '';
@@ -225,16 +227,19 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
225
  }
226
  }
227
 
 
228
  if ( ! isset( $vk_css_optimize_options['tree_shaking_class_exclude'] ) ) {
 
229
  if ( ! empty( $old_options['tree_shaking_class_exclude'] ) ) {
230
  $vk_css_optimize_options['tree_shaking_class_exclude'] = esc_html( $old_options['tree_shaking_class_exclude'] );
231
  }
232
  }
233
 
 
234
  if ( ! isset( $vk_css_optimize_options['preload'] ) ) {
235
-
236
  if ( isset( $old_options['optimize_css'] ) ) {
237
- if ( $old_options['optimize_css'] === 'optomize-all-css' ) {
238
  $vk_css_optimize_options['preload'] = 'active';
239
  } else {
240
  $vk_css_optimize_options['preload'] = '';
@@ -255,22 +260,24 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
255
 
256
  /**
257
  * Get HTML Document Start
 
 
 
258
  */
259
- public static function get_html_start() {
260
- ob_start( 'VK_CSS_Optimize::css_tree_shaking_buffer' );
261
- }
262
-
263
- /**
264
- * Get HTML Document End
265
- */
266
- public static function get_html_end() {
267
- if ( ob_get_length() ) {
268
- ob_end_flush();
269
  }
 
270
  }
271
 
272
  /**
273
  * Array of Apply Tree Shaking
 
 
 
274
  */
275
  public static function css_tree_shaking_array() {
276
  $vk_css_tree_shaking_array = array();
@@ -280,6 +287,9 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
280
 
281
  /**
282
  * Array of Apply Simple Minify
 
 
 
283
  */
284
  public static function css_simple_minify_array() {
285
  $vk_css_simple_minify_array = array();
@@ -291,35 +301,47 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
291
  * Change Buffer of HTML Document
292
  *
293
  * @param string $buffer Gotten HTML Document
 
294
  */
295
  public static function css_tree_shaking_buffer( $buffer ) {
296
 
297
  $options = self::get_css_optimize_options();
298
 
299
- // Lode Modules
 
300
  require_once dirname( __FILE__ ) . '/class-css-tree-shaking.php';
301
 
302
- // Load Arrays
 
303
  $vk_css_tree_shaking_array = self::css_tree_shaking_array();
304
  $vk_css_simple_minify_array = self::css_simple_minify_array();
305
 
306
- // CSS Tree Shaking.
 
 
 
 
307
  foreach ( $vk_css_tree_shaking_array as $vk_css_array ) {
308
 
309
- // WP File System で CSS ファイルを読み込み
310
- require_once ABSPATH . 'wp-admin/includes/file.php';
311
  $path_name = $vk_css_array['path'];
312
  if ( WP_Filesystem() ) {
313
  global $wp_filesystem;
 
314
  $css = $wp_filesystem->get_contents( $path_name );
315
  }
316
 
317
- $css = celtislab\CSS_tree_shaking::extended_minify( $css, $buffer );
 
 
 
318
  $buffer = str_replace(
319
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '?ver=' . $vk_css_array['version'] . '\' type=\'text/css\' media=\'all\' />',
320
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
321
  $buffer
322
  );
 
 
323
  $buffer = str_replace(
324
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '\' type=\'text/css\' media=\'all\' />',
325
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
@@ -328,24 +350,25 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
328
 
329
  }
330
 
331
- // CSS Simply Minify.
 
332
  foreach ( $vk_css_simple_minify_array as $vk_css_array ) {
333
 
334
- // WP File System で CSS ファイルを読み込み
335
- require_once ABSPATH . 'wp-admin/includes/file.php';
336
  $path_name = $vk_css_array['path'];
337
  if ( WP_Filesystem() ) {
338
  global $wp_filesystem;
339
  $css = $wp_filesystem->get_contents( $path_name );
340
  }
341
 
342
- $css = celtislab\CSS_tree_shaking::simple_minify( $css );
343
 
 
344
  $buffer = str_replace(
345
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '?ver=' . $vk_css_array['version'] . '\' type=\'text/css\' media=\'all\' />',
346
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
347
  $buffer
348
  );
 
349
  $buffer = str_replace(
350
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '\' type=\'text/css\' media=\'all\' />',
351
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
@@ -357,6 +380,15 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
357
  return $buffer;
358
  }
359
 
 
 
 
 
 
 
 
 
 
360
  public static function css_preload( $tag, $handle, $href, $media ) {
361
 
362
  $vk_css_tree_shaking_array = self::css_tree_shaking_array();
@@ -367,25 +399,30 @@ if ( ! class_exists( 'VK_CSS_Optimize' ) ) {
367
  $options = self::get_css_optimize_options();
368
 
369
  // tree shaking がかかっているものはpreloadから除外する
370
- // でないと表示時に一瞬崩れて結局実用性に問題があるため
371
  foreach ( $vk_css_tree_shaking_array as $vk_css_array ) {
372
  $exclude_handles[] = $vk_css_array['id'];
373
  }
374
 
375
  // Simple Minify がかかっているものはpreloadから除外する
376
- // でないと表示時に一瞬崩れて結局実用性に問題があるため
377
  foreach ( $vk_css_simple_minify_array as $vk_css_array ) {
378
  $exclude_handles[] = $vk_css_array['id'];
379
  }
380
 
 
381
  if ( ! empty( $options['preload_handle_exclude'] ) ) {
382
- $exclude_array = explode( ',', $options['preload_handle_exclude'] );
 
 
383
  $exclude_handles = array_merge( $exclude_array, $exclude_handles );
384
  }
385
 
386
  $exclude_handles = apply_filters( 'vk_css_preload_exclude_handles', $exclude_handles );
387
- // クリティカルじゃないCSS(tree shakingにかけているもの以外)をpreload
 
388
  if ( ! in_array( $handle, $exclude_handles ) ) {
 
389
  $tag = "<link rel='preload' id='" . $handle . "-css' href='" . $href . "' as='style' onload=\"this.onload=null;this.rel='stylesheet'\"/>\n";
390
  $tag .= "<link rel='stylesheet' id='" . $handle . "-css' href='" . $href . "' media='print' onload=\"this.media='all'; this.onload=null;\">\n";
391
  }
1
  <?php
2
  /**
3
  * VK CSS Optimize
4
+ *
5
  * @package VK CSS Optimize
6
  */
7
 
27
  $options = self::get_css_optimize_options();
28
 
29
  if ( ! empty( $options['tree_shaking'] ) ) {
30
+ add_filter( 'wp_using_themes', array( __CLASS__, 'get_html_start' ), 1, 1 );
 
31
  }
32
 
33
  if ( ! empty( $options['preload'] ) ) {
37
 
38
  /**
39
  * Customize Register
40
+ *
41
+ * @param object $wp_customize : wp custommize object .
42
  */
43
  public static function customize_register( $wp_customize ) {
44
  global $prefix_customize_panel;
50
  )
51
  );
52
 
53
+ // Tree shaking.
 
 
54
  $wp_customize->add_setting(
55
  'tree_shaking_title',
56
  array(
66
  'section' => 'css_optimize',
67
  'type' => 'text',
68
  'custom_title_sub' => '',
 
69
  )
70
  )
71
  );
114
  )
115
  );
116
 
117
+ // Preload.
 
118
  $wp_customize->add_setting(
119
  'css_preload_title',
120
  array(
130
  'section' => 'css_optimize',
131
  'type' => 'text',
132
  'custom_title_sub' => '',
 
133
  )
134
  )
135
  );
182
 
183
  /**
184
  * CSS Optimize Default Options
185
+ *
186
+ * @return array $vk_css_optimize_options_default .
187
  */
188
  public static function get_css_optimize_options_default() {
189
  $vk_css_optimize_options_default = array(
195
 
196
  /**
197
  * CSS Optimize Options
198
+ * 古いオプションやデフォルト値を結合して返す
199
+ *
200
+ * @return array $vk_css_optimize_options .
201
  */
202
  public static function get_css_optimize_options() {
203
 
204
  $theme_textdomain = wp_get_theme()->get( 'TextDomain' );
205
+
206
+ // CSS高速化を各テーマなどで保存していた頃の互換処理.
207
  if ( 'lightning' === $theme_textdomain || 'lightning-pro' === $theme_textdomain ) {
208
  $old_options = get_option( 'lightning_theme_options' );
209
  } elseif ( 'katawara' === $theme_textdomain ) {
215
  $vk_css_optimize_options = get_option( 'vk_css_optimize_options' );
216
  $vk_css_optimize_options_default = self::get_css_optimize_options_default();
217
 
218
+ // 新しい保存値に保存されていない場合.
 
219
  if ( ! isset( $vk_css_optimize_options['tree_shaking'] ) ) {
220
+ // 古い設定がある場合(互換処理).
221
  if ( isset( $old_options['optimize_css'] ) ) {
222
+ if ( 'optomize-all-css' === $old_options['optimize_css'] || 'tree-shaking' === $old_options['optimize_css'] ) {
223
  $vk_css_optimize_options['tree_shaking'] = 'active';
224
  } else {
225
  $vk_css_optimize_options['tree_shaking'] = '';
227
  }
228
  }
229
 
230
+ // 除外指定がない場合.
231
  if ( ! isset( $vk_css_optimize_options['tree_shaking_class_exclude'] ) ) {
232
+ // 古いoption値で除外指定が存在する場合(互換処理).
233
  if ( ! empty( $old_options['tree_shaking_class_exclude'] ) ) {
234
  $vk_css_optimize_options['tree_shaking_class_exclude'] = esc_html( $old_options['tree_shaking_class_exclude'] );
235
  }
236
  }
237
 
238
+ // プリロード指定がない場合.
239
  if ( ! isset( $vk_css_optimize_options['preload'] ) ) {
240
+ // 古いoption値でプリロード設定が存在する場合(互換処理).
241
  if ( isset( $old_options['optimize_css'] ) ) {
242
+ if ( 'optomize-all-css' === $old_options['optimize_css'] ) {
243
  $vk_css_optimize_options['preload'] = 'active';
244
  } else {
245
  $vk_css_optimize_options['preload'] = '';
260
 
261
  /**
262
  * Get HTML Document Start
263
+ *
264
+ * @param bool $is_use_themes .
265
+ * @return $is_use_themes;
266
  */
267
+ public static function get_html_start( $is_use_themes ) {
268
+ // template_redirect が呼ばれる前でのみ実行する .
269
+ if ( $is_use_themes && did_action( 'template_redirect' ) === 0 ) {
270
+ // バッファ開始.
271
+ ob_start( 'VK_CSS_Optimize::css_tree_shaking_buffer' );
 
 
 
 
 
272
  }
273
+ return $is_use_themes;
274
  }
275
 
276
  /**
277
  * Array of Apply Tree Shaking
278
+ * Tree Shaking にかけるCSS情報の配列
279
+ *
280
+ * @return array $vk_css_tree_shaking_array.
281
  */
282
  public static function css_tree_shaking_array() {
283
  $vk_css_tree_shaking_array = array();
287
 
288
  /**
289
  * Array of Apply Simple Minify
290
+ * 単純なCSS最小化にかけるCSS情報の配列
291
+ *
292
+ * @return array $vk_css_simple_minify_array
293
  */
294
  public static function css_simple_minify_array() {
295
  $vk_css_simple_minify_array = array();
301
  * Change Buffer of HTML Document
302
  *
303
  * @param string $buffer Gotten HTML Document
304
+ * @return $buffer
305
  */
306
  public static function css_tree_shaking_buffer( $buffer ) {
307
 
308
  $options = self::get_css_optimize_options();
309
 
310
+ // Lode Modules.
311
+ // Tree shaking モジュール読み込み .
312
  require_once dirname( __FILE__ ) . '/class-css-tree-shaking.php';
313
 
314
+ // Load CSS Arrays
315
+ // 軽量化するCSSの情報配列読み込み.
316
  $vk_css_tree_shaking_array = self::css_tree_shaking_array();
317
  $vk_css_simple_minify_array = self::css_simple_minify_array();
318
 
319
+ // WP_Filesystem() が使えるように読み込み.
320
+ require_once ABSPATH . 'wp-admin/includes/file.php';
321
+
322
+ // CSS Tree Shaking //////////////////////////////////////////// .
323
+
324
  foreach ( $vk_css_tree_shaking_array as $vk_css_array ) {
325
 
326
+ // 読み込むCSSファイルのパス.
 
327
  $path_name = $vk_css_array['path'];
328
  if ( WP_Filesystem() ) {
329
  global $wp_filesystem;
330
+ // CSSのファイルの中身を取得.
331
  $css = $wp_filesystem->get_contents( $path_name );
332
  }
333
 
334
+ // ree shaking を実行して再格納 .
335
+ $css = celtislab\v2_1\CSS_tree_shaking::extended_minify( celtislab\v2_1\CSS_tree_shaking::simple_minify( $css ), $buffer );
336
+
337
+ // ファイルで読み込んでいるCSSを直接出力に置換(バージョンパラメーターあり).
338
  $buffer = str_replace(
339
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '?ver=' . $vk_css_array['version'] . '\' type=\'text/css\' media=\'all\' />',
340
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
341
  $buffer
342
  );
343
+
344
+ // ファイルで読み込んでいるCSSを直接出力に置換(バージョンパラメーターなし).
345
  $buffer = str_replace(
346
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '\' type=\'text/css\' media=\'all\' />',
347
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
350
 
351
  }
352
 
353
+ // CSS Simply Minify //////////////////////////////////////////// .
354
+
355
  foreach ( $vk_css_simple_minify_array as $vk_css_array ) {
356
 
 
 
357
  $path_name = $vk_css_array['path'];
358
  if ( WP_Filesystem() ) {
359
  global $wp_filesystem;
360
  $css = $wp_filesystem->get_contents( $path_name );
361
  }
362
 
363
+ $css = celtislab\v2_1\CSS_tree_shaking::simple_minify( $css );
364
 
365
+ // ファイルで読み込んでいるCSSを直接出力に置換(バージョンパラメーターあり).
366
  $buffer = str_replace(
367
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '?ver=' . $vk_css_array['version'] . '\' type=\'text/css\' media=\'all\' />',
368
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
369
  $buffer
370
  );
371
+ // ファイルで読み込んでいるCSSを直接出力に置換(バージョンパラメーターなし).
372
  $buffer = str_replace(
373
  '<link rel=\'stylesheet\' id=\'' . $vk_css_array['id'] . '-css\' href=\'' . $vk_css_array['url'] . '\' type=\'text/css\' media=\'all\' />',
374
  '<style id=\'' . $vk_css_array['id'] . '-css\' type=\'text/css\'>' . $css . '</style>',
380
  return $buffer;
381
  }
382
 
383
+ /**
384
+ * Undocumented function
385
+ *
386
+ * @param string $tag .
387
+ * @param string $handle .
388
+ * @param string $href .
389
+ * @param string $media .
390
+ * @return string $tag .
391
+ */
392
  public static function css_preload( $tag, $handle, $href, $media ) {
393
 
394
  $vk_css_tree_shaking_array = self::css_tree_shaking_array();
399
  $options = self::get_css_optimize_options();
400
 
401
  // tree shaking がかかっているものはpreloadから除外する
402
+ // でないと表示時に一瞬崩れて結局実用性に問題があるため.
403
  foreach ( $vk_css_tree_shaking_array as $vk_css_array ) {
404
  $exclude_handles[] = $vk_css_array['id'];
405
  }
406
 
407
  // Simple Minify がかかっているものはpreloadから除外する
408
+ // でないと表示時に一瞬崩れて結局実用性に問題があるため.
409
  foreach ( $vk_css_simple_minify_array as $vk_css_array ) {
410
  $exclude_handles[] = $vk_css_array['id'];
411
  }
412
 
413
+ // プリロードから除外するCSSハンドルが option で保存されている場合.
414
  if ( ! empty( $options['preload_handle_exclude'] ) ) {
415
+ // 保存されているされている除外するCSSハンドルを配列に変換.
416
+ $exclude_array = explode( ',', $options['preload_handle_exclude'] );
417
+ // 除外するCSSハンドルの配列をマージ.
418
  $exclude_handles = array_merge( $exclude_array, $exclude_handles );
419
  }
420
 
421
  $exclude_handles = apply_filters( 'vk_css_preload_exclude_handles', $exclude_handles );
422
+
423
+ // クリティカルじゃないCSS(tree shakingにかけているもの以外)をpreload .
424
  if ( ! in_array( $handle, $exclude_handles ) ) {
425
+ // preload を追加する.
426
  $tag = "<link rel='preload' id='" . $handle . "-css' href='" . $href . "' as='style' onload=\"this.onload=null;this.rel='stylesheet'\"/>\n";
427
  $tag .= "<link rel='stylesheet' id='" . $handle . "-css' href='" . $href . "' media='print' onload=\"this.media='all'; this.onload=null;\">\n";
428
  }
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: Google Analytics, New posts, Related Posts, sitemap, sns, twitter card, Fa
5
  Requires at least: 5.3.0
6
  Tested up to: 5.9.2
7
  Requires PHP: 7.2
8
- Stable tag: 9.76.0.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -81,6 +81,12 @@ e.g.
81
 
82
  == Changelog ==
83
 
 
 
 
 
 
 
84
  = 9.76.0.1 =
85
  * [ Specification Change ] Update VK Font Awesome Versions 0.4.0
86
  * [ Bug fix ][ Child Page List / Contact section / Page list from ancestor ] Fix duplicate Additional CSS classes.
5
  Requires at least: 5.3.0
6
  Tested up to: 5.9.2
7
  Requires PHP: 7.2
8
+ Stable tag: 9.76.1.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
81
 
82
  == Changelog ==
83
 
84
+ = 9.76.1.0 =
85
+ [ Bug Fix ][ Custom Post Type Manager ] Fix translate
86
+ [ Bug Fix ][ CSS Optimize lib ] library Update
87
+ [ Bug Fix ] Fix load Font Awesome Files on WordPress.com
88
+ [ Other ][ BreadCrumb ] Update composer library 0.2.2
89
+
90
  = 9.76.0.1 =
91
  * [ Specification Change ] Update VK Font Awesome Versions 0.4.0
92
  * [ Bug fix ][ Child Page List / Contact section / Page list from ancestor ] Fix duplicate Additional CSS classes.
vendor/autoload.php CHANGED
@@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
- return ComposerAutoloaderInit50d86ddd58170b8382a1f0e1f7e9c7e0::getLoader();
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
+ return ComposerAutoloaderInitc288c9985326f80fe39a56b01787266f::getLoader();
vendor/composer/InstalledVersions.php CHANGED
@@ -28,7 +28,7 @@ class InstalledVersions
28
  {
29
  /**
30
  * @var mixed[]|null
31
- * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
32
  */
33
  private static $installed;
34
 
@@ -39,7 +39,7 @@ class InstalledVersions
39
 
40
  /**
41
  * @var array[]
42
- * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
43
  */
44
  private static $installedByVendor = array();
45
 
@@ -243,7 +243,7 @@ class InstalledVersions
243
 
244
  /**
245
  * @return array
246
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
247
  */
248
  public static function getRootPackage()
249
  {
@@ -257,7 +257,7 @@ class InstalledVersions
257
  *
258
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
259
  * @return array[]
260
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
261
  */
262
  public static function getRawData()
263
  {
@@ -280,7 +280,7 @@ class InstalledVersions
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
284
  */
285
  public static function getAllRawData()
286
  {
@@ -303,7 +303,7 @@ class InstalledVersions
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
307
  */
308
  public static function reload($data)
309
  {
@@ -313,7 +313,7 @@ class InstalledVersions
313
 
314
  /**
315
  * @return array[]
316
- * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
317
  */
318
  private static function getInstalled()
319
  {
28
  {
29
  /**
30
  * @var mixed[]|null
31
+ * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
32
  */
33
  private static $installed;
34
 
39
 
40
  /**
41
  * @var array[]
42
+ * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
43
  */
44
  private static $installedByVendor = array();
45
 
243
 
244
  /**
245
  * @return array
246
+ * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
247
  */
248
  public static function getRootPackage()
249
  {
257
  *
258
  * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
259
  * @return array[]
260
+ * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
261
  */
262
  public static function getRawData()
263
  {
280
  * Returns the raw data of all installed.php which are currently loaded for custom implementations
281
  *
282
  * @return array[]
283
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
284
  */
285
  public static function getAllRawData()
286
  {
303
  * @param array[] $data A vendor/composer/installed.php data set
304
  * @return void
305
  *
306
+ * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
307
  */
308
  public static function reload($data)
309
  {
313
 
314
  /**
315
  * @return array[]
316
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
317
  */
318
  private static function getInstalled()
319
  {
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit50d86ddd58170b8382a1f0e1f7e9c7e0
6
  {
7
  private static $loader;
8
 
@@ -24,12 +24,12 @@ class ComposerAutoloaderInit50d86ddd58170b8382a1f0e1f7e9c7e0
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit50d86ddd58170b8382a1f0e1f7e9c7e0', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit50d86ddd58170b8382a1f0e1f7e9c7e0', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
- call_user_func(\Composer\Autoload\ComposerStaticInit50d86ddd58170b8382a1f0e1f7e9c7e0::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitc288c9985326f80fe39a56b01787266f
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInitc288c9985326f80fe39a56b01787266f', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInitc288c9985326f80fe39a56b01787266f', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
+ call_user_func(\Composer\Autoload\ComposerStaticInitc288c9985326f80fe39a56b01787266f::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit50d86ddd58170b8382a1f0e1f7e9c7e0
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'V' =>
@@ -46,9 +46,9 @@ class ComposerStaticInit50d86ddd58170b8382a1f0e1f7e9c7e0
46
  public static function getInitializer(ClassLoader $loader)
47
  {
48
  return \Closure::bind(function () use ($loader) {
49
- $loader->prefixLengthsPsr4 = ComposerStaticInit50d86ddd58170b8382a1f0e1f7e9c7e0::$prefixLengthsPsr4;
50
- $loader->prefixDirsPsr4 = ComposerStaticInit50d86ddd58170b8382a1f0e1f7e9c7e0::$prefixDirsPsr4;
51
- $loader->classMap = ComposerStaticInit50d86ddd58170b8382a1f0e1f7e9c7e0::$classMap;
52
 
53
  }, null, ClassLoader::class);
54
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitc288c9985326f80fe39a56b01787266f
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'V' =>
46
  public static function getInitializer(ClassLoader $loader)
47
  {
48
  return \Closure::bind(function () use ($loader) {
49
+ $loader->prefixLengthsPsr4 = ComposerStaticInitc288c9985326f80fe39a56b01787266f::$prefixLengthsPsr4;
50
+ $loader->prefixDirsPsr4 = ComposerStaticInitc288c9985326f80fe39a56b01787266f::$prefixDirsPsr4;
51
+ $loader->classMap = ComposerStaticInitc288c9985326f80fe39a56b01787266f::$classMap;
52
 
53
  }, null, ClassLoader::class);
54
  }
vendor/composer/installed.json CHANGED
@@ -2,17 +2,17 @@
2
  "packages": [
3
  {
4
  "name": "vektor-inc/font-awesome-versions",
5
- "version": "0.4.0",
6
- "version_normalized": "0.4.0.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/vektor-inc/font-awesome-versions.git",
10
- "reference": "16b3f9fdf71cee93dafc01b56f190a463158bd30"
11
  },
12
  "dist": {
13
  "type": "zip",
14
- "url": "https://api.github.com/repos/vektor-inc/font-awesome-versions/zipball/16b3f9fdf71cee93dafc01b56f190a463158bd30",
15
- "reference": "16b3f9fdf71cee93dafc01b56f190a463158bd30",
16
  "shasum": ""
17
  },
18
  "require": {
@@ -22,7 +22,7 @@
22
  "wp-phpunit/wp-phpunit": "^5.4",
23
  "yoast/phpunit-polyfills": "^1.0"
24
  },
25
- "time": "2022-04-18T06:21:29+00:00",
26
  "type": "library",
27
  "installation-source": "dist",
28
  "autoload": {
@@ -43,29 +43,33 @@
43
  "description": "Font Awesome",
44
  "support": {
45
  "issues": "https://github.com/vektor-inc/font-awesome-versions/issues",
46
- "source": "https://github.com/vektor-inc/font-awesome-versions/tree/0.4.0"
47
  },
48
  "install-path": "../vektor-inc/font-awesome-versions"
49
  },
50
  {
51
  "name": "vektor-inc/vk-breadcrumb",
52
- "version": "0.0.4",
53
- "version_normalized": "0.0.4.0",
54
  "source": {
55
  "type": "git",
56
  "url": "https://github.com/vektor-inc/vk-breadcrumb.git",
57
- "reference": "d323e0597729824532d21795f1a986dbde89ab4e"
58
  },
59
  "dist": {
60
  "type": "zip",
61
- "url": "https://api.github.com/repos/vektor-inc/vk-breadcrumb/zipball/d323e0597729824532d21795f1a986dbde89ab4e",
62
- "reference": "d323e0597729824532d21795f1a986dbde89ab4e",
63
  "shasum": ""
64
  },
65
  "require": {
66
  "vektor-inc/vk-helpers": "^0.0.2"
67
  },
68
- "time": "2022-02-09T05:38:27+00:00",
 
 
 
 
69
  "type": "library",
70
  "installation-source": "dist",
71
  "autoload": {
@@ -86,7 +90,7 @@
86
  "description": "WordPress Bread Crumb Class",
87
  "support": {
88
  "issues": "https://github.com/vektor-inc/vk-breadcrumb/issues",
89
- "source": "https://github.com/vektor-inc/vk-breadcrumb/tree/0.0.4"
90
  },
91
  "install-path": "../vektor-inc/vk-breadcrumb"
92
  },
2
  "packages": [
3
  {
4
  "name": "vektor-inc/font-awesome-versions",
5
+ "version": "0.4.1",
6
+ "version_normalized": "0.4.1.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/vektor-inc/font-awesome-versions.git",
10
+ "reference": "3a993f14a96dbe8095b3a34813310778d32847e2"
11
  },
12
  "dist": {
13
  "type": "zip",
14
+ "url": "https://api.github.com/repos/vektor-inc/font-awesome-versions/zipball/3a993f14a96dbe8095b3a34813310778d32847e2",
15
+ "reference": "3a993f14a96dbe8095b3a34813310778d32847e2",
16
  "shasum": ""
17
  },
18
  "require": {
22
  "wp-phpunit/wp-phpunit": "^5.4",
23
  "yoast/phpunit-polyfills": "^1.0"
24
  },
25
+ "time": "2022-04-24T06:53:01+00:00",
26
  "type": "library",
27
  "installation-source": "dist",
28
  "autoload": {
43
  "description": "Font Awesome",
44
  "support": {
45
  "issues": "https://github.com/vektor-inc/font-awesome-versions/issues",
46
+ "source": "https://github.com/vektor-inc/font-awesome-versions/tree/0.4.1"
47
  },
48
  "install-path": "../vektor-inc/font-awesome-versions"
49
  },
50
  {
51
  "name": "vektor-inc/vk-breadcrumb",
52
+ "version": "0.2.2",
53
+ "version_normalized": "0.2.2.0",
54
  "source": {
55
  "type": "git",
56
  "url": "https://github.com/vektor-inc/vk-breadcrumb.git",
57
+ "reference": "c3c9f09522b2d5688e31dac235a925731bf70d46"
58
  },
59
  "dist": {
60
  "type": "zip",
61
+ "url": "https://api.github.com/repos/vektor-inc/vk-breadcrumb/zipball/c3c9f09522b2d5688e31dac235a925731bf70d46",
62
+ "reference": "c3c9f09522b2d5688e31dac235a925731bf70d46",
63
  "shasum": ""
64
  },
65
  "require": {
66
  "vektor-inc/vk-helpers": "^0.0.2"
67
  },
68
+ "require-dev": {
69
+ "wp-phpunit/wp-phpunit": "^5.4",
70
+ "yoast/phpunit-polyfills": "^1.0"
71
+ },
72
+ "time": "2022-04-19T07:08:07+00:00",
73
  "type": "library",
74
  "installation-source": "dist",
75
  "autoload": {
90
  "description": "WordPress Bread Crumb Class",
91
  "support": {
92
  "issues": "https://github.com/vektor-inc/vk-breadcrumb/issues",
93
+ "source": "https://github.com/vektor-inc/vk-breadcrumb/tree/0.2.2"
94
  },
95
  "install-path": "../vektor-inc/vk-breadcrumb"
96
  },
vendor/composer/installed.php CHANGED
@@ -1,58 +1,58 @@
1
  <?php return array(
2
  'root' => array(
3
- 'pretty_version' => '9.76.0.1',
4
- 'version' => '9.76.0.1',
 
 
5
  'type' => 'project',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => '14ef6bbaaeff2ec722c6ec100bf882f3ad5132e3',
9
- 'name' => 'vektor-inc/vk-all-in-one-expansion-unit',
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'vektor-inc/font-awesome-versions' => array(
14
- 'pretty_version' => '0.4.0',
15
- 'version' => '0.4.0.0',
 
16
  'type' => 'library',
17
  'install_path' => __DIR__ . '/../vektor-inc/font-awesome-versions',
18
  'aliases' => array(),
19
- 'reference' => '16b3f9fdf71cee93dafc01b56f190a463158bd30',
20
  'dev_requirement' => false,
21
  ),
22
  'vektor-inc/vk-all-in-one-expansion-unit' => array(
23
- 'pretty_version' => '9.76.0.1',
24
- 'version' => '9.76.0.1',
 
25
  'type' => 'project',
26
  'install_path' => __DIR__ . '/../../',
27
  'aliases' => array(),
28
- 'reference' => '14ef6bbaaeff2ec722c6ec100bf882f3ad5132e3',
29
  'dev_requirement' => false,
30
  ),
31
  'vektor-inc/vk-breadcrumb' => array(
32
- 'pretty_version' => '0.0.4',
33
- 'version' => '0.0.4.0',
 
34
  'type' => 'library',
35
  'install_path' => __DIR__ . '/../vektor-inc/vk-breadcrumb',
36
  'aliases' => array(),
37
- 'reference' => 'd323e0597729824532d21795f1a986dbde89ab4e',
38
  'dev_requirement' => false,
39
  ),
40
  'vektor-inc/vk-helpers' => array(
41
  'pretty_version' => '0.0.2',
42
  'version' => '0.0.2.0',
 
43
  'type' => 'library',
44
  'install_path' => __DIR__ . '/../vektor-inc/vk-helpers',
45
  'aliases' => array(),
46
- 'reference' => '320155b9df7f9f57a889e144dd8b379184ac15ec',
47
  'dev_requirement' => false,
48
  ),
49
  'vektor-inc/vk-term-color' => array(
50
  'pretty_version' => '0.1.0',
51
  'version' => '0.1.0.0',
 
52
  'type' => 'library',
53
  'install_path' => __DIR__ . '/../vektor-inc/vk-term-color',
54
  'aliases' => array(),
55
- 'reference' => '6a03c52ffbbceba13f8429beb12bbcf4946335c1',
56
  'dev_requirement' => false,
57
  ),
58
  ),
1
  <?php return array(
2
  'root' => array(
3
+ 'name' => 'vektor-inc/vk-all-in-one-expansion-unit',
4
+ 'pretty_version' => '9.76.1.0',
5
+ 'version' => '9.76.1.0',
6
+ 'reference' => '97d89442dc47546a1d22ea2d26cb09e687ecf7ac',
7
  'type' => 'project',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
 
 
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'vektor-inc/font-awesome-versions' => array(
14
+ 'pretty_version' => '0.4.1',
15
+ 'version' => '0.4.1.0',
16
+ 'reference' => '3a993f14a96dbe8095b3a34813310778d32847e2',
17
  'type' => 'library',
18
  'install_path' => __DIR__ . '/../vektor-inc/font-awesome-versions',
19
  'aliases' => array(),
 
20
  'dev_requirement' => false,
21
  ),
22
  'vektor-inc/vk-all-in-one-expansion-unit' => array(
23
+ 'pretty_version' => '9.76.1.0',
24
+ 'version' => '9.76.1.0',
25
+ 'reference' => '97d89442dc47546a1d22ea2d26cb09e687ecf7ac',
26
  'type' => 'project',
27
  'install_path' => __DIR__ . '/../../',
28
  'aliases' => array(),
 
29
  'dev_requirement' => false,
30
  ),
31
  'vektor-inc/vk-breadcrumb' => array(
32
+ 'pretty_version' => '0.2.2',
33
+ 'version' => '0.2.2.0',
34
+ 'reference' => 'c3c9f09522b2d5688e31dac235a925731bf70d46',
35
  'type' => 'library',
36
  'install_path' => __DIR__ . '/../vektor-inc/vk-breadcrumb',
37
  'aliases' => array(),
 
38
  'dev_requirement' => false,
39
  ),
40
  'vektor-inc/vk-helpers' => array(
41
  'pretty_version' => '0.0.2',
42
  'version' => '0.0.2.0',
43
+ 'reference' => '320155b9df7f9f57a889e144dd8b379184ac15ec',
44
  'type' => 'library',
45
  'install_path' => __DIR__ . '/../vektor-inc/vk-helpers',
46
  'aliases' => array(),
 
47
  'dev_requirement' => false,
48
  ),
49
  'vektor-inc/vk-term-color' => array(
50
  'pretty_version' => '0.1.0',
51
  'version' => '0.1.0.0',
52
+ 'reference' => '6a03c52ffbbceba13f8429beb12bbcf4946335c1',
53
  'type' => 'library',
54
  'install_path' => __DIR__ . '/../vektor-inc/vk-term-color',
55
  'aliases' => array(),
 
56
  'dev_requirement' => false,
57
  ),
58
  ),
vendor/vektor-inc/font-awesome-versions/src/VkFontAwesomeVersions.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package vektor-inc/font-awesome-versions
6
  * @license GPL-2.0+
7
  *
8
- * @version 0.4.0
9
  */
10
 
11
  namespace VektorInc\VK_Font_Awesome_Versions;
@@ -77,11 +77,25 @@ class VkFontAwesomeVersions {
77
  * Undocumented function
78
  *
79
  * @since 0.3.0
 
80
  * @return string $uri
81
  */
82
- public static function get_directory_uri() {
83
- $path = wp_normalize_path( dirname( __FILE__ ) );
84
- $uri = str_replace( wp_normalize_path( ABSPATH ), site_url() . '/', $path ) . '/';
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  return $uri;
86
  }
87
 
@@ -373,7 +387,7 @@ class VkFontAwesomeVersions {
373
  if ( '4.7' === $current_option ) {
374
  $old_notice .= '<div class="error">';
375
  $old_notice .= '<p>' . __( 'An older version of Font Awesome is selected. This version will be removed by August 2022.', 'font-awesome-versions' ) . '</p>';
376
- $old_notice .= '<p>' . __( 'Plesee change the version of FontAwesome on the Appearance > Customize screen.', 'font-awesome-versions' ) . '</p>';
377
  $old_notice .= '<p>' . __( '* It is necessary to reset the icon font in the place where Font Awesome is used.', 'font-awesome-versions' ) . '</p>';
378
  $old_notice .= '</div>';
379
  }
5
  * @package vektor-inc/font-awesome-versions
6
  * @license GPL-2.0+
7
  *
8
+ * @version 0.4.1
9
  */
10
 
11
  namespace VektorInc\VK_Font_Awesome_Versions;
77
  * Undocumented function
78
  *
79
  * @since 0.3.0
80
+ * @param string $path : PHPUnit テスト用
81
  * @return string $uri
82
  */
83
+ public static function get_directory_uri( $path = '' ) {
84
+
85
+ $uri = '';
86
+
87
+ if ( ! $path ) {
88
+ // このファイルのパス.
89
+ $path = wp_normalize_path( dirname( __FILE__ ) );
90
+ }
91
+
92
+ // ファイルのパスの wp-content より前の部分を site_url() に置換する
93
+ // ABSPATH の部分を site_url() に置換したいところだが、ABSPATHは WordPress.com で /wordpress/core/5.9.3/ のような返し方をされて、一般的なサーバーのパスとは異なるので、置換などには使用しない.
94
+ preg_match( '/(.*)(wp-content.*)/', $path, $matches, PREG_OFFSET_CAPTURE );
95
+ if ( ! empty( $matches[2][0] ) ) {
96
+ $uri = site_url( '/' ) . $matches[2][0] . '/';
97
+ }
98
+
99
  return $uri;
100
  }
101
 
387
  if ( '4.7' === $current_option ) {
388
  $old_notice .= '<div class="error">';
389
  $old_notice .= '<p>' . __( 'An older version of Font Awesome is selected. This version will be removed by August 2022.', 'font-awesome-versions' ) . '</p>';
390
+ $old_notice .= '<p>' . __( 'Please change the version of FontAwesome on the Appearance > Customize screen.', 'font-awesome-versions' ) . '</p>';
391
  $old_notice .= '<p>' . __( '* It is necessary to reset the icon font in the place where Font Awesome is used.', 'font-awesome-versions' ) . '</p>';
392
  $old_notice .= '</div>';
393
  }
vendor/vektor-inc/font-awesome-versions/src/languages/font-awesome-versions-ja.po CHANGED
@@ -40,7 +40,7 @@ msgstr ""
40
 
41
  #: src/VkFontAwesomeVersions.php:348
42
  msgid ""
43
- "Plesee change the version of FontAwesome on the Appearance > Customize "
44
  "screen."
45
  msgstr "外観>カスタマイズ画面で、FontAwesomeのバージョンを変更してください。"
46
 
40
 
41
  #: src/VkFontAwesomeVersions.php:348
42
  msgid ""
43
+ "Please change the version of FontAwesome on the Appearance > Customize "
44
  "screen."
45
  msgstr "外観>カスタマイズ画面で、FontAwesomeのバージョンを変更してください。"
46
 
vendor/vektor-inc/font-awesome-versions/src/languages/font-awesome-versioons.pot CHANGED
@@ -31,7 +31,7 @@ msgid "An older version of Font Awesome is selected. This version will be remove
31
  msgstr ""
32
 
33
  #: src/VkFontAwesomeVersions.php:348
34
- msgid "Plesee change the version of FontAwesome on the Appearance > Customize screen."
35
  msgstr ""
36
 
37
  #: src/VkFontAwesomeVersions.php:349
31
  msgstr ""
32
 
33
  #: src/VkFontAwesomeVersions.php:348
34
+ msgid "Please change the version of FontAwesome on the Appearance > Customize screen."
35
  msgstr ""
36
 
37
  #: src/VkFontAwesomeVersions.php:349
vendor/vektor-inc/vk-breadcrumb/phpunit.xml.dist ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <phpunit
3
+ bootstrap="tests/bootstrap.php"
4
+ backupGlobals="false"
5
+ colors="true"
6
+ convertErrorsToExceptions="true"
7
+ convertNoticesToExceptions="true"
8
+ convertWarningsToExceptions="true"
9
+ >
10
+ <testsuites>
11
+ <testsuite name="default">
12
+ <directory prefix="test-" suffix=".php">./tests/</directory>
13
+ </testsuite>
14
+ </testsuites>
15
+ </phpunit>
vendor/vektor-inc/vk-breadcrumb/src/VkBreadcrumb.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package vektor-inc/vk-breadcrumb
6
  * @license GPL-2.0+
7
  *
8
- * @version 0.0.4
9
  */
10
 
11
  namespace VektorInc\VK_Breadcrumb;
@@ -350,19 +350,20 @@ class VkBreadcrumb {
350
 
351
 
352
  /**
353
- * Print Bread Crumb
354
  *
355
  * @param array $options
356
  */
357
- public static function the_breadcrumb( $options = array() ) {
358
 
359
  if ( ! $options ) {
360
  $options = array(
361
- 'id_outer' => 'breadcrumb',
362
- 'class_outer' => 'breadcrumb',
363
- 'class_inner' => 'container',
364
- 'class_list' => 'breadcrumb-list',
365
- 'class_list_item' => 'breadcrumb-list__item',
 
366
  );
367
  }
368
 
@@ -377,8 +378,12 @@ class VkBreadcrumb {
377
  $microdata_li_a = ' itemprop="item"';
378
  $microdata_li_a_span = ' itemprop="name"';
379
 
380
- $breadcrumb_html = '<!-- [ #' . esc_attr( $options['class_outer'] ) . ' ] -->';
381
- $breadcrumb_html .= '<div id="' . esc_attr( $options['class_outer'] ) . '" class="' . esc_attr( $options['class_outer'] ) . '">';
 
 
 
 
382
  $breadcrumb_html .= '<div class="' . esc_attr( $options['class_inner'] ) . '">';
383
  $breadcrumb_html .= '<ol class="' . esc_attr( $options['class_list'] ) . '" itemscope itemtype="https://schema.org/BreadcrumbList">';
384
 
@@ -424,63 +429,70 @@ class VkBreadcrumb {
424
  }
425
 
426
  $breadcrumb_html .= '</ol>';
427
- $breadcrumb_html .= '</div>
428
- </div>
429
- <!-- [ /#' . esc_attr( $options['class_outer'] ) . ' ] -->
430
- ';
431
  $breadcrumb_html = apply_filters( 'vk_breadcrumb_html', $breadcrumb_html );
 
 
 
432
 
433
- $allowed_html = array(
434
- 'div' => array(
435
- 'id' => array(),
436
- 'class' => array(),
437
- 'itemprop' => array(),
438
- 'itemscope' => array(),
439
- 'itemtype' => array(),
440
- ),
441
- 'ol' => array(
442
- 'id' => array(),
443
- 'class' => array(),
444
- 'itemprop' => array(),
445
- 'itemscope' => array(),
446
- 'itemtype' => array(),
447
- ),
448
- 'li' => array(
449
- 'id' => array(),
450
- 'class' => array(),
451
- 'itemprop' => array(),
452
- 'itemscope' => array(),
453
- 'itemtype' => array(),
454
- ),
455
- 'a' => array(
456
- 'id' => array(),
457
- 'class' => array(),
458
- 'href' => array(),
459
- 'target' => array(),
460
- 'itemprop' => array(),
461
- ),
462
- 'span' => array(
463
- 'id' => array(),
464
- 'class' => array(),
465
- 'itemprop' => array(),
466
- 'itemscope' => array(),
467
- 'itemtype' => array(),
468
- ),
469
- 'i' => array(
470
- 'id' => array(),
471
- 'class' => array(),
472
- ),
473
- 'meta' => array(
474
- 'itemprop' => array(),
475
- 'content' => array(),
476
- ),
477
- 'ruby' => array(),
478
- 'rt' => array(),
479
- );
480
- echo wp_kses( $breadcrumb_html, $allowed_html );
481
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
482
  }
483
 
 
484
  /**
485
  * Scheme array
486
  *
5
  * @package vektor-inc/vk-breadcrumb
6
  * @license GPL-2.0+
7
  *
8
+ * @version 0.2.2
9
  */
10
 
11
  namespace VektorInc\VK_Breadcrumb;
350
 
351
 
352
  /**
353
+ * Get Bread Crumb
354
  *
355
  * @param array $options
356
  */
357
+ public static function get_breadcrumb( $options = array() ) {
358
 
359
  if ( ! $options ) {
360
  $options = array(
361
+ 'id_outer' => 'breadcrumb',
362
+ 'class_outer' => 'breadcrumb',
363
+ 'wrapper_attributes' => '',
364
+ 'class_inner' => 'container',
365
+ 'class_list' => 'breadcrumb-list',
366
+ 'class_list_item' => 'breadcrumb-list__item',
367
  );
368
  }
369
 
378
  $microdata_li_a = ' itemprop="item"';
379
  $microdata_li_a_span = ' itemprop="name"';
380
 
381
+ $breadcrumb_html = '<!-- [ #' . esc_attr( $options['class_outer'] ) . ' ] -->';
382
+ if ( ! empty( $options['wrapper_attributes'] ) ) {
383
+ $breadcrumb_html .= '<div id="' . esc_attr( $options['id_outer'] ) . '" ' . $options['wrapper_attributes'] . '>';
384
+ } else {
385
+ $breadcrumb_html .= '<div id="' . esc_attr( $options['id_outer'] ) . '" class="' . $options['class_outer'] . '">';
386
+ }
387
  $breadcrumb_html .= '<div class="' . esc_attr( $options['class_inner'] ) . '">';
388
  $breadcrumb_html .= '<ol class="' . esc_attr( $options['class_list'] ) . '" itemscope itemtype="https://schema.org/BreadcrumbList">';
389
 
429
  }
430
 
431
  $breadcrumb_html .= '</ol>';
432
+ $breadcrumb_html .= '</div>';
433
+ $breadcrumb_html .= '</div>';
434
+ $breadcrumb_html .= '<!-- [ /#' . esc_attr( $options['class_outer'] ) . ' ] -->';
 
435
  $breadcrumb_html = apply_filters( 'vk_breadcrumb_html', $breadcrumb_html );
436
+ return $breadcrumb_html;
437
+
438
+ }
439
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
440
 
441
+ /**
442
+ * Print Bread Crumb
443
+ */
444
+ public static function the_breadcrumb() {
445
+ $allowed_html = array(
446
+ 'div' => array(
447
+ 'id' => array(),
448
+ 'class' => array(),
449
+ 'itemprop' => array(),
450
+ 'itemscope' => array(),
451
+ 'itemtype' => array(),
452
+ ),
453
+ 'ol' => array(
454
+ 'id' => array(),
455
+ 'class' => array(),
456
+ 'itemprop' => array(),
457
+ 'itemscope' => array(),
458
+ 'itemtype' => array(),
459
+ ),
460
+ 'li' => array(
461
+ 'id' => array(),
462
+ 'class' => array(),
463
+ 'itemprop' => array(),
464
+ 'itemscope' => array(),
465
+ 'itemtype' => array(),
466
+ ),
467
+ 'a' => array(
468
+ 'id' => array(),
469
+ 'class' => array(),
470
+ 'href' => array(),
471
+ 'target' => array(),
472
+ 'itemprop' => array(),
473
+ ),
474
+ 'span' => array(
475
+ 'id' => array(),
476
+ 'class' => array(),
477
+ 'itemprop' => array(),
478
+ 'itemscope' => array(),
479
+ 'itemtype' => array(),
480
+ ),
481
+ 'i' => array(
482
+ 'id' => array(),
483
+ 'class' => array(),
484
+ ),
485
+ 'meta' => array(
486
+ 'itemprop' => array(),
487
+ 'content' => array(),
488
+ ),
489
+ 'ruby' => array(),
490
+ 'rt' => array(),
491
+ );
492
+ echo wp_kses( self::get_breadcrumb(), $allowed_html );
493
  }
494
 
495
+
496
  /**
497
  * Scheme array
498
  *
veu-packages.php CHANGED
@@ -104,7 +104,7 @@ function veu_get_packages() {
104
  $deskSns[] = '<li>' . __( 'Print og tags to html head.', 'vk-all-in-one-expansion-unit' ) . '</li>';
105
  $deskSns[] = '<li>' . __( 'Print twitter card tags to html head.', 'vk-all-in-one-expansion-unit' ) . '</li>';
106
  $deskSns[] = '<li>' . __( 'Print social bookmark buttons.', 'vk-all-in-one-expansion-unit' ) . '</li>';
107
- $deskSns[] = '<li>' . __( 'Facebook Page Plugin widget.', 'vk-all-in-one-expansion-unit' ) . '</li>';
108
  $deskSns[] = '<li>' . __( 'Print Follow me box to content bottom.', 'vk-all-in-one-expansion-unit' ) . '</li>';
109
  $deskSns[] = '</ul>';
110
  $deskSns[] = '<p>' . sprintf( __( '* You can stop the function separately from the %s.', 'vk-all-in-one-expansion-unit' ), $settingPage ) . '</p>';
@@ -203,7 +203,6 @@ function veu_get_packages() {
203
  $desk[] = '<li>' . __( 'VK_Recent Posts - display the link text and the date of the latest article title.', 'vk-all-in-one-expansion-unit' ) . '</li>';
204
  $desk[] = '<li>' . __( 'VK_Page content to widget - display the contents of the page to the widgets.', 'vk-all-in-one-expansion-unit' ) . '</li>';
205
  $desk[] = '<li>' . __( 'VK_Profile - display the profile entered in the widget.', 'vk-all-in-one-expansion-unit' ) . '</li>';
206
- $desk[] = '<li>' . __( 'VK_FB Page Plugin - display the Facebook Page Plugin.', 'vk-all-in-one-expansion-unit' ) . '</li>';
207
  $desk[] = '<li>' . __( 'VK_3PR area - display the 3PR area.', 'vk-all-in-one-expansion-unit' ) . '</li>';
208
  $desk[] = '<li>VK_' . __( 'categories/tags list', 'vk-all-in-one-expansion-unit' ) . __( 'Displays a categories, tags or format list.', 'vk-all-in-one-expansion-unit' ) . '</li>';
209
  $desk[] = '<li>VK_' . __( 'archive list', 'vk-all-in-one-expansion-unit' ) . __( 'Displays a list of archives. You can choose the post type and also to display archives by month or by year.', 'vk-all-in-one-expansion-unit' ) . '</li>';
104
  $deskSns[] = '<li>' . __( 'Print og tags to html head.', 'vk-all-in-one-expansion-unit' ) . '</li>';
105
  $deskSns[] = '<li>' . __( 'Print twitter card tags to html head.', 'vk-all-in-one-expansion-unit' ) . '</li>';
106
  $deskSns[] = '<li>' . __( 'Print social bookmark buttons.', 'vk-all-in-one-expansion-unit' ) . '</li>';
107
+ $deskSns[] = '<li>' . __( 'VK_FB Page Plugin - display the Facebook Page Plugin widget.', 'vk-all-in-one-expansion-unit' ) . '</li>';
108
  $deskSns[] = '<li>' . __( 'Print Follow me box to content bottom.', 'vk-all-in-one-expansion-unit' ) . '</li>';
109
  $deskSns[] = '</ul>';
110
  $deskSns[] = '<p>' . sprintf( __( '* You can stop the function separately from the %s.', 'vk-all-in-one-expansion-unit' ), $settingPage ) . '</p>';
203
  $desk[] = '<li>' . __( 'VK_Recent Posts - display the link text and the date of the latest article title.', 'vk-all-in-one-expansion-unit' ) . '</li>';
204
  $desk[] = '<li>' . __( 'VK_Page content to widget - display the contents of the page to the widgets.', 'vk-all-in-one-expansion-unit' ) . '</li>';
205
  $desk[] = '<li>' . __( 'VK_Profile - display the profile entered in the widget.', 'vk-all-in-one-expansion-unit' ) . '</li>';
 
206
  $desk[] = '<li>' . __( 'VK_3PR area - display the 3PR area.', 'vk-all-in-one-expansion-unit' ) . '</li>';
207
  $desk[] = '<li>VK_' . __( 'categories/tags list', 'vk-all-in-one-expansion-unit' ) . __( 'Displays a categories, tags or format list.', 'vk-all-in-one-expansion-unit' ) . '</li>';
208
  $desk[] = '<li>VK_' . __( 'archive list', 'vk-all-in-one-expansion-unit' ) . __( 'Displays a list of archives. You can choose the post type and also to display archives by month or by year.', 'vk-all-in-one-expansion-unit' ) . '</li>';
vkExUnit.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: VK All in One Expansion Unit
4
  * Plugin URI: https://ex-unit.nagoya
5
  * Description: This plug-in is an integrated plug-in with a variety of features that make it powerful your web site. Many features can be stopped individually. Example Facebook Page Plugin,Social Bookmarks,Print OG Tags,Print Twitter Card Tags,Print Google Analytics tag,New post widget,Insert Related Posts and more!
6
- * Version: 9.76.0.1
7
  * Requires PHP: 7.2
8
  * Author: Vektor,Inc.
9
  * Text Domain: vk-all-in-one-expansion-unit
3
  * Plugin Name: VK All in One Expansion Unit
4
  * Plugin URI: https://ex-unit.nagoya
5
  * Description: This plug-in is an integrated plug-in with a variety of features that make it powerful your web site. Many features can be stopped individually. Example Facebook Page Plugin,Social Bookmarks,Print OG Tags,Print Twitter Card Tags,Print Google Analytics tag,New post widget,Insert Related Posts and more!
6
+ * Version: 9.76.1.0
7
  * Requires PHP: 7.2
8
  * Author: Vektor,Inc.
9
  * Text Domain: vk-all-in-one-expansion-unit