Wordpress PHP - 来自主题选项的两个值

时间:2012-12-04 20:22:15

标签: php wordpress

我已经在这方面工作了一段时间,并且无法在其他地方找到答案。

在我的wordpress选项面板中,我有一个可以输入的textarea,如果我想添加另一个textarea,我只需点击添加和删除它们。

这是它的样子:

Theme Options Example

我的所有textarea选项都放在一个数组中,我可以随时调用它们。

我想做什么,并且一直试图找出一段时间是这样的: 我希望能够在每个textareas下面添加一个文本输入,每当我更新它时,它都会将每个文本输入放入一个数组中。

我有一种感觉,这只是一件非常简单的事情,我还没有想过。如果没有,请告诉我。

以下是选项面板的github:https://github.com/leemason/NHP-Theme-Options-Framework

以下是我一直在处理的代码:

此代码位于名为field_multi_textarea.php的新文件中,我已将其添加到options文件夹中multi_text目录中名为fields的新文件夹中。

<?php
class NHP_Options_multi_textarea extends NHP_Options{   

    /**
     * Field Constructor.
     *
     * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function
     *
     * @since NHP_Options 1.0.5
    */
    function __construct($field = array(), $value ='', $parent){

        parent::__construct($parent->sections, $parent->args, $parent->extra_tabs);
        $this->field = $field;
        $this->value = $value;
        //$this->render();

    }//function



    /**
     * Field Render Function.
     *
     * Takes the vars and outputs the HTML for the field in the settings
     *
     * @since NHP_Options 1.0.5
    */
    function render(){

        $class = (isset($this->field['class']))?$this->field['class']:'large-text';

        echo '<ul id="'.$this->field['id'].'-ul">';

        if(isset($this->value) && is_array($this->value)){
            foreach($this->value as $k => $value){
                if($value != ''){

                    echo '<li><div class="fadeout"><textarea id="'.$this->field['id'].'-'.$k.'" name="'.$this->args['opt_name'].'['.$this->field['id'].'][]" rows="6" class="'.$class.'" />'.esc_attr($value).'</textarea></div> <a href="javascript:void(0);" class="nhp-opts-multi-textarea-remove">'.__('Remove', 'nhp-opts').'</a></li>';

                }//if

            }//foreach
        }else{

            echo '<li><div class="fadeout"><textarea id="'.$this->field['id'].'" name="'.$this->args['opt_name'].'['.$this->field['id'].'][]" rows="6" value="'.$this->field['std'].'" class="'.$class.'" />'.esc_attr($value).'</textarea></div> <a href="javascript:void(0);" class="nhp-opts-multi-textarea-remove">'.__('Remove', 'nhp-opts').'</a></li>';

        }//if

        echo '<li style="display:none;"><div class="fadeout"><textarea id="'.$this->field['id'].'" name="" rows="6" class="'.$class.'" /></textarea></div> <a href="javascript:void(0);" class="nhp-opts-multi-textarea-remove">'.__('Remove', 'nhp-opts').'</a></li>';

        echo '</ul>';

        echo '<a href="javascript:void(0);" class="nhp-opts-multi-textarea-add" rel-id="'.$this->field['id'].'-ul" rel-name="'.$this->args['opt_name'].'['.$this->field['id'].'][]">'.__('Add More', 'nhp-opts').'</a><br/>';

        echo (isset($this->field['desc']) && !empty($this->field['desc']))?' <span class="description">'.$this->field['desc'].'</span>':'';

    }//function


    /**
     * Enqueue Function.
     *
     * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
     *
     * @since NHP_Options 1.0.5
    */
    function enqueue(){

        wp_enqueue_script(
            'nhp-opts-field-multi-textarea-js', 
            NHP_OPTIONS_URL.'fields/multi_textarea/field_multi_textarea.js', 
            array('jquery'),
            time(),
            true
        );

    }//function

}//class
?>

这是我命名为field_multi_textarea.js并放在multi_text文件夹中的js。

jQuery(document).ready(function(){

    jQuery('.nhp-opts-multi-textarea-remove').live('click', function(){
        jQuery(this).prev('.fadeout').val('');
        jQuery(this).parent().fadeOut('slow', function(){jQuery(this).remove();});
    });

    jQuery('.nhp-opts-multi-textarea-add').click(function(){
        var new_input = jQuery('#'+jQuery(this).attr('rel-id')+' li:last-child').clone();
        jQuery('#'+jQuery(this).attr('rel-id')).append(new_input);
        jQuery('#'+jQuery(this).attr('rel-id')+' li:last-child').removeAttr('style');
        jQuery('#'+jQuery(this).attr('rel-id')+' li:last-child textarea').val('');
        jQuery('#'+jQuery(this).attr('rel-id')+' li:last-child textarea').attr('name' , jQuery(this).attr('rel-name'));
    });

});

我在NHP-options.php中调用此函数,如下所示:

array(
    'id' => 'cf_emailaddress2',
    'type' => 'multi_textarea',
    'title' => __('Contact Form Email Address', 'nhp-opts'),
    'sub_desc' => __('To add more, click add more', 'nhp-opts'),
    'et_url' => 'myurl',
    'std' => get_bloginfo('admin_email') ."",
    'desc' => __('Contact Form Email Address, This is where the form will be sent to.', 'nhp-opts')
    ),

我可以将make输入看起来像下面的图像,但它的值不会保存,或者它与textarea中的任何内容相同。

enter image description here

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

检查TextArea字段名称。在保存访问字段的方式时,我猜他们是一样的 请参阅下面的名称形成行

echo '<li><div class="fadeout"><textarea id="'.$this->field['id'].'-'.$k.'" name="'.$this->args['opt_name'].'['.$this->field['id'].'][]" rows="6" class="'.$class.'" />'.esc_attr($value).'</textarea></div> <a href="javascript:void(0);" class="nhp-opts-multi-textarea-remove">'.__('Remove', 'nhp-opts').'</a></li>';

与taxtarea id类似,您可能需要添加$ k作为前缀。