コーディングめも

…バラバラに散らばったメモたち…😅
最近使って便利だなと思ったコーディングの際に使う便利なもの

CSS

Subsequent-sibling combinator(後続兄弟コンビネータ)

後続兄弟?

selector ~ after

selectorの後に続くafterへの指定。
連続するafterへのスタイルを設定する。なんだかむか〜し見た記憶はあったけど、今まで使ってなかった & 忘れ去っていた 😅

https://drafts.csswg.org/selectors-3/#general-sibling-combinators

異なる文字コードへフォームデータ送信

JavaScript で複数の文字コードをform から送信する方法

別サイトへフォームを送信する際、文字コードが違う場合設定。
今回知った。あっさり解決 😄

script_loader_tag()

script_loader_tag | Hook | WordPress Developer Resources

よく<script>タグへasyncやdefer属性をjsへ追加する記事がありますが、今回は、charset=”Shift-JIS”を追加。

全てのjsへ追加する場合は問題ないけど、特定のjsに絞る場合、その他が当然必要。
しかし、is_admin()判定入れとかないと、管理画面に使われるjsにも影響が出る 😅
今回はGutenbergのjsに思いっきり影響出て、投稿画面(post.php, new-post.phpなど)が真っ白になってしまった…😅

/**
* Add some attributes to link elements.
* @param $tag
* @param $handle
* @param $src
*
* @return string
*/
function add_charset_script( $tag, $handle, $src ) {

if ( ! is_admin() ) {

$js_slug = array();
$option = get_option( 'sc_c_settings' );
$js_path_count = count( $option['sc_c_pc_js_field'] );

for ( $i = 0; $i <= $js_path_count; $i ++ ) {
$js_slug[] = 'from_js_' . $i;
}

if ( in_array( $handle, $js_slug ) ) {
$tag = '<script src="/" . $src . '" charset="Shift_JIS"></script>' . "\n";
} else {
$tag = '<script src="/" . $src . '"></script>' . "\n";
}

}

return $tag;

}
add_filter( 'script_loader_tag', 'add_charset_script', 10, 3 );

って感じでフロント側だけで良い場合はis_admin()で切り分けておく。

DOMDocument::loadHTML

PHP: DOMDocument::loadHTML – Manual
DOMDocument::loadHTML — 文字列から HTML を読み込む

$response = wp_remote_get( $url_field, $remote_get_args );
$dom      = new DOMDocument;
$dom->loadHTML( $html );

って感じでHTMLをパースするんだけど、

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';'

なエラー吐いたりする。。。

この関数は、文字列 source に含まれる HTML を パースします。XML を読み込む場合とは異なり、妥当な HTML でなくても 読み込むことができます。この関数をスタティックにコールすると、 読み込んだ内容をもとに DOMDocument オブジェクトを作成します。 読み込み前に DOMDocument のプロパティを 設定する必要がない場合に、スタティックに実行することがあるでしょう。

http://php.net/manual/ja/domdocument.loadhtml.php

とあるように、とにかく読み込んでくれるみたい 😅
エラー制御演算子使えば良いんだろうけど、、Debug Barなどで盛大にエラー出る。当たり前だけどw

$response = wp_remote_get( $url_field, $remote_get_args );
@$dom      = new DOMDocument;
$dom->loadHTML( $html );

PHP: エラー制御演算子 – Manual

PHP はエラー制御演算子(@)をサポートしています。PHP の式の前に付けた場合、 その式により生成されたエラーメッセージは無視されます。

http://php.net/manual/ja/language.operators.errorcontrol.php

ってことで、libxml_use_internal_errorsを使うことにする。

PHP: libxml_use_internal_errors – Manual

libxml_use_internal_errors — libxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにする

http://php.net/manual/ja/function.libxml-use-internal-errors.php
$response = wp_remote_get( $url_field, $remote_get_args );
$html = wp_remote_retrieve_body( $response );
libxml_use_internal_errors( true );
$dom = new DOMDocument;
$dom->loadHTML( $html );

こんな感じ。これでDebug Barにも出ず、libxml_get_errors() で確認もOK 😄