4

WordPress テーマの画像スライダーを初期化する関数がありますが、PHP 変数を渡すことができません。コードは次のとおりです。

function slideshowSettings ($pause_time) {
$code = "<script>
jQuery(function(){
    jQuery('#camera_wrap_3').camera({
        height: '40%',
        thumbnails: true,
        time: ".$pause_time.",
        fx: '".$transition_effect."',
        transPeriod: ".$transition_speed.",
        autoAdvance: ".$auto_advance.",
        minHeight: '50px',
        mobileNavHover: false,
        imagePath: '".get_template_directory_uri()."/images/'
    });
});
</script>";

echo $code;
}
add_action('wp_head', 'slideshowSettings');

変数は関数の上に割り当てられますが、関数から得られる出力は次のようになります。

<script>
jQuery(function(){

    jQuery('#camera_wrap_3').camera({
        height: '40%',
        thumbnails: true,
        time: ,
        fx: '',
        transPeriod: ,
        autoAdvance: ,
        minHeight: '50px',
        mobileNavHover: false,
        imagePath: 'http://www.brainbuzzmedia.com/themes/simplybusiness/wp-content/themes/simplybusiness/images/'
    });
});
</script>

これらの変数を渡すにはどうすればよいですか?

4

3 に答える 3

3

関数によって呼び出されたwp_headときにフックされた関数に引数が渡されないため、に引数を追加することはできません。の引数はdo_action('wp_head');wp_head()add_action()

  1. フックするアクション、あなたの場合は「wp_head」
  2. 実行したい関数、あなたの場合は「slideshowSettings」
  3. 実行の優先度。デフォルトは10です。
  4. 関数が受け入れる引数の数(ただし、これらは渡される必要がありますdo_action

フックされた関数の外部でこれらの値をに渡すことができる必要がある場合は、値を変更するためにwp_head使用します。apply_filters

function slideshowSettings(){
    // set up defaults
    $settings = array('pause_time'=>10, 'other'=>999);
    $random_text = "foo";

    // apply filters
    $settings = apply_filters('slideshow_settings', $settings, $random_text);

    // set array key/values to variables
    extract( $settings );

    // will echo 1000 because value was updated by filter
    echo $pause_time;

    // will echo "foobar" because key was added/updated by filter
    echo $random_text; 

    // ... more code
}
add_action( 'wp_head', 'slideshowSettings' );

function customSettings($settings, $random_text){
    // get your custom settings and update array
    $settings['pause_time'] = 1000;
    $settings['random_text'] = $random_text . "bar";
    return $settings;
}
// add function to filter, priority 10, 2 arguments ($settings array, $random_text string)
add_filter( 'slideshow_settings', 'customSettings', 10, 2 );
于 2012-11-08T04:56:09.310 に答える
3

PHP 変数を Javascript に渡す正しい方法は、wp_localize_script.

Otto によるこの記事を確認してください。そして、WordPress StackExghange でのこの Q&A .


あなたの質問では、これらの変数がどこから来ているのかを示していないため、それらは印刷されています...何もありません。

私はちょうどテストをしました。これにより、データベースにオプション値が作成されます。

add_action( 'init', 'so_13282503_init' );

function so_13282503_init() 
{
    if( !get_option('pause_time') )
    {
        update_option('pause_time', '50');
        update_option('transition_effect', 'elastic.easeIn');
        update_option('transition_speed', '400');
        update_option('auto_advance', '4');
    }
}

そして、これは、あなたのコードの適応バージョンです:

add_action( 'wp_head', 'slideshowSettings' );

function slideshowSettings () 
{
    $pause_time = get_option('pause_time');
    $transition_effect = get_option('transition_effect');
    $transition_speed = get_option('transition_speed');
    $auto_advance = get_option('auto_advance');
    $code = "<script>
    jQuery(function(){
        jQuery('#camera_wrap_3').camera({
           height: '40%',
            thumbnails: true,
            time: ".$pause_time.",
            fx: '".$transition_effect."',
            transPeriod: ".$transition_speed.",
            autoAdvance: ".$auto_advance.",
            minHeight: '50px',
            mobileNavHover: false
        });
    });
</script>
";

    echo $code;
}

その結果、これが<head>サイトのに印刷されます。

レンダリングされた html のコードの結果

于 2012-12-03T04:13:49.883 に答える
1

add_action()の優先度引数の後に引数の数を渡すことができます

 <?php add_action( $tag, $function_to_add, $priority, $accepted_args ); ?> 

wordpress codex には、それに関するいくつかの例があります。

$transition_effect関数は実際には引数のみを取り、その関数では,$transition_speedなどの未定義の変数を使用していることに注意してください $auto_advance

于 2012-11-08T04:44:36.543 に答える