…バラバラに散らばったメモたち…😅
最近使って便利だなと思ったコーディングの際に使う便利なもの
目次
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 はエラー制御演算子(@)をサポートしています。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 😄