我在函数中创建了一个变量,如下所示:
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>
答案 0 :(得分:1)
如果你想在不同的页面中提供某些东西(因此可能是在不同的HTTP请求中?)那么你必须将它放入会话变量或其他持久存储(例如文件,数据库)并检索它在你的另一页。 HTTP本质上是无状态的,服务器不会记住从一个请求到下一个请求的变量值,除非您使用上述机制之一来存储它们。
在您发布的代码的上下文中调用doingthistest($opt_val);
会将变量转储到该页面上。但是如果你完全从另一个页面调用相同的方法 - 它必须在一个不同的请求中 - 它不会自动记住你上次的价值。这是一个单独的请求,具有单独的上下文。
我并不完全理解Wordpress的内容,但我怀疑你的行为会更好看这样:
add_action('testingthis', 'doingthistest');
function dosomething($o) {
var_dump(get_option( $opt_name ));
}
但显然你必须以某种方式设置$ opt_name的值。在您的示例代码中,它是硬编码的,但我不知道您是否真的如何在完成的解决方案中设置它。