Novice Wordpress developer here, so I could really use some assistance. I'm building a widget that displays a feature, but the options aren't saving. When you hit "Save", all the boxes go blank again. I think I'm missing something obvious!
Here's the relevant parts of my widget code:
// First create the widget for the admin panel
class icon_features_widget extends WP_Widget {
function icon_features_widget() {
$widget_ops = array( 'description' => __( 'Displays icon features in a widget', 'icon-feature-widget' ) );
$this->WP_Widget( 'icon_feature_widget', __( 'Icon Feature', 'icon-feature-widget' ), $widget_ops );
}
function form( $instance ) {
$icon_feature_title = isset( $instance['icon_feature_title'] ) ? $instance['icon_feature_title'] : '';
$icon_feature_text = isset( $instance['icon_feature_text'] ) ? $instance['icon_feature_text'] : '';
$icon_feature_link_url = isset( $instance['icon_feature_link_url'] ) ? $instance['icon_feature_link_url'] : '';
$icon_feature_link_text = isset( $instance['icon_feature_link_text'] ) ? $instance['icon_feature_link_text'] : '';
$radioValue = isset( $instance['radioValue'] ) ? $instance['radioValue'] : '';
$icon_feature_icon_class = isset( $instance['icon_feature_icon_class'] ) ? $instance['icon_feature_icon_class'] : '';
$icon_feature_custom_icon_url = isset( $instance['icon_feature_custom_icon_url'] ) ? $instance['icon_feature_custom_icon_url'] : '';
?>
<p>
<label for="icon_feature_title">Title:</label><br />
<input type="text" name="icon_feature_title" id="icon_feature_title" value="<?php echo $icon_feature_title ; ?>" />
</p>
<p>
<label for="icon_feature_text">Text:</label><br />
<textarea name="icon_feature_text" id="icon_feature_text" value="<?php echo $icon_feature_text ; ?>" rows="6" cols="21"/></textarea>
</p>
<p>
<label for="icon_feature_link_url">Link URL:</label><br />
<input type="text" name="icon_feature_link_url" id="icon_feature_link_url" value="<?php echo $icon_feature_link_url ; ?>" />
</p>
<p>
<label for="icon_feature_link_text">Link Text (defaults to "Read More"):</label><br />
<input type="text" name="icon_feature_link_text" id="icon_feature_link_text" value="<?php echo $icon_feature_link_text ; ?>" />
</p>
<p>Choose which icon source you'd like to use.</p>
<p>
<label>
<input type="radio" id="iconRadio" name="whichToDisplay" value="icon" <?php echo ($radioValue == 'icon' || $radioValue == '') ? 'checked="checked"':''; ?>/>
Choose from included icons
</label><br />
<label>
<input type="radio" id="customIconRadio" name="whichToDisplay" value="customIcon" <?php echo ($radioValue == 'customIcon') ? 'checked="checked"':''; ?>/>
Display custom icon
</label><br />
<label>
<input type="radio" id="nothingRadio" name="whichToDisplay" value="nothing" <?php echo ($radioValue == 'nothing') ? 'checked="checked"':''; ?>/>
Display neither
</label><br /><br />
</p>
<p> <!-- REPLACE THIS WITH SOME KIND OF ICON CHOOSER DROPDOWN THING -->
<label for="icon_feature_icon_class">Icon Class:</label><br />
<input type="text" name="icon_feature_icon_class" id="icon_feature_icon_class" value="<?php echo $icon_feature_icon_class ; ?>" />
</p>
<p> <!-- REPLACE THIS WITH A WORDPRESS IMAGE CHOOSER / MEDIA LIBRARY CHOOSER -->
<label for="icon_feature_custom_icon_url">Custom Icon URL:</label><br />
<input type="text" name="icon_feature_custom_icon_url" id="icon_feature_custom_icon_url" value="<?php echo $icon_feature_custom_icon_url ; ?>" />
</p>
<?php
}
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['icon_feature_title'] = $new_instance['icon_feature_title'];
$instance['icon_feature_text'] = $new_instance['icon_feature_text'];
$instance['icon_feature_link_url'] = $new_instance['icon_feature_link_url'];
$instance['icon_feature_link_text'] = $new_instance['icon_feature_link_text'];
$instance['radioValue'] = $new_instance['radioValue'];
$instance['icon_feature_icon_class'] = $new_instance['icon_feature_icon_class'];
$instance['icon_feature_custom_icon_url'] = $new_instance['icon_feature_custom_icon_url'];
return $instance;
}
Thanks much!
in your function update try use $instance as blank array not $old_instance and check once some thing like..
function update( $new_instance, $old_instance ) {
$instance = array();
.........
}
Thanks for the help! Fixed my problem though, which was in the form code: I wasn't using the proper Wordpress methods for id, name & value for the input elements:
I had this:
<input type="text" name="icon_feature_link_text" id="icon_feature_link_text" value="<?php echo $icon_feature_link_text ; ?>" />
And I changed it to this:
<input type="text" name="<?php echo $this->get_field_name('icon_feature_link_text') ; ?>" id="<?php echo $this->get_field_id( 'icon_feature_link_text' ); ?>" value="<?php echo esc_attr( $icon_feature_link_text ) ; ?>" />
I did that for all the inputs (as well as the labels), rather than hard-coding in id & name, and now it saves perfectly.
Thanks!
Related
i have a option in my plugin that make this field required or not but how we can manage please any one give me some solution i have try but fail
<div class="create-account">
<p>
<label for="label_birthday"><?php echo esc_attr( $birthday_label, 'dobc' ); ?>
<?php if ( 'yes' === $birthday_required ) : ?>
<span class="required" style="color:red;">*</span>
<?php endif; ?>
</label>
<input type="date" class="input-text" name="dobc_date_field" id="date of birthd " value="<?php echo esc_html( $show_date ); ?>" required/>
<?php wp_nonce_field( 'birthday_nonce_action_checkout', 'birday_fields_checkout_nonce' ); ?>
</p>
</div>
<div class="clear"></div>
<?php
}
If you wanna just html required attribute you can do something like this.
<?php $required = ($birthday_required == 'yes') ? 'required' : '' ; ?>
<input name="dobc_date_field" <?php echo $required; ?> />
I am trying to build a custom search form in Wordpress where the user would be able to select custom taxonomies to filter the posts against.
I am unfortunately getting this warning:
Warning: urlencode() expects parameter 1 to be string, array given in /wordpress/wp-includes/formatting.php on line 5343, which is this function:
function wp_basename( $path, $suffix = '' ) {
return urldecode( basename( str_replace( array( '%2F', '%5C' ), '/', urlencode( $path ) ), $suffix ) );
}
Here is my code of the form:
<form action="/" method="get">
<?php $post_type = !empty( $_GET['post_type'] ) ? $_GET['post_type'] : 'company'; ?>
<label for="search" class="block"><?php echo __('Search', 'mydomain'); ?>:</label>
<input type="radio" name="post_type" value="company" <?php echo $post_type == 'company' ? 'checked' : ''; ?>>Companies</input>
<input type="radio" name="post_type" value="auditor" <?php echo $post_type == 'auditor' ? 'checked' : ''; ?>>Auditors</input>
<input type="text" name="s" id="search" value="<?php the_search_query(); ?>" class="block" placeholder="<?php echo __('Type here'); ?>" />
<div>
<?php $certificates = get_terms([
'taxonomy' => 'certificate',
'hide_empty' => false
]);
foreach($certificates as $certificate) :
?>
<input type="checkbox" name="certificate[]" id="certificate-<?php echo $certificate->slug; ?>" value="<?php echo $certificate->slug; ?>" <?php echo (!empty($_GET['certificate']) && in_array($certificate->slug, $_GET['certificate']) ) ? 'checked' : ''; ?>> <?php echo $certificate->name; ?>
<?php
endforeach;
?>
</div>
<input type="hidden" value="<?php echo pll_current_language(); ?>" name="lang" id="lang" />
<input type="submit" value="<?php echo __('Search'); ?>" />
</form>
and this is how I attempt to see the search results:
http://wordpress.local/?post_type=auditor&s=&certificate%5B%5D=iso-22000&certificate[]=iso-9001
Any ideas how to bypass this warning and still submit the checkboxes as an array? (custom_tax[])
I created a form which will be entered by user
<form id="wc-form-return" action="" method="post">
<label><?php _e('Select products for return','wc_return') ?></label>
<select id="wc_products[]" name="wc_products" class="wc_products" multiple="multiple">
<?php
if ( sizeof( $products ) > 0 ) {
foreach( $products as $item ) { ?>
<option value="<?php echo $item['item_meta']['_product_id'][0]; ?>"><?php echo __(esc_html($item['name']), 'wc_return'); ?></option>
<?php
}
}
?>
</select>
<small><?php _e('You can select multiple by holding down the CMD or Ctrl key.','wc_return'); ?></small>
<textarea name="wc_message" id="wc_message" cols="30" rows="10" placeholder="<?php _e('Explain the reasons for your return', 'wc_return') ?>"></textarea>
<input type="hidden" name="order" value="<?php echo $order->id; ?>" />
<input type="hidden" name="customer" value="<?php echo $order->billing_email; ?>" />
<input type="text" name="phone" id="wc_phone" value="<?php echo $order->billing_phone; ?>" />
<input type="checkbox" name="check1" value="Yes" required>Accept our return and exchange policy </br>
<input type="submit" name="submit" value="<?php _e('Submit','wc_return'); ?>" />
</form>
It will be entered by user and we will be sent to given email (that is already setted up)
Now to give these information in email i used
$note_form_email = '';
if ( $_POST['wc_message'] != '' ) {
$note .= '<br><br>';
$note .= '<p>'.__('And the explanation:', 'wc_return').'</p>';
$note_form_email .= '<p>'.__('And the explanation:', 'wc_return').'</p>';
$note .= apply_filters( 'the_content', $_POST['wc_message'] );
$note_form_email .= apply_filters( 'the_content', $_POST['wc_message'] );
$note .= '<p>'.__('Customer details:', 'wc_return').'</p>';
$note_form_email .= '<p>'.__('Customer details:', 'wc_return').'</p>';
$note .= '<p>'.__('Customer phone:','wc_return').'</p>';
$note_form_email .= '<p>'.__('Customer phone:','wc_return').'</p>';
$note .= apply_filters('the_content', $_POST['wc_phone'] );
$note_form_email .= apply_filters('the_content', $_POST['wc_phone'] );
}
But output was like this
And the explanation:
Huhhh
Customer details:
Customer phone:
That 'Huhhh' was written by user on wc_message. He also wrote wc_phone but it was not showing in email. Wc_message is working properly but wc_phone isnt. What am i doing wrong?
I am trying to tweak Wordpress Jigoshop according to my customer's needs and I got a bit stuck. What I need is: when a product variation is selected, some additional options appear in the form of radio buttons which customers must chose. I've managed to get everything working, but what I need now is to send the selected radio button to the cart, checkout and so on when the submit button is clicked.
I am trying to use their product customization function to do this and their function is:
if (!function_exists('jigoshop_product_customize_panel')) {
function jigoshop_product_customize_panel() {
global $_product;
if ( isset( $_POST['Submit'] ) && $_POST['Submit'] == 'Save Personalization' ) {
$custom_products = (array) jigoshop_session::instance()->customized_products;
$custom_products[$_POST['customized_id']] = trim( wptexturize( $_POST['jigoshop_customized_product'] ));
jigoshop_session::instance()->customized_products = $custom_products;
}
if ( get_post_meta( $_product->ID , 'customizable', true ) == 'yes' ) :
$custom_products = (array) jigoshop_session::instance()->customized_products;
$custom = isset( $custom_products[$_product->ID] ) ? $custom_products[$_product->ID] : '';
$custom_length = get_post_meta( $_product->ID , 'customized_length', true );
$length_str = $custom_length == '' ? '' : sprintf( __( 'You may enter a maximum of %s characters.', 'jigoshop' ), $custom_length );
echo '<div class="panel" id="tab-customize">';
echo '<p>' . apply_filters('jigoshop_product_customize_heading', __('Enter your personal information as you want it to appear on the product.<br />'.$length_str, 'jigoshop')) . '</p>';
?>
<form action="" method="post">
<input type="hidden" name="customized_id" value="<?php echo esc_attr( $_product->ID ); ?>" />
<?php
if ( $custom_length == '' ) :
?>
<textarea
id="jigoshop_customized_product"
name="jigoshop_customized_product"
cols="60"
rows="4"><?php echo esc_textarea( $custom ); ?>
</textarea>
<?php else : ?>
<input
type="text"
id="jigoshop_customized_product"
name="jigoshop_customized_product"
size="<?php echo $custom_length; ?>"
maxlength="<?php echo $custom_length; ?>"
value="<?php echo esc_attr( $custom ); ?>" />
<?php endif; ?>
<p class="submit"><input name="Submit" type="submit" class="button-alt add_personalization" value="<?php _e( "Save Personalization", 'jigoshop' ); ?>" /></p>
</form>
<?php
echo '</div>';
endif;
}
}
I tried modifying their function to suit my needs and this is what I've come up with (where get_cod is the id and name of the hidden input and "Adauga in cos" is the value of my submit button):
if (!function_exists('salveaza_cod_material')) {
function salveaza_cod_material() {
global $_product;
if ( isset( $_POST['submit']) && $_POST('submit') == 'Adauga in cos') {
$custom_products = (array) jigoshop_session::instance()->customized_products;
$custom_products[$_POST['customized_id']] = trim( wptexturize( $_POST['get_cod'] ));
jigoshop_session::instance()->customized_products = $custom_products;
}
$custom_products = (array) jigoshop_session::instance()->customized_products;
$custom = isset( $custom_products[$_product->ID] ) ? $custom_products[$_product->ID] : '';
}}
However the value isn't sent to the next page. Can anybody please help? Cheers!
Here's an update containing more of the code:
<form action="<?php echo esc_url( $_product->add_to_cart_url() ); ?>" class="variations_form cart" method="post">
<fieldset class="variations">
<?php foreach ( $attributes as $name => $options ): ?>
<?php $sanitized_name = sanitize_title( $name ); ?>
<div>
<span class="select_label"><?php echo jigoshop_product::attribute_label('pa_'.$name); ?></span>
<select id="<?php echo esc_attr( $sanitized_name ); ?>" name="tax_<?php echo $sanitized_name; ?>">
<option value=""><?php echo __('Choose an option ', 'jigoshop') ?>…</option>
<?php foreach ( $options as $value ) : ?>
<?php if ( taxonomy_exists( 'pa_'.$sanitized_name )) : ?>
<?php $term = get_term_by( 'slug', $value, 'pa_'.$sanitized_name ); ?>
<option value="<?php echo esc_attr( $term->slug ); ?>"><?php echo $term->name; ?> </option>
<?php else : ?>
<option value="<?php echo esc_attr( sanitize_title( $value ) ); ?>"><?php echo $value; ?></option>
<?php endif;?>
<?php endforeach; ?>
</select>
</div>
<?php endforeach;?>
</fieldset>
<div id="piele-neagra" class="colors" style="display:none">
<ul class="materiale">
<li><input type="radio" name="piele-neagra" value="L73">
<p><img class="alignnone size-full wp-image-155" title="L73" src="http://www.scaune-directoriale.ro/wp-content/uploads/materiale/piele-neagra/L73.gif" alt="L73" width="72" height="72" /></p>
</li>
</ul>
</div>
<div id="stofa-mf" class="colors" style="display:none">
<ul class="materiale">
<li><input type="radio" name="tapiterie" value="MF01" />
...
<div id="stofa-rg" class="colors" style="display:none"> Stofa RG</div>
<div class="clear"></div>
<span id="cod_material"><?php echo esc_attr( $custom ); ?></span>
<span><?php echo trim( wptexturize( $_POST['get_cod'] )); ?></span>
<div class="single_variation"></div>
<?php do_action('jigoshop_before_add_to_cart_form_button'); ?>
<div class="variations_button" style="display:none;">
<input type="hidden" name="variation_id" value="" />
<input type="hidden" name="customized_id" value="<?php echo esc_attr( $_product->ID ); ?>" />
<input type="hidden" id="get_cod" name="get_cod" value="" />
<input type="hidden" name="product_id" value="<?php echo esc_attr( $post->ID ); ?>" />
<div class="quantity"><input name="quantity" value="1" size="4" title="Qty" class="input-text qty text" maxlength="12" /></div>
<input type="submit" id="submit_cart" class="button-alt" value="<?php esc_html_e('Add to cart', 'jigoshop'); ?>" />
</div>
<?php do_action('salveaza_cod_material'); ?>
<?php do_action('jigoshop_add_to_cart_form'); ?>
</form>
And this is the section of the cart that receives the value:
if ( !empty( $values['variation_id'] )) {
$product_id = $values['variation_id'];
} else {
$product_id = $values['product_id'];
}
$custom_products = (array) jigoshop_session::instance()->customized_products;
$custom = isset( $custom_products[$product_id] ) ? $custom_products[$product_id] : '';
if ( ! empty( $custom_products[$product_id] ) ) :
?>
<dl class="customization">
<dt class="customized_product_label"><?php echo apply_filters('jigoshop_customized_product_label', __('Personal: ','jigoshop') ); ?></dt>
<dd class="customized_product"><?php echo esc_textarea( $custom ); ?></dd>
</dl>
<? php
endif;
?>
It's just a typo: in if ( isset( $_POST['submit']) && $_POST('submit') == 'Adauga in cos'), replace $_POST('submit')by $_POST['submit']
I got a custom post type, with a form for storing some data (name, url) to display in a template.
What I want to know is how can I store those values in an array?
An example of my code:
<? function files_metadata(){
global $post;
$custom = get_post_custom($post->ID);
$name = $custom["name"][0];
$url = $custom["url"][0];
echo '<input type="hidden" name="files_metadata" id="files_metadata" value="' .wp_create_nonce('files_m'). '" />'; ?>
<label>Name: </label><br/>
<input id="name" name="name" value="<?php echo $name; ?>" />
<label>Url: </label><br/>
<input id="url" name="url" value="<?php echo $url; ?>" />
<? function save_meta_files($post_id) {
if (!wp_verify_nonce($_POST['files_metadata'], 'files_m')) return $post_id;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
update_post_meta($post_id, "name", $_POST["url"]);
update_post_meta($post_id, "url", $_POST["url"]);
}
add_action('save_post', 'save_meta_files'); ?>
To this I want to add something like...
$url = $custom["url"][0];
$url2 = $custom["url"][1];
$url3 = $custom["url"][2];
<input id="url" name="url[0]" value="<?php echo $url; ?>" />
<input id="url2" name="url[1]" value="<?php echo $url2; ?>" />
<input id="url3" name="url[2]" value="<?php echo $url3; ?>" />
update_post_meta($post_id, "url", $_POST["url"][0]);
update_post_meta($post_id, "url2", $_POST["url"][1]);
update_post_meta($post_id, "url3", $_POST["url"][2]);
...but that actually works...
A passed array will be serialized into a string: http://codex.wordpress.org/Function_Reference/update_post_meta
update_post_meta(
$post_id,
'files_metadata',
array(
'name1' => $_POST['name1'],
'url1' => $_POST['url1']
'name2' => $_POST['name2'],
'url2' => $_POST['url2']
)
);