私が見た解決策は、テーマにjavascript機能を追加するという観点からのものです。しかし、OPは具体的に、「単一のWordPressページにどのように正確に追加するのですか?」と尋ねました。これは、Wordpressブログでjavascriptを使用する方法のように聞こえます。ここでは、個々の投稿にjavascriptを利用した「ウィジェット」が異なる場合があります。たとえば、投稿では、ユーザーが変数(スライダー、チェックボックス、テキスト入力フィールド)を変更し、結果をプロットまたは一覧表示できる場合があります。
JavaScriptの観点から始める:
- JavaScript関数を別の「.js」ファイルに記述します
投稿のhtmlに重要なJavaScriptを含めることさえ考えないでください。コードを使用して、1つまたは複数のJavaScriptファイルを作成してください。
- JavaScriptを投稿のhtmlとインターフェースします
JavaScriptウィジェットがHTMLコントロールおよびフィールドと相互作用する場合は、JavaScriptからこれらの要素をクエリおよび設定する方法と、UI要素にJavaScript関数を呼び出させる方法を理解する必要があります。ここにいくつかの例があります。まず、JavaScriptから:
var val = document.getElementById(“AM_Freq_A_3”).value;
そしてhtmlから:
<input type="range" id="AM_Freq_A_3" class="freqSlider" min="0" max="1000" value="0" oninput='sliderChanged_AM_widget(this);'/>
- jQueryを使用してJavaScriptウィジェットの初期化関数を呼び出します
ページの準備ができたときにJavaScriptウィジェットを構成および描画する関数の名前を使用して、これを.jsファイルに追加します。
jQuery(document).ready(function( $ ) {
your_init_function();
});
- 投稿のhtmlコードで、投稿に必要なスクリプトをロードします
Wordpressコードエディターでは、通常、投稿の最後にスクリプトを指定します。たとえば、メインディレクトリにscriptsフォルダがあります。内部には、私の投稿の一部が共有する可能性のある共通のJavaScriptを含むユーティリティディレクトリがあります。この場合は、独自の数学ユーティリティ関数とflotr2プロットライブラリの一部です。たとえば、メディアマネージャーを使用する代わりに、日付に基づいたサブディレクトリを使用して、投稿固有のJavaScriptを別のディレクトリにグループ化する方が便利だと思います。
<script type="text/javascript" src="/scripts/utils/flotr2.min.js"></script>
<script type="text/javascript" src="/scripts/utils/math.min.js"></script>
<script type="text/javascript" src="/scripts/widgets/20161207/FreqRes.js"></script>
- jQueryをエンキューする
WordpressはjQueryを登録しますが、Wordpressにキューに入れて必要であると指示しない限り、jQueryは使用できません。そうしないと、jQueryコマンドは失敗します。多くのソースでは、このコマンドをfunctions.phpに追加する方法を説明していますが、他の重要な詳細を知っていることを前提としています。
まず、テーマを編集することはお勧めできません。テーマを今後更新すると、変更が消去されます。子のテーマを作成します。方法は次のとおりです。
https://developer.wordpress.org/themes/advanced-topics/child-themes/
子のfunctions.phpファイルは、同じ名前の親テーマのファイルをオーバーライドせず、それに追加します。子テーマのチュートリアルでは、親と子のstyle.cssファイルをキューに入れる方法を提案しています。その関数に別の行を追加するだけで、jQueryをエンキューすることもできます。子テーマのfunctions.phpファイル全体は次のとおりです。
<?php
add_action( 'wp_enqueue_scripts', 'earlevel_scripts_enqueue' );
function earlevel_scripts_enqueue() {
// styles
$parent_style = 'parent-style';
wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'child-style',
get_stylesheet_directory_uri() . '/style.css',
array( $parent_style ),
wp_get_theme()->get('Version')
);
// posts with js widgets need jquery
wp_enqueue_script('jquery');
}