Lightning と WordPress コーディング規約 と バグ

VWSとは フォーラム バグ報告と提案 Lightning と WordPress コーディング規約 と バグ

Lightning と WordPress コーディング規約 と バグ

8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • 投稿者
    投稿
  • #16150

    DRILL LANCER
    モデレーター

    をもとに環境構築をし、子テーマを作る際にその環境で構築したところ、いくつかのエラーがありました。
    代表的なものは下記の通りです。

    • スペースやインデントやタブ(ほぼこれ)
    • function やclass やファイルの冒頭にコメントがない
    • エスケープ漏れ
    • 翻訳者向けのコメントがない
    • フック名、変数名が lower_case でない

    エスケープはセキュリティにも関わってくると思うので、できれば対処していただきたいと思います。
    また、スペースやインデントやタブをしっかりつけることで個人的にはかなり見やすくなった気がします。

    気が向いたとき(夏の全スキン改修に合わせて)に対応していただければ幸いです。

    また、子テーマ & スキン を適用した状態でカスタマイザーを開くと、
    いくつかのスクリプトに読み込みエラーが発生します。

    • admin-widget-color.min.js
    • header-top-customizer.js

    どうやら、存在しないプラグインの領域から読み込もうとしているようです。
    どちらも、class-**.phpで(改めて?)ファイルの位置を取得しているのが原因のようです。

    こちらも気が向いたときに対応していただければ幸いです。

    #16158

    スペースやインデントやタブ(ほぼこれ)

    → 一括で自動整形を全部かけると気づかないエラーを引き起こすかもしれないので、編集したファイルのみ都度自動整形をかけています。

    function やclass やファイルの冒頭にコメントがない

    → 善処します。

    エスケープ漏れ

    → エスケープ漏れのないようにとは思っていますが、エスケープ漏れに気付きましたらGitHub(Lighhhtningのリポジトリあるいはhttps://github.com/vektor-inc/vektor-wp-libraries )などでプルリクエストいただけると助かります。

    翻訳者向けのコメントがない

    → _x() 関数の第2引数などの事ですか?

    フック名、変数名が lower_case でない

    → 既存ユーザーの事を考えると今の段階で変更すると互換を保つために旧関数・フック名をサポートする処理をたくさんいれないといけなくなって余計カオスになるのでLightningでの命名ルール変更に手を出すより別のテーマを作成した方が良いと考えているので、影響範囲の小さい部分は気づいた時に対応していますが、基本的にはLightningでの変更はあまり考えていません。

    #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 において
    アーカイブタイトル・説明の扱いをおかしくせざるをえなかった原因を修正できます。

    #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 で突っ込まれたりするので、かと言って英語で説明するのはコストと需要のバランスが合わないなどの理由で特に書いていないという感じです。

    https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_the_taxonomies

    Githubを本格的に使ったことがないのと(興味はある)、
    チームの一員でもない一ユーザーが勝手にブランチを作ってプルリクエストをするのは
    なんとなくはばかられたので今回はここで書かせていただきます。

    あー、いえいえ、GitHubはむしろチーム外の人が改善提案や不具合の修正をリクエストするためのものだと僕は認識しているので、極めてRICKさん向けのモノだと思います。
    修正や改善コードをプルリクエストしたからといってもそれがいきなり本体に取り込まれるわけでは当然なくって、プルリクの内容が良くなる提案&設計思想的に合致する内容だったり、不具合に対する修正コードだと確認したらそれを取り込むみたいな形なので、特に不具合の修正プルリクエストはとても助かります。

    あと、フィルター関連からのエスケープ処理については、ちょっと僕もいろいろと確認したいのでまた後日改めます。

    #16209

    フィルターは処理してリリースしました。

    if文の中に入れているのは2ページ目以降は説明を表示の必要がないという理由によりますが

    特に、2番目はLightning Skin Variety において
    アーカイブタイトル・説明の扱いをおかしくせざるをえなかった原因を修正できます。

    これはどういった内容の事でしょうか?

    #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の状態で放置されエラーが出るのを防ぐ意味があります。

    #16219

    echo / filter を外に移動しました。
    下記で動作問題ないかご確認よろしくお願いいたします。

    https://github.com/vektor-inc/Lightning/pull/267/files

    https://github.com/vektor-inc/Lightning/blob/index_filter/index.php

    #16226

    DRILL LANCER
    モデレーター

    問題なく動作することを確認いたしました。
    ご対応ありがとうございました。

8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • このトピックに返信するにはログインが必要です。