カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

nth-childやnth-of-type等を上手に使う

CSSのnth-childnth-of-type等の擬似要素を使えば兄弟要素の何番目の要素に対してのみスタイルを適用する等、理解して使えば柔軟なスタイル設定が可能です。
自身の備忘録のためにも書き留めておきたいと思います。

:first-child, :first-of-type

兄弟要素のうち最初の要素を指定します。
■□□□□□□□□□□

:last-child, :last-of-type

兄弟要素のうち最後の要素を指定します。
□□□□□□□□□□■

:nth-child(A), :nth-of-type(A)

兄弟要素のうちA番目の要素を指定します。
□□■□□□□□□□□

:nth-last-child(n), :nth-last-of-type(n)

兄弟要素のうち最後からn番目の要素を指定します。
□□□□□□□□■□□

:nth-child(-n+A), :nth-of-type(-n+A)

兄弟要素のうち先頭からA個の要素を指定します。
■■■□□□□□□□□

:nth-child(n+A), :nth-of-type(n+A)

続きを読む…»

43 views

wp_nav_menu()を使わずにメニューをカスタマイズ表示

WordPressのメニューを表示する際、wp_nav_menuメソッドを使って表示することがあると思います。
その際の例

wp_nav_menu( array( 'menu' => 'GlobalMenu', 'menu_id' => 'global_navi', 'container_class' => 'global_navigation' ) );

wp_nav_menuではidやクラス等、ある程度はパラメータを与えることでカスタマイズ出来るようになっています。
しかし、例えばメニューアイテムの最後に任意のアイテムを追加で表示させたいなど、柔軟なカスタマイズをすることが出来ません。

そんな柔軟なカスタマイズを行いたいときの手法をご紹介します。

順に解説していきますが、実際には一連の処理をfunctions.phpにカスタムメソッドとして作成し、メニューを表示したい任意の箇所で実行してください。

解説

メニュー名を指定し、wp_get_nav_menu_objectメソッドでメニュー情報を取得します。
※メニュー名は[外観]->[メニュー]->[メニュー構造]で設定しているメニュー名を指定してください。

// メニュー名
$menu_name = 'GlobalMenu';
// メニュー情報取得
$menu = wp_get_nav_menu_object($menu_name);

取得したメニュー情報を基にメニューアイテムを取得します。

// メニューアイテム取得
$menu_items = wp_get_nav_menu_items($menu->term_id);

取得したメニューアイテムの情報にCSSクラスの情報がありますが、この段階では[外観]->[メニュー]->[メニュー構造]の各項目で設定したCSS class(オプション)で指定したクラスしか設定されていません。
wp_nav_menuでメニューを表示したときはWordPressが自動的に設定してくれているクラスが含まれています。
そのクラスも含めて設定して欲しいときは_wp_menu_item_classes_by_contextメソッドを実行し、本来wp_nav_menuでなら適用されるクラスを反映させます。
但し、このメソッドは公式ガイドにはプライベートだと書かれておりテーマ開発者の実行を想定していないそうなので、今後使えなくなったりする可能性はあります。

// 自動で割り当てられるWP独自クラスを反映させる
_wp_menu_item_classes_by_context($menu_items);

続いてdiv等でラッピングしつつ、リストを作成していきます。

echo '<div class="global_navigation">';
echo '<ul id="global_navi" class="menu">';

又、先ほど実行した_wp_menu_item_classes_by_contextだけではmenu-item-メニューIDクラスが追加されていないので、こちらは手動で追加します。

// クラス用配列
$current_classes = [];

ループでメニューアイテムを取り出していきます。

foreach ( (array) $menu_items as $key => $menu_item ) {

    // クラス用配列にmenu-item-メニューIDを追加
    $current_classes = array_merge($menu_item->classes, ['menu-item-'.$menu_item->ID]);

    echo '<li class="' . implode(' ', $current_classes) . '">';
    echo '<a href="' . $menu_item->url . '"' . (($menu_item->current) ? ' aria-current="page"' : '') . '>' . $menu_item->title . '</a>';
    echo '</li>';
}

ループでメニューアイテムの取り出しが一通り終わったところで、追加アイテムを書き出します。

echo '<li>追加メニューアイテム</li>';

最後にHTMLタグを閉じます。

echo '</ul>';
echo '</div>';

以上でカスタマイズしたメニューを表示することが出来ます。

wp_get_nav_menu_object() – Function | Developer.WordPress.org
_wp_menu_item_classes_by_context() – Function | Developer.WordPress.org

44 views

テーブルのカラム名とデータ型を取得する

MySQLのシステムテーブルから指定したテーブルのカラム名とデータ型を取得します。

SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'テーブル名';
68 views

JavaScriptでの日付フォーマット

MySQL等から返されるハイフン区切りの日付をJavaScriptでスラッシュ区切りにしたいことがあったので、その方法をご紹介します。

まず単純な方法であれば文字列分割&結合でやることも可能です。

console.log('2024-08-29'.split('-').join('/'));
// 2024/08/29

別な方法としてDateオブジェクトを使って実装してみたいと思います。
toLocaleDateStringを使いロケールに日本を指定して実行してみます。

let date = new Date('2024-08-29').toLocaleDateString('ja-JP');
console.log(date);
// 2024/8/29

スラッシュ区切りにはなりましたが、月が1桁になっています。
月を2桁で表示したい場合はtoLocaleDateStringメソッドの第2引数にオプションを指定します。

let date = new Date('2024-08-29').toLocaleDateString('ja-JP', { year: "numeric", month: "2-digit", day: "2-digit" });
console.log(date);
// 2024/08/29

これでyyyy/mm/ddの形式になりました。

参考URL:
Date.prototype.toLocaleDateString() – JavaScript | MDN

99 views

特定の日時を指定してコミットする

あまり使うことはないかもしれませんが、メモ代わりに投稿しておきます。

特定の日時を指定してコミットするには--dateオプションを使って日時を指定します。

git commit -m "コミットメッセージ" --date="Jan 1 00:00:00 2024 +0900"
143 views