I have a custom post type called 'bookings' that saves several fields of meta data to wp_postmeta.
I have a page that displays all the entries from this custom post type, i.e. all the bookings.
Here is the code to display my bookings:
<?php
$current_user = wp_get_current_user();
$args = array(
'post_type' => 'bookings',
'meta_query' => array(
array(
'key' => 'wedding_user',
'value' => $current_user->display_name,
'compare' => '=',
)
)
);
// Welcome
echo '<div class="user_avatar">'.get_avatar( $current_user->ID, 32 ).'</div>';
echo '<div class="user_welcome"><p>Hello '.$current_user->display_name.' <span class="user_id">(ID# '.$current_user->ID.')</span></p>';
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
if (get_post_meta( $the_query->post->ID, 'wedding_hidden_is_completed', true )==1) {
$is_complete = 'Form Complete <br /><span class="small">('.get_post_meta( $the_query->post->ID, 'wedding_hidden_date_completed', true ).')</span>';
} else {
$is_complete = 'Not Complete';
}
echo '<p class="booking_id">Booking ID: DISTR' . $the_query->post->ID . '</p>';
echo '<ul class="show_bookings">';
echo '<li>' . get_post_meta( $the_query->post->ID, 'wedding_name', true ) . '</li>';
echo '<li>' . get_post_meta( $the_query->post->ID, 'wedding_date', true ) . '</li>';
echo '<li>' . get_post_meta( $the_query->post->ID, 'wedding_package', true ) . '</li>';
echo '<li>£' . get_post_meta( $the_query->post->ID, 'wedding_price', true ). '</li>';
echo '<li>' . get_post_meta( $the_query->post->ID, 'wedding_payment_due_date', true ) . '</li>';
echo '<li>' . $is_complete . '</li>';
echo '<li>Is Viewed?</li>';
echo '<li>Actions';
echo '<ul class="actions-sub-menu">';
echo '<li>Fill out booking form</li>';
echo '<li>Pay deposit</li>';
echo '<li>Pay remaining balance</li>';
echo '<li>Email a copy of your receipt</li>';
echo '<li>View booking form</li>';
echo '</ul>';
echo '</li> <!--end actions-sub-menu-->';
echo '</ul>';
?>
<div class="pay_deposit">
<?php
require DISTRACTIONS_LOGIN_PLUGIN_DIR . 'includes/payments/deposit.php';
?>
</div> <!-- end pay deposit -->
<?php
}
} else {
echo '<p>No bookings found</p>';
}
/* Restore original Post Data */
wp_reset_postdata();
?>
under each booking is a paypal payment button - it uses paypal IPN, so nothing too complex (you will see the required file in the "pay_deposit" div).
Here is my paypal payment form:
<?php
$paypal_url='https://www.sandbox.paypal.com/cgi-bin'; //
$paypal_id='malik#thedistractionsband.co.uk'; // Business email ID
$booking_form_id = $the_query->post->ID;
$total_amount = get_post_meta( $the_query->post->ID, 'wedding_price', true );
$deposit_amount = $total_amount*0.2;
?>
<h3>Pay Deposit</h3>
<p>Your deposit aount of £<?php echo $deposit_amount; ?> ...</p>
<form action="<?php echo $paypal_url; ?>" method="post" name="frmPayPal1">
<input type="hidden" name="business" value="<?php echo $paypal_id; ?>">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="item_name" value="<?php echo get_post_meta( $the_query->post->ID, 'wedding_name', true ); ?> - 20% Deposit">
<input type="hidden" name="item_number" value="DISTR<?php echo $booking_form_id; ?>">
<input type="hidden" name="credits" value="510">
<input type="hidden" name="userid" value="<?php echo $current_user->ID; ?>">
<input type="hidden" name="amount" value="<?php echo $deposit_amount; ?>">
<input type="hidden" name="cpp_header_image" value="http://www.thedistractionsband.co.uk/files/2015/08/LOGO-1.1-1024x304.png">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="currency_code" value="GBP">
<input type="hidden" name="handling" value="0">
<input type="hidden" name="cancel_return" value="<?php echo get_site_url()."/payment-cancel/"; ?>">
<input type="hidden" name="return" value="<?php echo get_site_url()."/my-bookings/"; ?>">
<input name="notify_url" value="<?php echo DISTRACTIONS_LOGIN_PLUGIN_URL ?>includes/payments/paypal-ipn.php" type="hidden">
<input type="submit" border="0" name="submit" value="Pay Now" alt="PayPal - The safer, easier way to pay online!">
<div class="cards"><i class="fa fa-cc-amex"></i> <i class="fa fa-cc-mastercard"></i> <i class="fa fa-cc-visa"></i> <i class="fa fa-credit-card"></i> <i class="fa fa-cc-paypal"></i></div>
</form>
When a payment is made, it uses the following file to communicated with paypal and update my database - paypal-ipn.php
<?php
// Make wordpress functions available - so we can write to the db etc
$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
global $wpdb;
update_post_meta($booking_id, 'deposit_paid', 1);
?>
My issue is in this file. The update_post_meta function is used to add a '1' to the deposit_paid column in my wp_postmeta db table. The issue I have is, how do I define the $booking_id - making sure that it is for the booking that has been paid for.
For example, on my page that lists all my bookings, if the first has post_id 10 and I pay for that, how do I make sure that the 'deposit_paid' entry for post_id 10 is updated?
Figured it out, I need to use:
$booking_id = $_POST['item_number'];
To get the item number sent to paypal (which is the same as the post id)
Related
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 was unable to get my wordpress widget to post forms correctly. I took the advice on this website and researched the issue (see relevant links at the bottom of the post) to see what the problem was. The first issue was that I could not use "name" for a field. I needed to make sure that the posted name was unique. If not, Wordpress would bring me to a "Site Not Found" which was really cryptic.
The key to figuring this out was to start with this example:
https://www.w3schools.com/php/php_forms.asp
I literally copied and pasted that example into the widget function, of course taking out the html head and tail business. It did not work because it was posting to "name" which already existed. Also, the file reference for Wordpress did not start in the plugin directory, but rather the wordpress directory; so it ended up looking in the wrong place for the action.php file that is run after the submit is made. Look carefully at the URL address bar when the post is made to see if the action is actually getting to the right place. Finally, I adjusted the address, and everything worked like in the example; however, it left the main Wordpress page. So I was stuck.
I put back "" as the action page. I tried the GET method; that did not work for me (and I am still not sure why, but I should adjust it and check it out because GET is preferable for this application; it allows bookmarks); it ended up (thank G-d) that the "post" method worked. (Just now, I changed all occurrences of "post" to "get" and all instances of "POST" to "GET" and it is working as expected. I was having a problem with GET where the URL was being formed correctly and then I could not access it. That problem was I was nesting PHP. I removed all the nested PHP. Along the route, I updated the initial slider value which was not set correctly.
And finally it works!
Starting Code:
public function widget( $args, $instance ) {
/* include "thiswidget.php"; */ /*disable for now*/
/* Include the widget($args, $instance) function body */
/* include "businesspartnerships.php"; */ /*Original works fine with id update */
static $recommended_ex_no = 3;
static $example_run = 4;
$example_max = 4;
$example_min = 0;
$this_widg_id = $this->id; /* Get the widget ID to be the unique ID Key */
$default_slider_value = 3; /*Default slider value if nothing new has been posted */
if ($example_run > 0) { /*Provide a slider to select examples */
/*See http://foundation.zurb.com/sites/docs/v/5.5.3/components/range_slider.html */
/*See http://www.html5tutorial.info/html5-range.php */
/*See https://www.w3schools.com/php/php_forms.asp */
?><p> Recommended View Example Number: <?php echo $recommended_ex_no ?></p>
<!-- See: http://stackoverflow.com/questions/11788005/how-to-get-fetch-html5-range-sliders-value-in-php -->
<form action="" method="post">
<input type="range" min="<?php echo $example_min;?>" max="<?php echo $example_max;?>" step="1" value="<?php echo $set_slider_value ?>" id="<?php echo $this_widg_id; ?>" name="<?php echo $this_widg_id; ?>" onchange='document.getElementById("text_<?php echo $this_widg_id; ?>").value = "Slider Value = " + document.getElementById("<?php echo $this_widg_id; ?>").value;'/>
<br><center><input type="text" style="text-align: center" name="text_<?php echo $this_widg_id; ?>" id="text_<?php echo $this_widg_id; ?>" value="Slider Value = <?php echo $set_slider_value ?>" disabled /></center>
<br />
<center><input style="text-align: center" type="submit" value="Submit" /></center>
</form>
<?php
$this_widg_id = esc_attr( $this->id) ; /* Get the widget ID to be the unique ID Key */
echo "The key is : "; echo esc_attr( $this->id); echo "<br><br>";
if(isset($_POST[esc_attr( $this->id)])){
echo '<br> isset below get <br>';
echo "<center>The example selected is: ".$_POST[esc_attr( $this->id)]." </center>";
// Your Slider value is here, do what you want with it. Mail/Print anything..
$example_run = $_POST[esc_attr( $this->id)];
$set_slider_value = $_POST[esc_attr( $this->id)]; /*If the value has been posted, then show it.*/
} else {
/* $set_slider_value = $default_slider_value; */ /* Slider value is initially set to default. */
}
}
/* Try https://www.w3schools.com/php/php_forms.asp example here, since form update was not working before */
?>
<!-- <form action="wp-content/plugins/carousel_edit_url_for_newspro/welcome_get.php" method="post"> -->
<form action="" method="post">
Name: <input type="text" name="thisexname"><br>
<!-- E-mail: <input type="text" name="email"><br> -->
<input type="submit">
</form>
<?php
if (isset($_POST[esc_attr("thisexname")])){
echo 'Welcome '; echo $_POST["thisexname"]; echo "<br>";
}
?>
<?php
/*Setup example runs; an example run of 0 does not run! */
if ($example_run > 0) {
echo '<p>Example content being viewed currently is now example number '.$example_run.':';
}
...
Intermediate code (full Widget Function):
public function widget( $args, $instance ) {
/* include "thiswidget.php"; */ /*disable for now*/
/* Include the widget($args, $instance) function body */
/* include "businesspartnerships.php"; */ /*Original works fine with id update */
static $recommended_ex_no = 3;
static $example_run = 4;
$example_max = 4;
$example_min = 0;
$this_widg_id = $this->id; /* Get the widget ID to be the unique ID Key */
$default_slider_value = 3; /*Default slider value if nothing new has been posted */
if ($example_run > 0) { /*Provide a slider to select examples */
/*See http://foundation.zurb.com/sites/docs/v/5.5.3/components/range_slider.html */
/*See http://www.html5tutorial.info/html5-range.php */
/*See https://www.w3schools.com/php/php_forms.asp */
?><p> Recommended View Example Number: <?php echo $recommended_ex_no ?></p>
<!-- See: http://stackoverflow.com/questions/11788005/how-to-get-fetch-html5-range-sliders-value-in-php -->
<form action="" method="get">
<input type="range" min="<?php echo $example_min;?>" max="<?php echo $example_max;?>" step="1" value="<?php echo $set_slider_value ?>" id="<?php echo $this_widg_id; ?>" name="<?php echo $this_widg_id; ?>" onchange='document.getElementById("text_<?php echo $this_widg_id; ?>").value = "Slider Value = " + document.getElementById("<?php echo $this_widg_id; ?>").value;'/>
<br><center><input type="text" style="text-align: center" name="text_<?php echo $this_widg_id; ?>" id="text_<?php echo $this_widg_id; ?>" value="Slider Value = <?php echo $default_slider_value ?>" disabled /></center>
<br />
<center><input style="text-align: center" type="submit" value="Submit" /></center>
</form>
<?php
$this_widg_id = esc_attr( $this->id) ; /* Get the widget ID to be the unique ID Key */
echo "The key is : "; echo esc_attr( $this->id); echo "<br><br>";
if(isset($_GET[esc_attr( $this->id)])){
echo '<br> isset below get <br>';
echo "<center>The example selected is: ".$_GET[esc_attr( $this->id)]." </center>";
// Your Slider value is here, do what you want with it. Mail/Print anything..
$example_run = $_GET[esc_attr( $this->id)];
$set_slider_value = $_GET[esc_attr( $this->id)]; /*If the value has been posted, then show it.*/
} else {
/* $set_slider_value = $default_slider_value; */ /* Slider value is initially set to default. */
}
}
/* Try https://www.w3schools.com/php/php_forms.asp example here, since form update was not working before */
?>
<!-- <form action="wp-content/plugins/carousel_edit_url_for_newspro/welcome_get.php" method="post"> -->
<form action="" method="get">
Name: <input type="text" name="thisexname"><br>
<!-- E-mail: <input type="text" name="email"><br> -->
<input type="submit">
</form>
<?php
if (isset($_GET[esc_attr("thisexname")])){
echo 'Welcome '; echo $_GET["thisexname"]; echo "<br>";
}
?>
<?php
/*Setup example runs; an example run of 0 does not run! */
if ($example_run > 0) {
echo '<p>Example content being viewed currently is now example number '.$example_run.':';
}
if ($example_run == 1) {
echo '<p>Example Business Partnerships Begins</p>';
include "businesspartnerships.php"; /*full copy*/
echo '<p>Example BP Ends</p>';
}
elseif ($example_run == 2) {
echo '<p>Example for Business Begins</b>';
include "businesscarousel/business_head.php"; /*content before the loop*/
include "businesscarousel/business_loop.php"; /*the loop*/
include "businesscarousel/business_tail.php"; /*content after the loop*/
echo '<p>Example for Business Ends</b>';
}
elseif ($example_run == 3) {
echo '<p>Example for Books Begins</b>';
include "bookscarousel/books.php";
echo '<p>Example for Books Ends</b>';
}
elseif ($example_run == 4) {
echo '<p>Example for Looped Books Begins</b>';
include "bookscarousel/books_head_vars.php";
include "bookscarousel/books_head.php";
include "bookscarousel/books_loop_vars.php";
include "bookscarousel/books_loop.php";
include "bookscarousel/books_tail_vars.php";
include "bookscarousel/books_tail.php";
echo '<p>Example for Looped Books Ends</b>';
}
}
I finally cleaned up the code a little bit, taking out the examples and just running with the essentials (verified that this basically worked):
/**
* Front-end display of widget.
*
* #see WP_Widget::widget()
*
* #param array $args Widget arguments.
* #param array $instance Saved values from database.
*/
public function widget( $args, $instance ) {
/* include "thiswidget.php"; */ /*disable for now*/
/* Include the widget($args, $instance) function body */
/* include "businesspartnerships.php"; */ /*Original works fine with id update */
$example_run = 4; /*Set to 0 to disable all widget output */
$example_max = 4;
$example_min = 0;
$recommended_ex_no = 4;
$default_slider_value = 4; /*Default slider value if nothing new has been posted */
$this_widg_id = $this->id; /* Get the widget ID to be the unique ID Key */
if ($example_run > 0) { /*Provide a slider to select examples */
?><p> The Recommended Example Number To View is Example Number <?php echo $recommended_ex_no ?>.</p>
<!-- See: http://stackoverflow.com/questions/11788005/how-to-get-fetch-html5-range-sliders-value-in-php -->
<form action="" method="get">
<input type="range" min="<?php echo $example_min;?>" max="<?php echo $example_max;?>" step="1" value="<?php echo $set_slider_value ?>" id="<?php echo $this_widg_id; ?>" name="<?php echo $this_widg_id; ?>" onchange='document.getElementById("text_<?php echo $this_widg_id; ?>").value = "Slider Value = " + document.getElementById("<?php echo $this_widg_id; ?>").value;'/>
<br><center><input type="text" style="text-align: center" name="text_<?php echo $this_widg_id; ?>" id="text_<?php echo $this_widg_id; ?>" value="Slider Value = <?php echo $default_slider_value ?>" disabled /></center>
<br />
<center><input style="text-align: center" type="submit" value="Submit Slider Value" /></center>
</form>
<?php
$this_widg_id = esc_attr( $this->id) ; /* Get the widget ID to be the unique ID Key */
echo '<br><br><center><p style="text-align: center">This example widget instance is entitled, "';
echo esc_attr( $this->id); echo '".</p></center>';
if(isset($_GET[esc_attr( $this->id)])){
/* echo "<center>The example selected is: ".$_GET[esc_attr( $this->id)]." </center>"; */ /*Activate to debug */
// Your Slider value is here, do what you want with it. Mail/Print anything..
$example_run = $_GET[esc_attr( $this->id)];
$set_slider_value = $_GET[esc_attr( $this->id)]; /*If the value has been posted, then show it.*/
} else {
$set_slider_value = $default_slider_value; /* Slider value is initially set to default. */
}
} /*End if example is >0 */
/* If not working, adapt https://www.w3schools.com/php/php_forms.asp example here, since form update was not working before */
/*Setup example runs; an example run of 0 does not run! */
if ($example_run > 0) {
echo '<center><p style="text-align: center">The example content being viewed currently is now example number '.$example_run.':</p>';
}
if ($example_run == 1) {
echo '<p>Example Business Partnerships Begins</p>';
include "businesspartnerships.php"; /*full copy*/
echo '<p>Example BP Ends</p>';
}
elseif ($example_run == 2) {
echo '<p>Example for Business Begins</b>';
include "businesscarousel/business_head.php"; /*content before the loop*/
include "businesscarousel/business_loop.php"; /*the loop*/
include "businesscarousel/business_tail.php"; /*content after the loop*/
echo '<p>Example for Business Ends</b>';
}
elseif ($example_run == 3) {
echo '<p>Example for Books Begins</b>';
include "bookscarousel/books.php";
echo '<p>Example for Books Ends</b>';
}
elseif ($example_run == 4) {
echo '<p>Example for Looped Books Begins</b>';
include "bookscarousel/books_head_vars.php";
include "bookscarousel/books_head.php";
include "bookscarousel/books_loop_vars.php";
include "bookscarousel/books_loop.php";
include "bookscarousel/books_tail_vars.php";
include "bookscarousel/books_tail.php";
echo '<p>Example for Looped Books Ends</b>';
}
}
Also I had to make sure that the double quote " was not being used where the better ' quote unquote ' should be used.
Any advice to do this better?
And the next part of the question: how is this done on the back-end in the widgets appearance part of the admin screen?
The code I have for the back-end functions is (two-parts):
public function form( $instance ) {
/*
$title - site title
$url_config - private key to website or local file for include
$category_name_textbox - name of the category used for the widget in the textbox
$category_name - name of the category used for the widget
$posts_to_show - number of posts to show
*/
$title = ! empty( $instance['title'] ) ? $instance['title'] : esc_html__( 'New title', 'text_domain' );
$url_config = ! empty( $instance['url_config'] ) ? $instance['url_config'] : esc_html__( 'Display All', 'text_domain' );
$category_name_textbox = ! empty( $instance['category_name_textbox'] ) ? $instance['category_name_textbox'] : esc_html__( 'uncategorized', 'text_domain' );
$category_name = ! empty( $instance['$category_name'] ) ? $instance['$category_name'] : esc_html__( 'uncategorized', 'text_domain' );
$posts_to_show = ! empty( $instance['$posts_to_show'] ) ? $instance['posts_to_show'] : esc_html__( '4', 'text_domain' );
include "form_html.php";
}
The include "form_html.php" is included near the end of "public function form( $instance ) " to make the code more readable and also to highlight the issue. Its contents are here:
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_attr_e( 'Title:', 'text_domain' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
</p><label for="<?php echo esc_attr( $this->get_field_id('url_config' ) ); ?>"><?php esc_attr_e( 'URL Config:', 'text_domain' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'url_config' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'url_config' ) ); ?>" type="text" value="<?php echo esc_attr( $url_config ); ?>">
</p>
</p><label for="<?php echo esc_attr( $this->get_field_id('category_name_textbox' ) ); ?>"><?php esc_attr_e( 'Category Name:', 'text_domain' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'category_name_textbox' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'category_name_textbox' ) ); ?>" type="text" value="<?php echo esc_attr( $category_name_textbox ); ?>">
</p>
<p>
<label><?php _e( 'Category', 'newsmag-pro' ); ?> :</label>
<select name="<?php echo esc_attr( $this->get_field_name( 'newsmag_category' ) ); ?>"
id="<?php echo esc_attr( $this->get_field_id( 'newsmag_category' ) ); ?>">
<option value="" <?php if ( empty( $instance['newsmag_category'] ) ) {
echo 'selected="selected"';
} ?>><?php _e( '– Select a category –', 'newsmag-pro' ) ?></option>
<?php
$categories = get_categories( 'hide_empty=0' );
foreach ( $categories as $category ) { ?>
<option
value="<?php echo esc_attr( $category->slug ); ?>" <?php selected( esc_attr( $category->slug ), $instance['newsmag_category'] ); ?>><?php echo esc_attr( $category->cat_name ); ?></option>
<?php } ?>
</select>
</p>
<p>Selected Category: <? echo $instance['newsmag_category'] ?></p>
<label class="block" for="input_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ); ?>">
<span class="customize-control-title">
<?php _e( 'Posts to Show', 'newsmag-pro' ); ?> :
</span>
</label>
<input type="text" name="<?php echo esc_attr( $this->get_field_name( 'show_post' ) ); ?>" class="rl-slider"
id="input_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ); ?>"
value="<?php echo esc_attr( $instance['show_post'] ); ?>" />
<div id="slider_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ) ?>" data-attr-min="4"
data-attr-max="12" data-attr-step="1" class="ss-slider"></div>
<script>
jQuery(document).ready(function ($) {
$('[id="slider_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ); ?>"]').slider({
value: <?php echo esc_attr( $instance['show_post'] ); ?>,
range: 'min',
min : 4,
max : 12,
step : 1,
slide: function (event, ui) {
$('[id="input_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ); ?>"]').val(ui.value).keyup();
}
});
$('[id="input_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ) ?>"]').on('focus', function(){
$('[id="input_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ) ?>"]').trigger('blur');
});
$('[id="input_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ) ?>"]').val($('[id="slider_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ) ?>"]').slider("value"));
$('[id="input_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ) ?>"]').change(function () {
$('[id="slider_<?php echo esc_attr( $this->get_field_id( 'show_post' ) ) ?>"]').slider({
value: $(this).val()
});
});
});
</script>
<?php
So what is going wrong on the back-end? I can select the drop-down and it does not update anything. And I can adjust the slider bar, but then I cannot reference its value later to save its value. Any ideas how to solve the back-end website management aspect of this problem?
Because I am just registering, the references are limited to two. So you can find the more complete reference list at:
http://newyorkbusinessreview.com/wordpress/technology/stephen-elliott/technical-programming-questions/
By the way, if you go to the main website:
http://www.newyorkbusinessreview.com/
The main site currently redirects while still under construction to:
http://www.newyorkbusinessreview.com/wordpress/
I may have the plugin front-end disabled to not bring down the site while I am still working on the issues.
I basically copied and pasted the part of the code that had to do with the slider and the text box, just modifying the names and ID's slightly. On the back end it is easy to output values in a text box. That seems to have solved it. The slider now works on the back end and it updates the text box also inside the widget form there!
If any additional detail is wanted, please let me know so I can provide code samples if desired.
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']
)
);