BLOG 2024.01.29

Web作業メモとか

By

作品を掲載しているウェブサイト(tetsuro-ohashi.com)をリニューアルしようと思い立ちデザインを検討。

みんなが使い慣れていて、自作のアイデアの「拡散したり受容するイメージ」が伝わる(っぽい)ものはなにかと考え、Google 検索のUIをパクるかなと考えてみた。

けれど、現在Wordpressで実装されているページなので、詳細の読み込みの際にリロードを伴う・・・

最近Vue+REST APIで実装することも多いので、せっかくなのでWP Rest APIを使って今回もWP環境はそのままAPI返すようにしてVue化してみる。

今後の改修でも自由度高まるだろうし、もったりしたphpとおさらばできるといいな。

Github Actionsで自動デプロイ

tetsuro-ohashi.comのあるサーバーにはサブディレクトリにも色々作っているし、このままサーバーにデプロイしたい。

今まではNetlifyやheroku、cloudflare workersにデプロイしていたので特に面倒なことはなかったが、ちょっとした初トライになる。

 

参考にしたサイト

https://qiita.com/topi_log/items/23e59ed4cfa7fc8c97c6

 

上記サイトを見ながら作った最終的なdeploy.yml

name: FTP Deploy and Push
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name:  npm i && npm run build
        run: npm i && npm run build
        env:
          API_POST_URL: ${{ secrets.API_POST_URL }}
      - name:  git-ftp push
        uses: SamKirkland/FTP-Deploy-Action@2.0.0
        env:
          FTP_SERVER: ${{ secrets.FTP_HOST }}
          FTP_USERNAME: ${{ secrets.FTP_USER }}
          FTP_PASSWORD: ${{ secrets.FTP_PWD }}
          LOCAL_DIR: dist
          REMOTE_DIR: ${{ secrets.FTP_DEPLOY_PATH }}

local環境と本番環境でエンドポイントを変えたかったので、buildする際にenvを読むようにした。

build時にenv読み込みの参考にしたサイト

https://qiita.com/sho_fcafe/items/6ef087cb3b1586464175

 

全件取得&必要な情報のみに変更

WP Rest APIは必要ない情報も取得されるので、とりあえず一覧用と詳細用でエンドポイントを分けてみる。

詳細用はデフォルトのWP Rest APIを使うとして、全件取得用のAPIを作成。


function custom_api_get_all_posts() {
  register_rest_route( 'wp/v2/posts', '/allposts', array(
    'methods' => 'GET',
    'callback' => 'custom_api_get_all_posts_callback'
  ));
}
add_action( 'rest_api_init', 'custom_api_get_all_posts' );

function custom_api_get_all_posts_callback( $request ) {
  $posts_data = array();
  $posts = get_posts( array(
      'posts_per_page' => -1
    )
  );
  foreach( $posts as $post ) {
    $id = $post->ID;

    $thumbnail_url = array();
    $thumbnail_id = get_post_thumbnail_id($id);
    $thumbnail_sizes = get_intermediate_image_sizes();
    foreach ( $thumbnail_sizes as $size ) {
      //アイキャッチ画像の情報を取得
      $info = wp_get_attachment_image_src($thumbnail_id, $size);

      //アイキャッチ画像の情報の内訳
      $url = $info[0];
      $width = $info[1];
      $height = $info[2];

      //このサイズでのアイキャッチ情報
      $current = array();

      $current['url'] = $url;
      $current['width'] = $width;
      $current['height'] = $height;

      $thumbnail_url[$size] = $current;
    }

    $posts_data[] = (object) array(
      'id' => $id,
      'slug' => $post->post_name,
      'title' => $post->post_title,
      'date' => $post->post_date,
      'thumbnail_url' => $thumbnail_url
    );
  }
  return $posts_data;
}

 

参考にしたサイト

https://dev.ore-shika.com/post/wp-rest-thumbnail/

Written by
美術をやってます。絵を描いてます。たまに音楽を作ってます。
  • soundcloud
  • twitter
  • instagram
  • instagram