Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What can override the attributes in an html input?

I am outputing the values I want into an html input with PHP. But for some reason it is not recognizing the min and step attributes. How can html attributes be overridden?

EDIT - I am customizing Anspress for Wordpress. Here is a link to look through the files for the plugin.

Any thoughts??

HTML that structures the output (ap_ask_form() is in the PHP code below)

<div id="ap-form-main" class="active ap-tab-item">
    <?php ap_ask_form(); ?>
</div>

ask_form.php

class AnsPress_Ask_Form
{
    public function __construct()
    {
        add_filter('ap_ask_form_fields', array($this, 'ask_form_name_field'));
    }

    public function ask_form_name_field($args){
        if(!is_user_logged_in() && ap_opt('allow_anonymous'))
            $args['fields'][] = array(
                'name' => 'name',
                'label' => __('Name', 'ap'),
                'type'  => 'text',
                'placeholder'  => __('Enter your name to display', 'ap'),
                'value' => sanitize_text_field(@$_POST['name'] ),
                'order' => 12
            );

        return $args;
    }
}

new AnsPress_Ask_Form;

/**
 * Generate ask form
 * @param  boolean $editing
 * @return void
 */
function ap_ask_form($editing = false){
    global $editing_post;

    $is_private = false;
    if($editing){
        $is_private = $editing_post->post_status == 'private_post' ? true : false;
    }

    $args = array(
        'name'              => 'ask_form',
        'is_ajaxified'      => true,
        'submit_button'     => ($editing ? __('Update question', 'ap') : __('Post question', 'ap')),
        'fields'            => array(
            array(
                'name' => 'title',
                'label' => __('Title', 'ap'),
                'type'  => 'text',
                'placeholder'  => __('Question in one sentence', 'ap'),
                'desc'  => __('Write a meaningful title for the question.', 'ap'),
                'value' => ( $editing ? $editing_post->post_title : sanitize_text_field( @$_POST['title'] ) ),
                'order' => 5,
                'attr' => 'data-action="suggest_similar_questions"',
                'autocomplete' => false,
            ),
            array(
                'name' => 'title',
                'type'  => 'custom',
                'order' => 5,
                'html' => '<div id="similar_suggestions"></div>'
            ),
            array(
                'name' => 'description',
                'label' => __('Description', 'ap'),
                'type'  => 'editor',
                'desc'  => __('Write description for the question.', 'ap'),
                'value' => ( $editing ? apply_filters('the_content', $editing_post->post_content) : @$_POST['description']  ),
                'settings' => apply_filters( 'ap_ask_form_editor_settings', array(
                    'textarea_rows'     => 8,
                    'tinymce'           => ap_opt('question_text_editor') ? false : true,
                    'quicktags'         => ap_opt('question_text_editor') ? true : false ,
                    'media_buttons'     =>false,
                )),
            ),
            array(
                'name'  => 'ap_upload',
                'type'  => 'custom',
                'html' => ap_post_upload_form(),
                'order' => 10
            ),
            array(
                'name' => 'parent_id',
                'type'  => 'hidden',
                'value' => ( $editing ? $editing_post->post_parent : get_query_var('parent')  ),
                'order' => 20
            )
        ),
    );

    if(ap_opt('allow_private_posts'))
        $args['fields'][] = array(
            'name' => 'is_private',
            'type'  => 'checkbox',
            'desc'  => __('Only visible to admin and moderator.', 'ap'),
            'value' => $is_private,
            'order' => 12,
            'show_desc_tip' => false
        );

    if(ap_opt('recaptcha_site_key') == '')
        $reCaptcha_html = '<div class="ap-notice red">'.__('reCaptach keys missing, please add keys', 'ap').'</div>';
    else
        $reCaptcha_html = '<div class="g-recaptcha" id="recaptcha" data-sitekey="'.ap_opt('recaptcha_site_key').'"></div><script type="text/javascript"
src="https://www.google.com/recaptcha/api.js?hl='.get_locale().'&onload=onloadCallback&render=explicit"  async defer></script><script type="text/javascript">var onloadCallback = function() {
        widgetId1 = grecaptcha.render("recaptcha", {
          "sitekey" : "'.ap_opt('recaptcha_site_key').'"
        });
      };</script>';

    if(ap_opt('enable_recaptcha'))
        $args['fields'][] = array(
            'name' => 'captcha',
            'type'  => 'custom',
            'order' => 100,
            'html' => $reCaptcha_html
        );

    /**
     * FILTER: ap_ask_form_fields
     * Filter for modifying $args
     * @var array
     * @since  2.0
     */
    $args = apply_filters( 'ap_ask_form_fields', $args, $editing );

    if($editing){
        $args['fields'][] = array(
            'name'  => 'edit_post_id',
            'type'  => 'hidden',
            'value' => $editing_post->ID,
            'order' => 20
        );
    }

    $form = new AnsPress_Form($args);

    echo $form->get_form();
    echo ap_post_upload_hidden_form();
}

/**
 * Generate edit question form, this is a wrapper of ap_ask_form()
 * @return void
 * @since 2.0.1
 */
function ap_edit_question_form()
{
    ap_ask_form(true);
}

My extension to this plugin using the Wordpress hook "plugins_loaded" (the ask_form_amount_field($args, $editing) below is part of a class I made; if someone would like me to post it I can, just trying to show all the relevant info without making it too lengthy...)

public function ask_form_amount_field($args, $editing){
        if(wp_count_terms('question_amount_field') == 0)
            return $args; //Taxonomy stuff?

        global $editing_post;

        if($editing){
            $amount_field = get_the_terms( $editing_post->ID, 'question_amount_field' );
            $amount_field = $amount_field[0]->term_id;
        } //More things purely related to taxonomy, it seems.

        $args['fields'][] = array(
            'name' => 'amount_field',
            'label' => __('Amount field label', 'amount_field_for_anspress'),
            'type'  => 'number',
            'value' => ( $editing ? $amount_field :  sanitize_text_field(@$_POST['amount_field'] )), 
            'taxonomy' => 'question_amount_field',
            'orderby' => ap_opt('form_amount_field_orderby'),
            'desc' => __('Enter the amount you wish to tip someone for fulfilling your request.', 'amount_for_anspress'),
            'order' => 7,
            'min' => 0.50,
            'step' => 0.25
        );

        return $args;

    }

}}//The class ends here; its beginning is not shown above

function find_do_for_anspress() {
    $discounts = new Find_Do_For_AnsPress();
}
add_action( 'plugins_loaded', 'find_do_for_anspress' );
like image 451
DarthVoid Avatar asked Sep 30 '15 01:09

DarthVoid


People also ask

Which one is not an attribute of input tag in HTML?

Which of the following is not a type of attribute for input tag? Explanation: Day is not defined in the pre-defined attribute list of input tag. Week attribute defines week and year when used as attribute in input tag. Month specifies month and year when it is accessed in input tag.

What are the 3 types of attribute in HTML?

HTML attributes are generally classified as required attributes, optional attributes, standard attributes, and event attributes: Usually the required and optional attributes modify specific HTML elements.


1 Answers

Here's a shorter javascript solution with jQuery, please note that you may need to change $ to jQuery because of how Wordpress implements jQuery

//set values
minValue = 100;
stepValue = 100;

//select element by ID, update min attribute
$("#my-element-id").attr("min", minValue);

//select element by ID, update step attribute
$("#my-element-id").attr("step", minValue);

Here's the documentation on jQuery attr() for more information, it can be used to get and/or set attributes: https://api.jquery.com/attr/

like image 52
Nick Shaw Avatar answered Nov 12 '22 21:11

Nick Shaw