0

スライドショーを任意のページに表示するWordpress関数を作成しました。この関数はうまく機能し、スライドショーを表示するために任意のテンプレートページに関数呼び出しを追加できます。

サンプル関数呼び出し:add_slideshow($slideshow_id, $gallery_id, $show_navigation_handles);

フッターにjqueryをハードコーディングしました。ただし、メイン関数でjqueryをフッターに追加するために使用したいadd_action('wp_footer','')のは、各スライドショーの設定が異なる場合があるためです(異なるslideshow_id、gallery_idなど)。

これが私の関数です:

function add_slideshow($slider_id, $gal_id, $show_controls){
//get the slideshow images from database and return HTML - A Bit Long to show here but it WORKS!

//add the required script to footer - JavaScript is added to footer but not $slider_id
add_action('wp_footer', function() { 
    echo "<script type='text/javascript'>
        $(document).ready(function(){ 
            $('#" . $slider_id . "').flexslider();
        });
    </script>";
  });  

しかし、PHP変数$slider_idは、出力されたjavascriptに渡されていないため、フッターの出力は次のようになります。

<script type='text/javascript'>
    $(document).ready(function(){ 
        $('#').flexslider();
    });
</script>

それが例えばこれであるべきとき:

<script type='text/javascript'>
    $(document).ready(function(){ 
        $('#some_id_here').flexslider();
    });
</script>

これを正しいID(#actual_slideshow_id)でフッターに手動で追加すると、スライドショーは正常に再生されます。

私はこのサイトを最後の1時間検索して解決策を見つけようとしましたが、特定の問題に適応できるものは見つかりませんでした。

ありがとう、マーク

4

2 に答える 2

6

1.不足している値(あなたの質問への答え):

まず、$スライダー_idが匿名関数で使用できない理由は、次のように$slider_idをクロージャーに含めていないためですuse ($slider_id)

add_action('wp_footer', function($arguments) use ($slider_id) { 
    echo "<script type='text/javascript'>
        $(document).ready(function(){ 
            $('#" . $slider_id . "').flexslider();
        });
    </script>";
}, $priority_integer, $accepted_arguments_integer);

2.メソッドで無名関数を使用add_action()する:

add_action()のWordPressコーデックスから:

add_action($ tag、$ function_to_add、$ priority、$ accepted_args);

パラメーター

..。

$ function_to_add(コールバック)(必須)呼び出す関数の名前。注:「コールバック」タイプのPHPドキュメントにリストされている文字列形式の構文のみが有効です。[私の強調]

..。

クロージャ(別名匿名関数)はPHP 5.3以降ではコールバックとしてのみ機能することに注意してください。コーデックスが文字列形式の構文のみが許可されていると述べている限り、私は(個人的に)クロージャに依存しません(同じ場合でも)記事は後でクロージャベースの例を使用します)。

3.スクリプトの発行:

WordPress Answersでこの回答に従って、register_scriptとenqueue_scriptを使用する必要があります

(スクリプトがフッターに入るかどうかを示すboolパラメーターがあります)。

実行時に特定の引数をスクリプトに渡すには、スクリプトのローカライズアプローチを使用します。このためのチュートリアルは、WordpressのOttoにあります

お役に立てれば。

于 2012-09-26T09:49:07.493 に答える
0

1)グローバルを使用する必要があります

$myvar ='123';

add_action('blabla','your_func');
function your_func(){
global $myvar;
}

2)または、do_actionを使用します:
-add_actionを介して関数に引数を渡すことはできますか?

于 2014-01-27T21:21:06.913 に答える