View Transitions API 初回アクセスはcssフェードインさせる

Filed under: css,View Transitions API — kdcs @ 2026年2月24日 火曜日

【実行中 2026.2.25】
View Transitions APIはページ遷移でのトランジション制御なので最初にウェブサイトにアクセスしたときは何も実行されない。
そこで初回アクセスだけcssでフェードインさせて、以降のページ遷移ではView Transitions APIを使うように設定する。

あらかじめhtmlに「visit」というクラスを付けておくページ遷移を行う際、javascriptで「visit」を「view」に切り替える。
visit = 初回のみのcssフェードイン(View Transitions APIを無効化)
view = View Transitions APIを有効化

html

<html lang="ja" class="visit">

css

/* 初回だけ wrapper をフェードイン */
.visit #wrapper {
  animation: fadein 1s ease-in forwards;
}

@keyframes fadein {
  0% { opacity: 0.01; }
  20% { opacity: 0.01; }
  100% { opacity: 1; }
}

/* 2回目以降のページ遷移に View Transitions を適用 */
@view-transition {
  navigation: auto;
}

/* 初回は View Transitions を無効化 */
.visit @view-transition {
  navigation: none;
}

/* フェードのみ */
::view-transition-old(root),
::view-transition-new(root) {
  animation-duration: 0.6s; /* フェード時間 */
  animation-timing-function: ease-in-out;
}
/* フェード+ズーム */
@keyframes zoom-fade-in {
  from { opacity: 0; transform: scale(0.90); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes zoom-fade-out {
  from { opacity: 1; transform: scale(1); }
  to   { opacity: 0; transform: scale(1.10); }
}

::view-transition-new(root) {
  animation: zoom-fade-in 0.5s ease;
}

::view-transition-old(root) {
  animation: zoom-fade-out 0.4s ease;
}

javascript

// すでに訪問済みなら visit をviewに入れ替え
if (sessionStorage.getItem("visited")) {
  document.documentElement.classList.remove("visit");
  document.documentElement.classList.add("view");
} else {
  // 初回アクセス
  sessionStorage.setItem("visited", "true");
}

View Transitions API 導入ガイド

Filed under: css,View Transitions API — kdcs @ 2026年2月22日 日曜日

View Transitions APIの使い方

headのmetaタグに以下を追加する

<meta name="view-transition" content="same-origin">

common.cssに以下を追加

@view-transition {
  navigation: auto;
}

::view-transition-old(root) と ::view-transition-new(root) を使用して、transitionの設定を行う
(root)はページ全体のtransitionの場合に記述する
要素個別に設定する場合は()内はユニークな名前を付けて運用する

例はフェードズームアウトからのフェードズームイン

/* フェード+ズーム */
@keyframes zoom-fade-in {
  from { opacity: 0; transform: scale(0.90); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes zoom-fade-out {
  from { opacity: 1; transform: scale(1); }
  to   { opacity: 0; transform: scale(1.10); }
}

::view-transition-new(root) {
  animation: zoom-fade-in 0.5s ease;
}

::view-transition-old(root) {
  animation: zoom-fade-out 0.4s ease;
}

WordPress の「動的に生成される一覧ページ」と「個別ページ」で View Transitions API 用の固有クラス(または view-transition-name)を自動付与する方法

一覧の画像のview-transition-nameに投稿IDを付与する方法

<?php while ( have_posts() ) : the_post(); ?>
  <?php $id = get_the_ID(); ?>

  <a href="<?php the_permalink(); ?>">
    <img 
      src="<?php echo get_the_post_thumbnail_url(); ?>"
      class="product-img"
      view-transition-name="product-<?php echo $id; ?>"
    >
  </a>

<?php endwhile; ?>

個別ページで画像のview-transition-nameに投稿IDを付与する方法

<?php $id = get_the_ID(); ?>

<img 
  src="<?php echo get_the_post_thumbnail_url(); ?>"
  class="product-img"
  view-transition-name="product-<?php echo $id; ?>"
>

View Transitions APIのためにクラスを動的に付ける必要はなく、必要なのは view-transition-name のユニーク性だけなのでクラスを動的にする必要性は低い。

XAMPPをCドライブからDドライブに移して使うための修正

Filed under: xampp — kdcs @ 2026年2月1日 日曜日

通常Cドライブに設置するXAMPPをDドライブに移動して利用する場合に修正しなけてばならない部分。
※簡単だと思ってメモしていなかった。最新状態のXAMPPを別PCからコピーしたときにDドライブ設定が上書きされてしまっていたので433エラーになりウェブサイトが表示できなくて解決に時間がかかったので記述。

httpd.confファイルのドキュメントルートとディレクトリを「D:」にする
apache/conf/httpd.conf
252行付近

DocumentRoot "D:/xampp/htdocs"
<Directory "D:/xampp/htdocs">

httpd-ssl.confファイルのバーチャルホストのドキュメントルートを「D:」にする
ファイル最下部

<VirtualHost *:443>
    DocumentRoot "D:/xampp/htdocs"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>

metaプロパティの出力(カスタム投稿タイプ対応)

Filed under: 未分類 — kdcs @ 2025年12月24日 水曜日

カスタム投稿タイプの「meta property=”og:description”」などのmetaプロパティをシングルページで出力させる方法。

まずは、デフォルトの投稿タイプ(post)を「&&is_singular(‘post’)」で設定する必要がある

if (is_single()&&is_singular('post')){
if(have_posts()): while(have_posts()): the_post();
echo '<meta property="og:title" content="'; the_title(); echo '">';echo "\n";
echo '<meta property="og:description" content="'.mb_substr(get_the_excerpt(), 0, 120).'">';echo "\n";
echo '<meta property="og:url" content="'; the_permalink(); echo '">';echo "\n";
echo '<meta property="og:type" content="article">';echo "\n";
endwhile; endif;
}

続けて、カスタム投稿タイプ
※descriptionを投稿内の文章から取得する場合はデフォルトと同じです。
例:カスタム投稿タイプが「catering_plan」で、descriptionをカスタムフィールド「delivery_note」から取得し、100文字以内で区切りのいいところでカットするという方法。(区切りとは「、」や「。」の句読点)

if (is_single() && is_singular('catering_plan')) {
    if (have_posts()): while (have_posts()): the_post();

        // 元のテキスト取得
        $text_items = get_field('delivery_note');

        // 改行削除 → タグ削除 → 連続スペース削除
        $text_items = wp_strip_all_tags($text_items);
        $text_items = preg_replace('/\s+/', ' ', $text_items);
        $text_items = trim($text_items);

        // 100文字で一旦切る
        $short = mb_substr($text_items, 0, 100);

        // 最後の句読点以降を削除して自然な文章にする
        $description = preg_replace('/[^、。..!?!?]*$/u', '', $short);

        // もし句読点が見つからず空になった場合は100文字そのまま
        if ($description === '') {
            $description = $short;
        }

        echo '<meta property="og:title" content="'; the_title(); echo '">' . "\n";
        echo '<meta property="og:description" content="' . esc_attr($description) . '">' . "\n";
        echo '<meta property="og:url" content="'; the_permalink(); echo '">' . "\n";
        echo '<meta property="og:type" content="article">' . "\n";

    endwhile; endif;
}

管理画面のカテゴリー一覧から特定のカテゴリーを除外

Filed under: functions.php — kdcs @ 2025年12月22日 月曜日

ダミーのカテゴリーを作成した場合、そのカテゴリーをチェックリストから非表示する方法。

functions.php

function hide_specific_category_in_editor( $args, $taxonomy ) {
    if ( 'category' === $taxonomy ) {
        // 非表示にしたいカテゴリーIDを指定
        $args['exclude'] = array( 123 );
    }
    return $args;
}
add_filter( 'wp_terms_checklist_args', 'hide_specific_category_in_editor', 10, 2 );

この方法のメリット
・完全にチェックリストから消える
・CSS のように「見えないけど存在する」状態ではなく、UI から除外される

サイト内検索

カテゴリー

最近の投稿

↑上に戻る