モーダルウィンドウにajaxを経由して記事本文を表示した際にプラグインが展開されない原因について教えていただきたいです。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 2,382
前提・実現したいこと
wordpress4.5にて、ポップアップした空のモーダルウィンドウに、ajaxで投稿記事本文をロードさせて表示させるコードを作っています。
発生している問題・エラーメッセージ
記事本文やcss、ファンクションに記述した一部のショートコードはモータルウィンドウに表示できるのですが、Crayon Syntax Highlighter等のプラグインがロードされずに困っています。
([php] [/php]がキャプチャされない。Table of Contents Plusプラグインの[TOC]はキャプチャされました。)
該当のソースコード
//モーダルウィンドウ作成スクリプト
//class:btnsがクリックされたらモーダルウィンドウがポップアップしてphpのview_pageloadを呼び出して表示
jQuery('.btns').live('click', function(e){
wn = '.' + $(this).data('tgt');
var mW = $(wn).find('.modalBody').innerWidth() / 2;
var mH = $(wn).find('.modalBody').innerHeight() / 2;
$(wn).find('.modalBody').css({'margin-left':-mW,'margin-top':-mH});
current_scrollY = jQuery( window ).scrollTop();
var openflag = false;
var pageID = $(this).data('pageid');
$content = ".id-" + pageID;
jQuery.ajax({
type: "POST",
datatext: {val:"ok"},
timeout: 10000,
dataType: 'post', url: ajaxurl,
/**
* Ajax通信が成功した場合に呼び出されるメソッド
*/
data: {
'action' : 'view_pageload',
'pageID': pageID,
},
success: function(data){
jQuery( '#wrapper' ).css( {
position: 'fixed',
} );
jQuery($content).html(data);
jQuery(wn).fadeIn(500);
return false;
},
});
});
jQuery('.close,.modalBK').live('click', function(e){
//jQuery('.close,.modalBK').click(function(){
jQuery( '#wrapper' ).attr( { style: '' } );
jQuery( 'html, body' ).prop( { scrollTop: current_scrollY } );
jQuery($content).html("");
jQuery(wn).fadeOut(500);
});
});
//functions.php
function view_pageload(){
$post_id = array();
$post_id[] = $_POST['pageID'];
$echo = "";
$args = array(
'posts_per_page'=> 1,
'post__in' =>$post_id,
'orderby' => array(
'meta_value' => 'asc',
'date' => 'desc'
)
);
$query = new WP_Query($args);
if( $query -> have_posts()){
while ($query -> have_posts()) : $query -> the_post();
$echo .= apply_filters('the_content',get_the_content());
endwhile;
}
wp_reset_postdata();
echo $echo;
die();
}
試したこと
apply_filtersやdo_shortcode等を試してみましたが効果がありませんでした。
参考にさせていただいた記事
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
Crayon Syntax Highlighter等多くのプラグインは「ページが描画される」事を前提としているため、wp_head()などの動作にもフックをかけてCSS/jsを出力したりしています。そのため、現在お書きの functions.php ではそれが読み込まれません。
また、別途 js を読み込んでいても、Ajax では「 window.onload 」イベントが起きないため、ロードされた部分に js の処理が適用されません。(後から読み込まれることを考慮した奇特なライブラリなら問題ありませんが)
さらに、参考にされている記事に書いてある通り、functions.php に記述する方法では正常に動かないプラグインがあるため、別途 PHP ファイルを用意する方法を使われてはいかがでしょうか。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.32%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる