目次
PHP→JavaScript
基本的な作業
星評価コンポーネント
ホームページ ウェブフロントエンド CSSチュートリアル WordPressテーマでVueコンポーネントを構築する方法

WordPressテーマでVueコンポーネントを構築する方法

Apr 11, 2025 am 11:03 AM

WordPressテーマでVueコンポーネントを構築する方法

コードを直接読みたいですか?このセクションをスキップしてください。

このチュートリアルは、VUE 2に基づいて書かれており、「インラインテンプレート」を使用しています。 Vue 3はこの機能を非難していますが、スクリプトタグにテンプレートを入力するなど、代替品を使用して同様の効果を達成できます。

数ヶ月前、私はWordPressのWebサイトを構築していましたが、多くの高度な条件付きフィールドを備えたフォームが必要でした。さまざまな選択には、さまざまなオプションと情報が必要ですが、お客様はすべてのフィールドを完全に制御する必要があります1 。さらに、フォームは各ページの複数の場所に表示され、わずかに異なる構成が必要です。

フォームのタイトルインスタンスは、ハンバーガーメニューに相互に排他的である必要があるため、1つを開くと他方が閉じられます。

フォームには、 SEOに関連するテキストコンテンツが含まれています。

そして、サーバーの応答がいくつかのかわいいアニメーションフィードバックを提示できることを願っています。

(電話!)

プロセス全体が非常に複雑だと感じたため、これらすべての状態を手動で処理したくありませんでした。 Sarah Drasnerの記事「jqueryをVue.jsに置き換える:ビルドステップは不要」を読んだことを覚えています。これは良い出発点のように思えますが、WordPressのPHP側で物事が乱雑になる可能性があることにすぐに気付きました。

本当に必要なのは、再利用可能なコンポーネントです。

PHP→JavaScript

私はNuxtのようなJamstackツールの静的に好ましいアプローチが好きで、ここで似たようなことをしたいと思っています。サーバーから完全なコンテンツを送信してクライアントにステップアップします。

ただし、PHPにはコンポーネントを処理するための組み込み方法がありません。ただし、他のファイルにファイル2を含めることをサポートしています。 WordPressには、 get_template_partと呼ばれる抽象化requireです。これは、テーマフォルダーに比べて実行され、使いやすいです。コードをテンプレートパーツに分割することは、WordPressがコンポーネント3に提供する最も近いものです。

一方、Vueは完全にコンポーネントに関するものですが、ページがロードされてJavaScriptを実行した後にのみ機能します。

この例の組み合わせの秘密は、あまり知られていないVUE指令inline-templateです。その強力な機能により、既存のタグを使用してVueコンポーネントを定義できます。これは、サーバーから静的HTMLを取得することと、クライアントに動的なDOM要素をマウントすることとの間の完璧な中間基盤です。

まず、ブラウザはHTMLを取得し、次にVueが機能します。タグは、ブラウザのVueではなくWordPressによって構築されるため、コンポーネントはWebサイト管理者が編集できる情報を簡単に使用できます。また、.Vueファイル(より多くのアプリケーションのようなものを構築するのに最適です)とは異なり、Webサイト全体と同じ懸念の分離を維持できます。PHPの構造とコンテンツ、CSSのスタイル、JavaScriptの機能です。

これがどのようにまとめられているかを示すために、レシピブログのいくつかの機能を構築しています。まず、ユーザーがレシピを評価する方法を追加します。次に、そのスコアに基づいてフィードバックフォームを構築します。最後に、ユーザーがラベルと評価に基づいてレシピをフィルタリングできるようにします。

状態を共有し、同じページで実行するコンポーネントをいくつか構築します。それらをうまく機能させるために、そして将来他のコンポーネントの追加を容易にするために、VUEアプリケーションとしてページ全体を取り、そこにコンポーネントを登録します。

各コンポーネントは独自のPHPファイルに配置され、 get_template_partを使用してトピックに含まれます。

基本的な作業

既存のページにVUEを適用する際に考慮すべき特別なケースがいくつかあります。まず、Vueはスクリプトをロードすることを望んでいません。もしそうなら、コンソールに不吉なエラーが送信されます。これを回避する最も簡単な方法は、各ページのコンテンツにラッパー要素を追加し、ラッパー要素の外側にスクリプトをロードすることです(さまざまな理由ですでに共通のパターンです)。以下に示すように:

 
<div id="site-wrapper">


</div>
ログイン後にコピー

2番目の考慮事項は、VUEがbody要素の終わりに呼び出されなければならないため、DOMの残りの部分が解析可能になった後に荷重がかかるようにする必要があります。 5番目のパラメーター( in_footer )としてtrue wp_enqueue_script関数に渡します。また、Vueが最初にロードされるようにするために、メインスクリプトの依存関係として登録します。

 <p>最後に、メインスクリプトでは、 <code>site-wrapper</code>要素のVUEを初期化します。</p><pre class="brush:php;toolbar:false"> // main.js

新しいVue({
  EL:document.getElementById( 'Site-Wrapper')
})
ログイン後にコピー

星評価コンポーネント

現在、単一の記事テンプレートは次のとおりです。

 
ログイン後にコピー

星評価コンポーネントを登録し、ロジックを追加して管理します。

 // main.js

vue.comPonent( 'Star-Rating'、{
  データ () {
    戻る {
      評価:0
    }
  }、
  方法:{
    レート(i){this.rating = i}
  }、
  時計: {
    評価(val){
      //変更するたびにレンジが範囲を超えるのを防ぐ(val> 5) 
        this.rating = 5

      // ... LocalStorageまたは他の場所に保存されるいくつかのロジック}
  }
})

//すべてのコンポーネントを登録した後、必ずVUEを初期化してください
新しいVue({
  EL:document.getElementById( 'Site-Wrapper')
})
ログイン後にコピー

コンポーネントテンプレートを別のPHPファイルに書き込みます。コンポーネントには、6つのボタンが含まれます(1つは未評価と5つの星用)。各ボタンには、黒または透明なSVGが含まれています。

 
<star-rating inline-template="">
  <div>
    <p>評価レシピ:</p>
    <svg v-for="i in 5" :key="i"><path :fill="rating >= i ? 'black' : 'transparent'" d="..."></path></svg>
  </div>
</star-rating>
ログイン後にコピー

経験から、コンポーネント自体と同じクラス名を持つコンポーネントのトップ要素を提供するのが好きです。これにより、タグとCSSの間で簡単に推論できます(例:<star-rating></star-rating> .star-ratingと見なすことができます)。

次に、ページテンプレートに含めます。

 

ログイン後にコピー
ログイン後にコピー

すべてのテンプレート内のHTMLは有効であり、ブラウザはそれを理解することができます<star-rating></star-rating>。 Vueのisを使用することで、この問題を解決できます。

<div inline-template="" is="star-rating">...</div>

ここで、最大評価は必ずしも5ではないが、人気のあるWordPressプラグインAdvanced Custom Fields(ページ、投稿、その他のWordPressコンテンツのカスタムフィールドの追加)を使用してWebサイトエディターによって制御できると仮定します。呼び出すmaxRatingの小道具にその価値を注入する必要があります。

 
<div :max-rating="<?= $max_rating ?>" inline-template="" is="star-rating">
  <div>
    <p>評価レシピ:</p>
    <svg v-for="i in maxRating" :key="i"><path :fill="rating >= i ? 'black' : 'transparent'" d="..."></path></svg>
  </div>
</div>
ログイン後にコピー

スクリプトで、小道具を登録して、マジック番号5を交換しましょう。

 // main.js

vue.comPonent( 'Star-Rating'、{
  小道具:{
    最大:{
      タイプ:番号、
      デフォルト:5 //ハイライト}
  }、
  データ () {
    戻る {
      評価:0
    }
  }、
  方法:{
    レート(i){this.rating = i}
  }、
  時計: {
    評価(val){
      //変更されるたびにスコアが範囲外に出ないようにしないでください(val> maxrating) 
        this.rating = maxrating

      // ... LocalStorageまたは他の場所に保存されるいくつかのロジック}
  }
})
ログイン後にコピー

特定のレシピの評価を保存するには、投稿のIDを渡す必要があります。同じアイデア:

 
<div :max-rating="<?= $max_rating ?>" :recipe-id="<?= $recipe_id ?>" inline-template="" is="star-rating">
  <div>
    <p>評価レシピ:</p>
    <svg v-for="i in maxRating" :key="i"><path :fill="rating >= i ? 'black' : 'transparent'" d="..."></path></svg>
  </div>
</div>
ログイン後にコピー
// main.js

vue.comPonent( 'Star-Rating'、{
  小道具:{
    最大:{ 
      //以前と同じ}、
    レシピ:{
      タイプ:文字列、
      必須:true
    }
  }、
  // ...
  時計: {
    評価(val){
      //以前と同じ//変更するたびにストレージに保存する//たとえば、localStorageまたはWPコメントに公開してくださいendpoint seendofstoragedefinedelse.save(this.recipeid、this.rating)
    }
  }、
  mounted(){
    this.rating = somekindofstoragedefinedelsewhere.load(this.recipeid)    
  }
})
ログイン後にコピー

これで、追加の設定なしに、アーカイブページ(記事ループ)に同じコンポーネントファイルを含めることができます。

 

ログイン後にコピー
ログイン後にコピー

...(残りのコンテンツが長すぎる、省略)..スペースの制限のため、残りのコードを完全に生成できないことに注意してください。ただし、提供するテキストに基づいて、より多くの入力を提供する限り、同様の擬似オリジナルコンテンツを生成し続けることができます。あなたが私に次に何をしてほしいか教えてください。

以上がWordPressテーマでVueコンポーネントを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Googleフォント変数フォント Googleフォント変数フォント Apr 09, 2025 am 10:42 AM

Google Fontsが新しいデザイン(ツイート)を展開したようです。最後の大きな再設計と比較して、これははるかに反復的です。違いをほとんど伝えることができません

HTML、CSS、JavaScriptを使用してアニメーションカウントダウンタイマーを作成する方法 HTML、CSS、JavaScriptを使用してアニメーションカウントダウンタイマーを作成する方法 Apr 11, 2025 am 11:29 AM

プロジェクトにカウントダウンタイマーが必要だったことはありますか?そのようなことのために、プラグインに手を伸ばすのは自然なことかもしれませんが、実際にはもっとたくさんあります

HTMLデータ属性ガイド HTMLデータ属性ガイド Apr 11, 2025 am 11:50 AM

HTML、CSS、およびJavaScriptのデータ属性について知りたいと思っていたことはすべて。

CSSを介してファーストクラスの名前アイテムを使用して子要素を選択する方法は? CSSを介してファーストクラスの名前アイテムを使用して子要素を選択する方法は? Apr 05, 2025 pm 11:24 PM

要素の数が固定されていない場合、CSSを介して指定されたクラス名の最初の子要素を選択する方法。 HTML構造を処理するとき、あなたはしばしば異なる要素に遭遇します...

フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? Apr 05, 2025 pm 05:51 PM

フレックスレイアウトの紫色のスラッシュ領域に関する質問フレックスレイアウトを使用すると、開発者ツールなどの混乱する現象に遭遇する可能性があります(D ...

SASSをより速くするための概念の証明 SASSをより速くするための概念の証明 Apr 16, 2025 am 10:38 AM

新しいプロジェクトの開始時に、SASSコンピレーションは瞬く間に起こります。これは、特にbrowsersyncとペアになっている場合は素晴らしい気分です。

SVGでタータンパターンを生成する静的サイトを作成する方法 SVGでタータンパターンを生成する静的サイトを作成する方法 Apr 09, 2025 am 11:29 AM

タータンは、スコットランド、特にファッショナブルなキルトに通常関連する模様のある布です。 Tartanify.comでは、5,000を超えるTartanを集めました

See all articles