在函数php / wordpress之外的函数内访问变量

时间:2016-08-22 11:51:54

标签: php wordpress

我在函数中创建了一个变量,如下所示:

function my_plugin_options() {

    //must check that the user has the required capability
    if (!current_user_can('manage_options'))
    {
      wp_die( __('You do not have sufficient permissions to access this page.') );
    }

    // variables for the field and option names
    $opt_name = 'mt_favorite_color';
    $hidden_field_name = 'mt_submit_hidden';
    $data_field_name = 'mt_favorite_color';

    // Read in existing option value from database
    $opt_val = get_option( $opt_name );
    doingthistest($opt_val);

    // See if the user has posted us some information
    // If they did, this hidden field will be set to 'Y'
    if( isset($_POST[ $hidden_field_name ]) && $_POST[ $hidden_field_name ] == 'Y' ) {
        // Read their posted value
        $opt_val = $_POST[ $data_field_name ];

        // Save the posted value in the database
        update_option( $opt_name, $opt_val );

        // Put a "settings saved" message on the screen

?>
<div class="updated"><p><strong><?php _e('settings saved.', 'help-menu-settings' ); ?></strong></p></div>
<?php

    }

    // Now display the settings editing screen

    echo '<div class="wrap">';

    // header

    echo "<h2>" . __( 'Help block details', 'help-menu-settings' ) . "</h2>";

    // settings form

    ?>

<form name="form1" method="post" action="">
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">

<p><?php _e("Whatever:", 'menu-test' ); ?>
<input type="text" name="<?php echo $data_field_name; ?>" value="<?php echo $opt_val; ?>" size="20">
</p><hr />

<p class="submit">
<input type="submit" name="Submit" class="button-primary" value="<?php esc_attr_e('Save Changes') ?>" />
</p>

</form>
<span><?php echo $opt_val ?></span>
</div>

<?php

}

现在我可以echo在该函数范围内的$opt_val变量,但我很难在外面访问它。

你会看到我在其下面设置变量$opt_val = get_option( $opt_name );的位置我将它传递给函数doingthistest($opt_val);然后我在下面创建一个动作,这样我就可以在另一个页面中调用它(WordPress方法)。 / p>

所以我的行动如下:

add_action('testingthis', 'doingthistest');
function doingthistest(t) {
    var_dump(t);
}

由于某种原因,变量没有传递给我的动作。我误解了什么吗?

我在另一个页面中将其称为:

<span>info is there: <?php do_action( 'testingthis' ) ?></span>

1 个答案:

答案 0 :(得分:1)

如果你想在不同的页面中提供某些东西(因此可能是在不同的HTTP请求中?)那么你必须将它放入会话变量或其他持久存储(例如文件,数据库)并检索它在你的另一页。 HTTP本质上是无状态的,服务器不会记住从一个请求到下一个请求的变量值,除非您使用上述机制之一来存储它们。

在您发布的代码的上下文中调用doingthistest($opt_val);会将变量转储到该页面上。但是如果你完全从另一个页面调用相同的方法 - 它必须在一个不同的请求中 - 它不会自动记住你上次的价值。这是一个单独的请求,具有单独的上下文。

我并不完全理解Wordpress的内容,但我怀疑你的行为会更好看这样:

add_action('testingthis', 'doingthistest');
function dosomething($o) {
  var_dump(get_option( $opt_name ));
}

但显然你必须以某种方式设置$ opt_name的值。在您的示例代码中,它是硬编码的,但我不知道您是否真的如何在完成的解决方案中设置它。