Lightning と WordPress コーディング規約 と バグ
Lightning と WordPress コーディング規約 と バグ
- このトピックには7件の返信、2人の参加者があり、最後にDRILL LANCERにより5年、 5ヶ月前に更新されました。
-
投稿者投稿
-
2019年5月1日 5:35 AM #16150
DRILL LANCERモデレーター- VSCodeでWordPress開発するための拡張機能とおすすめの設定
- VSCodeで「WordPress Coding Standards」に準拠してPHPの自動フォーマットする方法
- VSCodeでPrettierを使ってWordPressのコーディング規約に沿った自動フォーマットする方法
をもとに環境構築をし、子テーマを作る際にその環境で構築したところ、いくつかのエラーがありました。
代表的なものは下記の通りです。- スペースやインデントやタブ(ほぼこれ)
- function やclass やファイルの冒頭にコメントがない
- エスケープ漏れ
- 翻訳者向けのコメントがない
- フック名、変数名が lower_case でない
エスケープはセキュリティにも関わってくると思うので、できれば対処していただきたいと思います。
また、スペースやインデントやタブをしっかりつけることで個人的にはかなり見やすくなった気がします。気が向いたとき(夏の全スキン改修に合わせて)に対応していただければ幸いです。
また、子テーマ & スキン を適用した状態でカスタマイザーを開くと、
いくつかのスクリプトに読み込みエラーが発生します。- admin-widget-color.min.js
- header-top-customizer.js
どうやら、存在しないプラグインの領域から読み込もうとしているようです。
どちらも、class-**.phpで(改めて?)ファイルの位置を取得しているのが原因のようです。こちらも気が向いたときに対応していただければ幸いです。
2019年5月2日 10:48 PM #16158スペースやインデントやタブ(ほぼこれ)
→ 一括で自動整形を全部かけると気づかないエラーを引き起こすかもしれないので、編集したファイルのみ都度自動整形をかけています。
function やclass やファイルの冒頭にコメントがない
→ 善処します。
エスケープ漏れ
→ エスケープ漏れのないようにとは思っていますが、エスケープ漏れに気付きましたらGitHub(Lighhhtningのリポジトリあるいはhttps://github.com/vektor-inc/vektor-wp-libraries )などでプルリクエストいただけると助かります。
翻訳者向けのコメントがない
→ _x() 関数の第2引数などの事ですか?
フック名、変数名が lower_case でない
→ 既存ユーザーの事を考えると今の段階で変更すると互換を保つために旧関数・フック名をサポートする処理をたくさんいれないといけなくなって余計カオスになるのでLightningでの命名ルール変更に手を出すより別のテーマを作成した方が良いと考えているので、影響範囲の小さい部分は気づいた時に対応していますが、基本的にはLightningでの変更はあまり考えていません。
- この返信は5年、 5ヶ月前に石川@Vektor,Inc.が編集しました。
2019年5月3日 6:46 AM #16160
DRILL LANCERモデレーター翻訳者向けのコメントがない
→ _x() 関数の第2引数などの事ですか?
翻訳者向けのコメントがないで私が子テーマを作成する際にで遭遇したのは
/** * Category and Tax Data */ $args = array( 'template' => __( '<dl><dt>%s</dt><dd>%l</dd></dl>', 'lightning' ), 'term_template' => '<a href="%1$s">%2$s</a>', );
の部分のみです。
エスケープ漏れ
→ エスケープ漏れのないようにとは思っていますが、エスケープ漏れに気付きましたらGitHub(Lighhhtningのリポジトリあるいはhttps://github.com/vektor-inc/vektor-wp-libraries )などでプルリクエストいただけると助かります。
Githubを本格的に使ったことがないのと(興味はある)、
チームの一員でもない一ユーザーが勝手にブランチを作ってプルリクエストをするのは
なんとなくはばかられたので今回はここで書かせていただきます。とりあえず、気になったのはindex.phpの現状が下記のようになっている部分で、
<div class="col-md-8 mainSection" id="main" role="main"> <?php /*-------------------------------------------*/ /* Archive title /*-------------------------------------------*/ $page_for_posts = lightning_get_page_for_posts(); // Use post top page( Archive title wrap to div ) if ( $page_for_posts['post_top_use'] || get_post_type() != 'post' ) { if ( is_year() || is_month() || is_day() || is_tag() || is_author() || is_tax() || is_category() ) { $archiveTitle = get_the_archive_title(); $archiveTitle_html = '<header class="archive-header"><h1>' . $archiveTitle . '</h1></header>'; echo apply_filters( 'lightning_mainSection_archiveTitle', $archiveTitle_html ); } } /*-------------------------------------------*/ /* Archive description /*-------------------------------------------*/ if ( is_category() || is_tax() || is_tag() ) { $category_description = term_description(); $page = get_query_var( 'paged', 0 ); if ( ! empty( $category_description ) && $page == 0 ) { $archiveDescription_html = '<div class="archive-meta">' . $category_description . '</div>'; echo apply_filters( 'lightning_mainSection_archiveDescription', $archiveDescription_html ); } } $postType = lightning_get_post_type(); do_action( 'lightning_loop_before' ); ?> <div class="postList">
上記を下記のように変更してみると良いかもしれません。
<div class="col-md-8 mainSection" id="main" role="main"> <?php // Archive title. $page_for_posts = lightning_get_page_for_posts(); // Use post top page( Archive title wrap to div ). if ( $page_for_posts['post_top_use'] || get_post_type() !== 'post' ) { if ( is_year() || is_month() || is_day() || is_tag() || is_author() || is_tax() || is_category() ) { $archiveTitle = get_the_archive_title(); $archiveTitle_html = '<header class="archive-header"><h1>' . $archiveTitle . '</h1></header>'; } } echo wp_kses_post( apply_filters( 'lightning_mainSection_archiveTitle', $archiveTitle_html ) ); // Archive description. if ( is_category() || is_tax() || is_tag() ) { $category_description = term_description(); $page = get_query_var( 'paged', 0 ); if ( ! empty( $category_description ) && $page_number == 0 ) { $archiveDescription_html = '<div class="archive-meta">' . $category_description . '</div>'; } } echo wp_kses_post( apply_filters( 'lightning_mainSection_archiveDescription', $archiveDescription_html ) ); $postType = lightning_get_post_type(); do_action( 'lightning_loop_before' ); ?> <div class="postList"> <?php if ( have_posts() ) : ?>
変更点は以下のとおりです。
apply_filters()
の外側にwp_kses_post()
をつけることでエスケープapply_filters()
の部分をif文の外側に出すことで$archiveTitle_html
や$archiveDescription_html
を外から上書き可能に
特に、2番目はLightning Skin Variety において
アーカイブタイトル・説明の扱いをおかしくせざるをえなかった原因を修正できます。2019年5月4日 1:42 AM #16168翻訳者向けのコメントがないで私が子テーマを作成する際にで遭遇したのは
/** * Category and Tax Data */ $args = array( 'template' => __( '<dl><dt>%s</dt><dd>%l</dd></dl>', 'lightning' ), 'term_template' => '<a href="%1$s">%2$s</a>', );
→ これは、「 %s や %l 」 って何だ? というような疑問という意味ですか?
もしそうだとしたら、どちらかと言うとWordPress標準の get_the_taxonomies() 関数の話なのと、
ソースコード内の日本語は「公式ディレクトリ登録テーマ」の領域だと Theme Check で突っ込まれたりするので、かと言って英語で説明するのはコストと需要のバランスが合わないなどの理由で特に書いていないという感じです。Githubを本格的に使ったことがないのと(興味はある)、
チームの一員でもない一ユーザーが勝手にブランチを作ってプルリクエストをするのは
なんとなくはばかられたので今回はここで書かせていただきます。あー、いえいえ、GitHubはむしろチーム外の人が改善提案や不具合の修正をリクエストするためのものだと僕は認識しているので、極めてRICKさん向けのモノだと思います。
修正や改善コードをプルリクエストしたからといってもそれがいきなり本体に取り込まれるわけでは当然なくって、プルリクの内容が良くなる提案&設計思想的に合致する内容だったり、不具合に対する修正コードだと確認したらそれを取り込むみたいな形なので、特に不具合の修正プルリクエストはとても助かります。あと、フィルター関連からのエスケープ処理については、ちょっと僕もいろいろと確認したいのでまた後日改めます。
2019年5月9日 11:58 AM #16209フィルターは処理してリリースしました。
if文の中に入れているのは2ページ目以降は説明を表示の必要がないという理由によりますが
特に、2番目はLightning Skin Variety において
アーカイブタイトル・説明の扱いをおかしくせざるをえなかった原因を修正できます。これはどういった内容の事でしょうか?
2019年5月9日 2:20 PM #16216
DRILL LANCERモデレーター<div class="col-md-8 mainSection" id="main" role="main"> <?php /*-------------------------------------------*/ /* Archive title /*-------------------------------------------*/ $page_for_posts = lightning_get_page_for_posts(); // Use post top page( Archive title wrap to div ) if ( $page_for_posts['post_top_use'] || get_post_type() != 'post' ) { if ( is_year() || is_month() || is_day() || is_tag() || is_author() || is_tax() || is_category() ) { $archiveTitle = get_the_archive_title(); $archiveTitle_html = '<header class="archive-header"><h1>' . $archiveTitle . '</h1></header>'; echo apply_filters( 'lightning_mainSection_archiveTitle', $archiveTitle_html ); } } /*-------------------------------------------*/ /* Archive description /*-------------------------------------------*/ if ( is_category() || is_tax() || is_tag() ) { $category_description = term_description(); $page = get_query_var( 'paged', 0 ); if ( ! empty( $category_description ) && $page == 0 ) { $archiveDescription_html = '<div class="archive-meta">' . $category_description . '</div>'; echo apply_filters( 'lightning_mainSection_archiveDescription', $archiveDescription_html ); } } $postType = lightning_get_post_type(); do_action( 'lightning_loop_before' ); ?> <div class="postList">
上記の場合、apply_filtersがif文のにあるので、
外部からis_search()やis_404()のアーカイブタイトル表示を上書きしようとしても
if文の条件を満たしていないので無視されます。<div class="col-md-8 mainSection" id="main" role="main"> <?php // Archive title. $archiveTitle = ''; $archiveTitle_html = ''; $page_for_posts = lightning_get_page_for_posts(); // Use post top page( Archive title wrap to div ). if ( $page_for_posts['post_top_use'] || get_post_type() !== 'post' ) { if ( is_year() || is_month() || is_day() || is_tag() || is_author() || is_tax() || is_category() ) { $archiveTitle = get_the_archive_title(); $archiveTitle_html = '<header class="archive-header"><h1>' . $archiveTitle . '</h1></header>'; } } echo wp_kses_post( apply_filters( 'lightning_mainSection_archiveTitle', $archiveTitle_html ) ); // Archive description. $archiveDescription_html=''; if ( is_category() || is_tax() || is_tag() ) { $category_description = term_description(); $page = get_query_var( 'paged', 0 ); if ( ! empty( $category_description ) && $page_number == 0 ) { $archiveDescription_html = '<div class="archive-meta">' . $category_description . '</div>'; } } echo wp_kses_post( apply_filters( 'lightning_mainSection_archiveDescription', $archiveDescription_html ) ); $postType = lightning_get_post_type(); do_action( 'lightning_loop_before' ); ?> <div class="postList"> <?php if ( have_posts() ) : ?>
上記のようにapply_filtersを外に出しても$archiveTitle_htmlや
$archiveDescription_htmlはif文の中で定義されるので影響が出ません。
つまり、2ページ目以降も表示されないままとなります。また、こちらの場合は外部からis_search()やis_404()のアーカイブタイトル表示における
定義の上書きも受け付けるようになるのでこちらのほうが汎用性が高くなると思います。P.S.
$archiveTitle_html = '';
のように変数を初期化をしているのは、
if文でタイトル等が定義されずに変数がnullの状態で放置されエラーが出るのを防ぐ意味があります。2019年5月9日 3:09 PM #16219echo / filter を外に移動しました。
下記で動作問題ないかご確認よろしくお願いいたします。↓
https://github.com/vektor-inc/Lightning/pull/267/files
https://github.com/vektor-inc/Lightning/blob/index_filter/index.php
- この返信は5年、 5ヶ月前に石川@Vektor,Inc.が編集しました。
2019年5月9日 7:53 PM #16226
DRILL LANCERモデレーター問題なく動作することを確認いたしました。
ご対応ありがとうございました。 -
投稿者投稿
- このトピックに返信するにはログインが必要です。