如何从 wordpress 的主题选项中获取输入文本?

Posted

技术标签:

【中文标题】如何从 wordpress 的主题选项中获取输入文本?【英文标题】:How to get input text from theme options on wordpress? 【发布时间】:2013-03-10 06:51:49 【问题描述】:

我刚刚在我的theme-options.php文件中设置了一个新的输入文本选项,类似于二十一主题代码。

以下是关于输入的部分我的 theme-options.php 代码,我正在寻找一种方法来获取用户输入到“事实”文本中的输入并将其显示在 index.php 页面上:

function themename_theme_options_init() 

register_setting(
    'themename_options',       // Options group, see settings_fields() call in themename_theme_options_render_page()
    'themename_theme_options', // Database option, see themename_get_theme_options()
    'themename_theme_options_validate' // The sanitization callback, see themename_theme_options_validate()
);

// Register our settings field group
add_settings_section(
    'general', // Unique identifier for the settings section
    '', // Section title (we don't want one)
    '__return_false', // Section callback (we don't want anything)
    'theme_options' // Menu slug, used to uniquely identify the page; see themename_theme_options_add_page()
);

// Register our individual settings fields
add_settings_field( 'facts', __( 'Facts',     'themename' ), 'themename_settings_field_facts', 'theme_options', 'general' );
add_settings_field( 'link_color', __( 'Link Color',     'themename' ), 'themename_settings_field_link_color', 'theme_options', 'general' );

add_action( 'admin_init', 'themename_theme_options_init' );

根据配色方案返回主题名称的默认事实:

function themename_get_default_facts( $color_scheme = null ) 
if ( null === $color_scheme ) 
    $options = themename_get_theme_options();
    $color_scheme = $options['color_scheme'];


$color_schemes = themename_color_schemes();
if ( ! isset( $color_schemes[ $color_scheme ] ) )
    return false;

return $color_schemes[ $color_scheme ]['default_facts'];

呈现 Facts 设置字段。

function themename_settings_field_facts() 
$options = themename_get_theme_options();
?>
<input type="text" name="themename_theme_options[facts]" id="facts" value="<?php echo esc_attr( $options['facts'] ); ?>" />
<br />
<span><?php printf( __( 'Default facts: %s', 'themename' ), '<span id="default-facts">' . themename_get_default_facts ( $options['color_scheme'] ) . '</span>' ); ?></span>
<?php

清理和验证表单输入:

function themename_theme_options_validate( $input ) 
$output = $defaults = themename_get_default_theme_options();

// Color scheme must be in our array of color scheme options
if ( isset( $input['color_scheme'] ) && array_key_exists( $input['color_scheme'], themename_color_schemes() ) )
    $output['color_scheme'] = $input['color_scheme'];

// Facts must be characters.
if ( isset( $input['facts'] ) )
    $output['facts'] = '' . ( ltrim( $input['facts'], '' ) );

// Our defaults for the link color may have changed, based on the color scheme.
$output['link_color'] = $defaults['link_color'] = themename_get_default_link_color( $output['color_scheme'] );

// Link color must be 3 or 6 hexadecimal characters
if ( isset( $input['link_color'] ) && preg_match( '/^#?([a-f0-9]3)1,2$/i', $input['link_color'] ) )
    $output['link_color'] = '#' . strtolower( ltrim( $input['link_color'], '#' ) );

return apply_filters( 'themename_theme_options_validate', $output, $input, $defaults );

在主题定制器中实现主题选项:

function themename_customize_register( $wp_customize ) 
$wp_customize->get_setting( 'blogname' )->transport = 'postMessage';
$wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';

$options  = themename_get_theme_options();
$defaults = themename_get_default_theme_options();

$wp_customize->add_setting( 'themename_theme_options[facts]', array(
    'default'           => themename_get_default_facts( $options['color_scheme'] ),
    'type'              => 'option',
    'sanitize_callback' => 'sanitize_text_field',
    'capability'        => 'edit_theme_options',
) );


add_action( 'customize_register', 'themename_customize_register' );

感谢任何可以提供帮助的人 :) 谢谢!我得到了它的工作:D

【问题讨论】:

【参考方案1】:
----------
<?php
/**
 * Theme Options
 *
 * @package WordPress
 * 
 */


/* Write the name and the variable_name in which you want to store the data using theme options in the array $options_array */
$options_array = array(
            'Facebook URL'=>'facebook_url',
        );


function my_theme_options_init() 

    // If we have no options in the database, let's add them now.
    if ( false === my_theme_options() )
        add_option( 'my_theme_options', my_default_theme_options() );

    register_setting(
        'my_options',       // Options group, see settings_fields() call in theme_options_render_page()
        'my_theme_options' // Database option, see my_theme_options()
    );
    global $options_array;
    foreach ($options_array as $key=>$option )
        register_setting( 'my_options', $option);
    




add_action( 'admin_init', 'my_theme_options_init' );






function my_theme_options_add_page() 
    $theme_page = add_theme_page(
        'myers themeing',   // Name of page
        'myers themeing',   // Label in menu
        'edit_theme_options',                    // Capability required
        'my_options',                         // Menu slug, used to uniquely identify the page
        'my_theme_options_render_page' // Function that renders the options page
    );

    if ( ! $theme_page )
        return;



add_action( 'admin_menu', 'my_theme_options_add_page' );



function my_default_schemes() 
    $default_array = array('value' => 'Default_theme',
            'label' => __( 'Default_theme', 'my' ),
            'thumbnail' => get_template_directory_uri() . '/inc/images/my.png' 
            );
    global $options_array;
    foreach ($options_array as $key=>$option )
        $default_array[$option] =' ';
    

    $default_scheme_options = array(
        'Default_theme' => $default_array,
    );

    return apply_filters( 'my_default_schemes', $default_scheme_options );




function my_default_theme_options() 
    $default_theme_options = array( 'default_scheme' => 'Default_theme' );
    global $options_array;  
    foreach ($options_array as $key=>$option )
        $default_theme_options[$option] = my_default( $option,'Default_theme' );
       

    return apply_filters( 'my_default_theme_options', $default_theme_options );




function my_default( $option ,$default_scheme = null ) 
    if ( null === $default_scheme ) 
        $options = my_theme_options();
        $default_scheme = $options['default_scheme'];
    

    $default_schemes = my_default_schemes();
    if ( ! isset( $default_schemes[ $default_scheme ] ) )
        return false;

    return $default_schemes[ $default_scheme ][$option];




function my_theme_options() 
    return get_option( 'my_theme_options', my_default_theme_options() );


function my_theme_options_render_page() 
    ?>
    <div class="wrap">
        <?php screen_icon(); ?>
        <h2><?php printf( __( '%s Theme Options', 'my' ), get_current_theme() ); ?></h2>
        <?php settings_errors(); ?>
        <hr>

        <div id="theme_option_main">

            <h2>myers themeing</h2>
            <form method="post" enctype="multipart/form-data" action="options.php">
            <?php

                settings_fields( 'my_options' );
                $options = my_theme_options();
                $default_options = my_default_theme_options();
                global $options_array;  
                foreach ($options_array as $key=>$option )
                    do_settings_sections($option);
                   

            ?>

                <table class="form-table">
                    <tr>
                        <th scope="row"><?php _e( "(Use ' http:// ' for Hyperlinks)", 'my' ); ?></th>
                        <td>
                            <fieldset>
                            </fieldset>
                        </td>
                    </tr>
                    <?php   
                            foreach ($options_array as $key=>$option )

                         ?>
                        <tr>
                            <th scope="row"><?php _e( $key, 'my' ); ?></th>
                            <td>
                                <fieldset>
                                    <legend class="screen-reader-text"><span><?php _e( $key, 'my' ); ?></span></legend>
                                    <input type="text" name="<?php echo $option ?>" id="<?php echo $option ?>" class="large-text" value="<?php echo get_option($option); ?>"></input>
                                </fieldset>
                            </td>
                        </tr>

                    <?php  ?>


                </table>
                <?php submit_button(); ?>
            </form>



        </div>
    </div>  

    <?php

?>

复制代码并创建一个新的主题选项文件。在文件中的 options 数组中添加名称和 variable_name 即可。

不要忘记在你的functions.php中链接这个文件 要链接它,只需在您的 functions.php 中添加以下代码

require( dirname( __FILE__ ) . '/inc/your_file_name.php' );

【讨论】:

以上是关于如何从 wordpress 的主题选项中获取输入文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在wordpress主题中添加设置页面

转载:如何在wordpress主题中添加设置页面

如何从 wordpress 的更新配置文件选项中获取密码字符串?

如何从 wordpress 中的选项设置样式(设置 API)

如何在wordpress自定义中添加颜色选项

wordpress如何让自己的主题支持菜单功能