0
function partners($atts ) {
    extract(shortcode_atts(array(  
            'ids' => null,
            'extra_options' => 'something' <----------------- in wordpress I can read this value using local $extra_options 
    ), $atts));  
global $extra_options; <----------------- trying to change local var to global

function print_partners_scripts() {
    global $extra_options; <----------------- reading above variable
    echo '<script type="text/javascript">' . "\n";
    echo 'jQuery(document).ready( function() {'. "\n";
    echo '  $(".partners-slider").bxSlider({
        slideWidth: 924,
        auto: 0,
        autoStart: 0,
        moveSlides: 1,
        minSlides: 3,
        maxSlides: 8,
        pager: false,
        controls: false,
        slideMargin: 5,
        ' . $extra_options . ' <----------------- var is empty
     });' . "\n";
    echo '});' . "\n";
    echo '</script>' . "\n";
} 
    add_action( 'wp_footer', 'print_partners_scripts' );

    $ids = explode( ',', $ids );
    $output = '<div class="ps-wrap"><div class="partners-slider">';
    foreach($ids as $id) {    
    $img_attr = wp_get_attachment_image_src( $id, 'full' );
    $output .= '<div class="pslide"><img src="' . $img_attr[0] . '" /></div>';    
}
    $output .= '</div></div>';

    return $output;  
}  

こんにちは、print_partners_scripts() 内の var $extra_options を読み込もうとしています。この変数は、partners() 関数で設定されます。私はそれをグローバルにして、単に特定の場所で使用しようとしましたが、何か間違っていると思います;)

前もって感謝します !

4

2 に答える 2

1

まず、PHP は、使用しようとしている方法でネストされた関数をサポートしていません。

これを書くことができます:

function outer() { function inner() {} }
outer();

しかし、outer();が実行されると、そのinner()関数は通常の関数として宣言されるだけです。したがって、コードはこれとまったく同じです。

function outer() {}
function inner() {}
outer();

第 2 に、PHP の変数 (クラス名またはオブジェクト名を前に付けない限り) は常に現在の関数にスコープされます。このglobalキーワードは、グローバル変数への参照を現在の関数のスコープにインポートします。すでに定義されている変数のエクスポートには使用できません。

global一般に、関数に必要なすべてのグローバル変数をインポートするために、関数の最初にのみキーワードを使用するのが最善です。さらに良いことに、グローバル変数は使用しないでください。理解とデバッグが困難な「スパゲッティ コード」につながるためです。

を実行するglobal に変数を宣言するextractと、これは機能しますが、どちらの機能も使用しないことを強くお勧めします

function foo_with_too_much_magic()
{
    // Import global variable. Very hard to track where this came from.
    global $some_var;
    // Let's assume this array comes from somewhere and isn't hard-coded
    $some_array = array('some_var' => 'some_value');
    // Export variables from an array. This is like telling PHP to write different code each time it runs, with different variable names.
    extract( $some_array );
}
foo_with_too_much_magic();
var_dump($some_var);

以下は、推奨されない機能を除いた上記のバージョンです。

function foo_with_no_magic()
{
    // Let's assume this array comes from somewhere and isn't hard-coded
    $some_array = array('some_var' => 'some_value');
    // You know which variable you want, so don't need the magic "export"
    // Note that you don't have to call it $some_var
    $some_var = $some_array['some_var'];

    // Now you have the variable, you can manipulate it, pass it to another function, or return it
    // In fact, you could also return $some_array['some_var'] directly, without the extra assignment
    return $some_var;
}

// This variable name no longer needs to be the same as what was used in the foo_with_no_magic() function
$some_var = foo_with_no_magic();
var_dump($some_var);
于 2013-10-02T18:09:34.793 に答える