• Resolved databell96

    (@databell96)


    My client has a lengthy dropdown form with a Custom Amount option. By default, it’s the last option, but my client wants it to be the first option. How can I reverse it?

    The page I need help with: [log in to see the link]

Viewing 7 replies - 1 through 7 (of 7 total)
  • Plugin Author Devin Walker

    (@dlocc)

    Hey @databell96

    Good question. I can understand why you would want that to be the first selection in the list. I have a custom function for you to move that item to the first:

    /**
     * Moves the custom amount to the beginning of the dropdown.
     *
     * @param $output
     * @param $form_id
     */
    function give_dropdown_donations_custom_amount_first( $output, $form_id ) {
    
    	$prices             = apply_filters( 'give_form_variable_prices', give_get_variable_prices( $form_id ), $form_id );
    	$display_style      = give_get_meta( $form_id, '_give_display_style', true );
    	$custom_amount      = give_get_meta( $form_id, '_give_custom_amount', true );
    	$custom_amount_text = give_get_meta( $form_id, '_give_custom_amount_text', true );
    	if ( empty( $custom_amount_text ) ) {
    		$custom_amount_text = esc_html__( 'Give a Custom Amount', 'give' );
    	}
    
    	if ( 'dropdown' === $display_style ) {
    
    		$output = '<label for="give-donation-level-select-' . $form_id . '" class="give-hidden">' . esc_html__( 'Choose Your Donation Amount', 'give' ) . ':</label>';
    		$output .= '<select id="give-donation-level-select-' . $form_id . '" class="give-select give-select-level give-donation-levels-wrap">';
    
    		// Custom Amount.
    		if ( give_is_setting_enabled( $custom_amount ) && ! empty( $custom_amount_text ) ) {
    			$output .= '<option data-price-id="custom" class="give-donation-level-custom" value="custom">' . $custom_amount_text . '</option>';
    		}
    
    		//first loop through prices.
    		foreach ( $prices as $price ) {
    			$level_text    = apply_filters( 'give_form_level_text', ! empty( $price['_give_text'] ) ? $price['_give_text'] : give_currency_filter( give_format_amount( $price['_give_amount'], array( 'sanitize' => false ) ) ), $form_id, $price );
    			$level_classes = apply_filters( 'give_form_level_classes', 'give-donation-level-' . $price['_give_id']['level_id'] . ( ( isset( $price['_give_default'] ) && $price['_give_default'] === 'default' ) ? ' give-default-level' : '' ), $form_id, $price );
    
    			$output .= '<option data-price-id="' . $price['_give_id']['level_id'] . '" class="' . $level_classes . '" ' . ( ( isset( $price['_give_default'] ) && $price['_give_default'] === 'default' ) ? 'selected="selected"' : '' ) . ' value="' . give_format_amount( $price['_give_amount'], array( 'sanitize' => false ) ) . '">';
    			$output .= $level_text;
    			$output .= '</option>';
    
    		}
    
    
    		$output .= '</select>';
    
    
    	}
    
    	echo $output;
    
    }
    
    
    add_filter( 'give_form_level_output', 'give_dropdown_donations_custom_amount_first', 10, 2 );
    

    If you’re not sure how to add this code to your theme we have an article here that will help you: https://givewp.com/documentation/resources/adding-custom-functions-to-your-wordpress-website/

    Please let me know if you have anymore questions!

    Thread Starter databell96

    (@databell96)

    That somewhat worked. Other Amount is now on top, but since it’s not the default, another option appears first instead when you load the page even though it’s the second option in the select menu.

    I think it’s because that option is currently selected as the default and Other Amount can’t.

    Yes, You are right @databell96

    Updated Code:

    
    /**
     * Moves the custom amount to the beginning of the dropdown.
     *
     * @param $output
     * @param $form_id
     */
    function give_dropdown_donations_custom_amount_first( $output, $form_id ) {
    
    	$prices             = apply_filters( 'give_form_variable_prices', give_get_variable_prices( $form_id ), $form_id );
    	$display_style      = give_get_meta( $form_id, '_give_display_style', true );
    	$custom_amount      = give_get_meta( $form_id, '_give_custom_amount', true );
    	$custom_amount_text = give_get_meta( $form_id, '_give_custom_amount_text', true );
    	if ( empty( $custom_amount_text ) ) {
    		$custom_amount_text = esc_html__( 'Give a Custom Amount', 'give' );
    	}
    
    	if ( 'dropdown' === $display_style ) {
    
    		$output = '<label for="give-donation-level-select-' . $form_id . '" class="give-hidden">' . esc_html__( 'Choose Your Donation Amount', 'give' ) . ':</label>';
    		$output .= '<select id="give-donation-level-select-' . $form_id . '" class="give-select give-select-level give-donation-levels-wrap">';
    
    		// Custom Amount.
    		if ( give_is_setting_enabled( $custom_amount ) && ! empty( $custom_amount_text ) ) {
    			$output .= '<option data-price-id="custom" class="give-donation-level-custom give-default-level" value="custom" selected>' . $custom_amount_text . '</option>';
    		}
    
    		//first loop through prices.
    		foreach ( $prices as $price ) {
    			$level_text    = apply_filters( 'give_form_level_text', ! empty( $price['_give_text'] ) ? $price['_give_text'] : give_currency_filter( give_format_amount( $price['_give_amount'], array( 'sanitize' => false ) ) ), $form_id, $price );
    			$level_classes = apply_filters( 'give_form_level_classes', 'give-donation-level-' . $price['_give_id']['level_id'], $form_id, $price );
    
    			$output .= '<option data-price-id="' . $price['_give_id']['level_id'] . '" class="' . $level_classes . '" value="' . give_format_amount( $price['_give_amount'], array( 'sanitize' => false ) ) . '">';
    			$output .= $level_text;
    			$output .= '</option>';
    		}
    
    		$output .= '</select>';
    
    	}
    
    	echo $output;
    
    }
    
    add_filter( 'give_form_level_output', 'give_dropdown_donations_custom_amount_first', 10, 2 );
    

    Regard,
    Raftaar

    • This reply was modified 6 years, 11 months ago by raftaar1191.

    Hi,

    Thank you for this great plugin!

    I would like to do the same but when “display options” set to “button”… what would be the code?

    Regards,

    Hi @vertiges

    Here is the code that will display the custom amount int he first place when display options is set to “button”

    Please copy the code from below link and past it in the theme’s functions .php file
    https://gist.github.com/raftaar1191/a7cea38b6cec8dc4c17d85156c015f7d

    Regard
    Raftaar

    • This reply was modified 6 years, 10 months ago by raftaar1191.

    Thank you so much! The code works perfectly!

    Regards

    Plugin Author Matt Cromwell

    (@webdevmattcrom)

    Glad to hear that our team was helpful @vertiges

    If you’re enjoying Give and appreciate our support, we’d love a kind review from you here:
    https://www.ads-software.com/support/plugin/give/reviews/

    Thanks!

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘Custom Amount: Make it first option in Dropdown’ is closed to new replies.