设置字段未保存在前端

时间:2015-01-21 作者:Style

我正在创建一个主题选项页面,并尝试在前端显示两个输入值:

function register_my_header() {
    register_setting( \'header_options\', \'header_options\');
}
add_action(\'admin_init\', \'register_my_header\'); 

function add_header_settings() {
    add_menu_page(\'Options header\', \'Options header\', \'manage_options\', \'edit_header\', \'header_edit_page\', null, 58); 
}
add_action(\'admin_menu\', \'add_header_settings\');


function header_edit_page() {
?>  
    <div id="theme-options-wrap">
        <div class="icon32" id="icon-tools"> <br> </div> 
        <h2>Header Options</h2>
        <p>Description</p>

        <?php
        if ( false !== $_REQUEST[\'updated\'] ) : ?>
        <div><p><strong><?php _e( \'Options saved\' ); ?></strong></p></div>
        <?php endif; ?>

        <form method="post" action="options.php">
            <?php settings_fields(\'header_options\'); ?> 
            <?php $options = get_option(\'header_options\'); ?> 

            <table class="form-table">

                <tr>
                    <th scope="row">Mail</th>
                    <td>
                        <input type="text" name="header_options[txt_mail]" value="<?php echo $options[\'txt_mail\']; ?>" />
                    </td>
                </tr>
                <tr>    
                    <th scope="row">Phone number</th>
                    <td>
                        <input type="text" name="header_options[txt_number]" value="<?php echo $options[\'txt_number\']; ?>" />
                    </td>   
                </tr>       
            </table>
            <p class="submit">
            <input type="submit" class="button-primary" value="<?php _e(\'Save Changes\') ?>" />
            </p>
        </form>
    </div>
<?php 
}

function header_validate_options($input) {
    $input[\'txt_mail\'] =  wp_filter_nohtml_kses($input[\'txt_mail\']); 
    $input[\'txt_number\'] =  wp_filter_nohtml_kses($input[\'txt_number\']);
    return $input;
}

function header_add_content() {
    $options = get_option(\'header_options\');
}
add_filter("the_content", "header_add_content");
我可以保存该值,但当我调用它时:

        <div class="background-content"></div>
            <div class="layout-header">
                <h1 id=\'logo\' class="image-logo">
                <a href="<?php echo home_url(); ?>"><img <?php do_shortcode(\'[sitelogo]\'); ?></a>
                </h1>
                <div id="contact">
                    <p>Contact Us</p>
                    <p><?php echo $options[\'txt_mail\']; ?></p><p><?php echo $options[\'txt_number\']; ?></p>  
                </div>  
            </div>   
要在前面显示它,什么都不会发生!我做错了什么?

2 个回复
最合适的回答,由SO网友:jetlej 整理而成

通过将header\\u add\\u content()函数更改为以下内容,使$options变量成为全局变量:

function header_add_content() {
    global $options; 
    $options = get_option(\'header_options\');
}
add_filter("the_content", "header_add_content");
然后在使用前端模板之前,将$选项声明为全局$选项,例如:

<p><?php global $options; echo $options[\'txt_mail\']; ?></p>

SO网友:Style

谢谢你的回答,但这不会显示我的值!

首先,我试着像你说的那样将$选项设置为global,但它没有改变什么,我仍然无法获得值:

<p><?php global $options; echo $options[\'txt_number\']; ?></p><p><?php global $options; echo $options[\'txt_mail\']; ?></p>
还试图将global $options = get_option(\'header_options\'); 跳转此选项将修复它:

    <div class="background-content"></div>
            <div class="layout-header">
                <h1 id=\'logo\' class="image-logo">
                <a href="<?php echo home_url(); ?>"><img <?php do_shortcode(\'[sitelogo]\'); ?></a>
                </h1>
                <?php global $options = get_option(\'header_options\'); ?>
                <div id="contact">
                    <p>Contact Us</p>
                    <p><?php echo $options[\'txt_mail\']; ?></p><p><?php echo $options[\'txt_number\']; ?></p>  
                </div>  
            </div>
也没什么!因此,我删除了我的表单表,并将其替换为节字段(在另一个主题选项页脱机时可用,但由于我联机,因此无法获得任何值):

function add_header_settings() {
    add_menu_page(\'Option header\', \'Options header\', \'manage_options\', \'edit_header\', \'header_edit_page\', null, 58); 
}
add_action(\'admin_menu\', \'add_header_settings\');

function header_edit_page() {
?>  
    <div id="theme-options-wrap">
        <div class="icon32" id="icon-tools"> <br> </div> 
        <h2>Option Header</h2>
        <p>Description</p>
        <form method="post" action="options.php">
            <?php settings_fields(\'header_options\'); ?> 
            <?php do_settings_sections(\'edit_header\'); ?>
            <p class="submit">
            <input name="Submit" type="submit" class="button-primary" value="<?php esc_attr_e(\'Save Changes\'); ?>" />
            </p>
        </form> 
    </div>
<?php }

function register_and_build_fields(){
    register_setting( \'header_options\', \'header_options\', \'validate_setting\'); 
    add_settings_section(\'homepage_settings\', \'Homepage Settings\', \'section_homepage\', \'edit_header\');

    function section_homepage() {}

    add_settings_field(\'number1\', \'Enter your number\', \'number_setting\', \'edit_header\', \'homepage_settings\'); 
}
add_action(\'admin_init\', \'register_and_build_fields\'); 

function validate_setting($header_options) {
    return $header_options;
}           

function number_setting() {
    $options = get_option(\'header_options\'); echo "<input name=\'header_options[number_setting]\' type=\'text\' value=\'{$options[\'number_setting\']}\' />";
}

            // $options = get_option(\'header_options\');  
            /* <table class="form-table">

                <tr>
                    <th scope="row">Mail</th>
                    <td>
                        <input type="text" name="header_options[txt_mail]" value="<?php echo $options[\'txt_mail\']; ?>" />
                    </td>
                </tr>
                <tr>    
                    <th scope="row">Phone number</th>
                    <td>
                        <input type="text" name="header_options[txt_number]" value="<?php echo $options[\'txt_number\']; ?>" />
                    </td>   
                </tr>   

            </table> 


function header_validate_options($input) {
    $input[\'txt_mail\'] =  wp_filter_nohtml_kses($input[\'txt_mail\']); 
    $input[\'txt_number\'] =  wp_filter_nohtml_kses($input[\'txt_number\']);
    return $input;
} */

function header_add_content() {
    global $options;
    $options = get_option(\'header_options\');
}
add_filter("the_content", "header_add_content");
同样,我可以在主题选项页面中保存我的值,但前端不想获取它们:/

顺便说一下:<div class="icon32" id="icon-tools"> <br> </div> 我多次看到这段代码,但标题旁边没有任何图标(即使是在我的第二台新安装的计算机上),这是因为WP的更新吗?

EDIT :

当我执行get_option 使用另一个变量$options 喜欢$header_options 或者随便什么,谢谢你的帮助!

如果有人对图标问题有什么解释,我还是想听!

结束

相关推荐

自定义重写规则正在将所有内容发送到index.php

我正在创建一个网站,在这里,用户可以团队合作创作电影。目前,我正在为团队经理在前端设置一个编辑页面。我刚刚对一个查询变量进行了一个简单的isset()检查,没有将视图发送到新模板页面的值。因此,无论查询变量的值是什么,如果在URL中调用它,它都会转到新模板。那部分工作正常。模板在团队/(teamname)加载得很好?管理。我所要做的就是重写它,让它看起来像是团队/(teamname)/管理。但我的问题是它不起作用,前端的每个页面现在都被重定向到索引。php。除索引之外的所有。php?团队=废话(&A);管