Duncanmoo,
This is the function you want to look at to get the instance variables:
public function update ($new_instance, $old_instance) {
$instance = $old_instance;
$instance['collect_first'] = ! empty($new_instance['collect_first']);
$instance['collect_last'] = ! empty($new_instance['collect_last']);
$instance['current_mailing_list'] = esc_attr($new_instance['current_mailing_list']);
$instance['failure_message'] = esc_attr($new_instance['failure_message']);
$instance['signup_text'] = esc_attr($new_instance['signup_text']);
$instance['success_message'] = esc_attr($new_instance['success_message']);
$instance['title'] = esc_attr($new_instance['title']);
return $instance;
}
The arguments get set up in your sidebar, the before_widget, after_widget, before_title, after_title stuff. Does that get you pointed in the right direction?
Cheers,
James
Thanks James
This gets me closer, but not quite there yet, my shortcode now looks like this:
// [chimpsubs letter=locals]
function chimpsubs($atts) {
extract(shortcode_atts(array(
'letter' => 'xyz123456'
), $atts));
ob_start();
the_widget('NS_Widget_MailChimp',array('signup_text'=>'subscribe',
'current_mailing_list'=>$letter,
'failure_message'=>'There was a problem processing your submission.',
'success_message'=>'Thank you for joining our mailing list. Please check your email for a confirmation link.'));
$output = ob_get_contents();
ob_end_clean();
return $output;
}
add_shortcode('chimpsubs', 'chimpsubs');
Form displays nicely but submission says “Sorry, but that does not look like an email address to me.” for perfectly valid addresses (ones that do work on the sidebar).
Noticed a variable on sidebar HTML:
<input type="hidden" value="3" name="ns_mc_number">
which on my custom implementation displays as:
<input type="hidden" value="-1" name="ns_mc_number">
The full HTML of a call to the shortcode:
<div class="widget widget_ns_mailchimp">
<h2 class="widgettitle"></h2>
<form method="post" id="ns_widget_mailchimp_form--1" action="/newsletter/">
<div class="error"></div>
<label>Email Address :</label>
<input type="hidden" value="-1" name="ns_mc_number">
<input type="text" name="ns_widget_mailchimp_email">
<input type="submit" value="subscribe" name="subscribe" class="button">
</form>
<script type="text/javascript">
jQuery('#ns_widget_mailchimp_form--1').ns_mc_widget({"url" : "/index.php", "cookie_id" : "ns_widget_mailchimp--1", "cookie_value" : "hidden hash", "loader_graphic" : "http://website.localhost/wp-content/plugins/mailchimp-widget/images/ajax-loader.gif"});
</script>
</div>
What am I missing?
Hi Duncanmoo,
So the issue is that the plugin submits back to the correct MailChimp list based on which instance of the widget is being used. I thought perhaps there might be a way to workaround this, but, alas, there is nothing that can be done without considerable acrobatics. This has come up a few times, and when I get some time to work on the next release of the plugin, that’s definitely a feature I’d like to incorporate. If you’re interested, the line of code where that -1 is coming from is here:
$widget_obj->_set(-1);
$widget_obj->widget($args, $instance);
which is the last two lines of the_widget() on ll 1206-1207 of wp-includes/widgets.php. That makes a widget you instantiate with the_widget very different from widgets made in the normal way.
Sorry I couldn’t be of more help right away, and I’ll post back here when I release a version that does what you want.
Cheers,
James
Thanks James and no need to apologize, I really appreciate you getting back to me on this. It does let anyone out there know that for now the widget can not be called other than through using the WP widget interface.
Hi Duncanmoo,
I was wrestling with the same issue (I think), in that I wanted to display the widget only on certain pages.
Here is my somewhat roundabout solution. It’s a wee bit wacky hacky feeling, and the MailChimp javascript file will still be called on all your public pages, but I figure this is good enough for now!
1) Created a special widget area just for this guy in functions.php. If you have unused widget areas, you could just use one of those.
register_sidebar( array(
'id' => 'mailchimp',
'name' => __( 'Mailchimp', 'synotac' ),
'description' => __( 'Mailchimp widget.', 'synotac' ),
) );
2) Add the widget in the wordpress admin area to my new sidebar
3) Only call that sidebar when I want it to display (page.php, single.php, special sidebar times, etc.). You could probably do away with the is_active check if you’re feeling bold. And remember that it needs it’s unordered (ul) list.
<?php
if ( is_active_sidebar( 'mailchimp' ) ) {
dynamic_sidebar( 'mailchimp' );
}
?>
Hope that helps!
And many thanks to James for the plugin! I like it!
Cat
Hi Cat,
Nice workaround. Using before_widget and after_widget in the register sidebar call will allow you to put the widget markup in whatever container you’d like:
register_sidebar( array(
'id' => 'mailchimp',
'name' => __( 'Mailchimp', 'synotac' ),
'description' => __( 'Mailchimp widget.', 'synotac' ),
) );
in your code could become
register_sidebar( array(
'id' => 'mailchimp',
'name' => __( 'Mailchimp', 'synotac' ),
'description' => __( 'Mailchimp widget.', 'synotac' ),
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
) );
if you wanted to use a div to contain the widget. Thanks so much for trying out the plugin, and I’m glad you like it. 🙂
[mailchimpsf_widget]
i think you want this.
you can put it in you template file as:
<?php do_shortcode(‘[mailchimpsf_widget]’); ?>
for more details you can contact me @ [email protected]
Hi maverics1luv,
It looks to me like that’s a different plugin. Which plugin are you using?
Cheers,
J.
Hi James,
I am using this one, Please check it out:
http://ww.wp.xz.cn/extend/plugins/mailchimp/
& shortcode is above mentioned to use it in the page.
Regards