Using Amazon S3 cloud storage with WordPress

I was quickly hooked to Amazon S3 storage via the free account creation offer on Amazon Cloud's website. AWS offers 5 free gigabytes of cloud storage, which is interesting if, as in my case, you need to host big files permanently, that could hardly be stored via standard wordpress installation. Of course you could increase upload limit but I am afraid this could be  security issue.

It turns out that the AMAZON WEB SERVICES is a cluster of different hosted applications, among which S3 is the simplest to use : it is no more than a file storage utility with a web based browser, web access to files, and various protection features.

If you want to host your WORDPRESS Media files on AMAZON S3, you need to install a plugin. I tried the WP READ ONLY plugin that is very easy to configure. All you need is to have configured  your S3 account :

  • choose a bucket   (some kind of folder for amazon S3),
  •  your amazon credentials : developer key and SECRET KEY

Other plugin I tried is wp2cloud but this one is more complex to configure as it requires linux skills to install Clouse,  Cloud Storage Engine for MySQL

Ajax Calendar plugin for past, present and future wordpress event management

[update 2013-09-01]

Version 1.3 of Ajax Calendar Future plugin  is now published on :  Sorry for the mess with include files, should be fixed now. Feel free to comment below if you encouter problems. current development for version 1.4 include calendar synchronisation with current post (display july in calendar if post was published in july).

Stay up to date and subscribe to our newsletter on our new site !

This plugin is one of the most simple way to use standard wordpress post system to build specific business applications

  • event calendar for wordpress
  • publication schedule for book editors
  • meeting planning for groups

the plugin creates a monthly calendar with top and bottom month navigation, with the option to ajaxify the bottom next and previous links  :

  • Ajax on : click on next / previous to reload the calendar without reloading archive page
  • Ajax off (default) : click on next / previous loads the archive page for the selected month




How to recreate woocommerce pages

When you activate woocommerce plugin, a message box pops up at the top of the wordpress dashboard, inviting you to let the plugin automatically create specific woocommerce pages : shopping cart, order page, user page, etc... You can also remove the notice if you want to create the pages yourself. But if you change your mind and would like woocommerce to create the pages there is a tip that is documented on a stackoverflow conversation, it's very simple :

What ended up working for me was adding "&install_woocommerce_pages=true" to the Settings page URL.


Complex layout operations with wordpress

Building enterprise web sites from various graphic models involves two different level of customisation within the wordpress framework.

Page and post templates in wordpress

Themes are pieces of code aggregating various page types : archive pages, single post display, single page display. Most commonly all models of a theme share the same header and footer, and depending on specific coding operations, the same menu from the wordpress menu system. The theming system allows a lot customization options, including the possibility to define page templates for letting editors choose, for example, between full size page and 2 column page with widget enabled margin.

In native wordpress, this templating modification works only for pages. if you need to do this for posts, you need to install a specific extension "Custom Post Template" that will let you define specific post template, the same way you do for pages, by writing specific php template with instructions in the header comments.

Multi theming your site

Considering possibilities described above, multiple theming raises a lot of issues. The plugin JonRadio multiple theme comes with many configuration options to define specific theme for pages or sections. It has a big drawback though : it does not integrate theme options for the second theme, like widgets or menu, or other options.

php opensource cms 2013 06

  • gets released version 1
  • based on fuelphp

still wordpress is unbeatable at content management use, it lacks serious user features in its default configuration

5 Responsive Sliders plugins for WordPress with Touch Swipe Gestures

5 Responsive Sliders plugins for WordPress with Touch Swipe Gestures

An Image is capable of conveying thousands of feeling one the first look. The Right image gallery would definitely be the multiplying factor for your business clients as well as customer satisfaction. Definitely it is the best medium to showcase your complete range of products and services to your potential clients. With the advent of the WordPress more and more web businesses are making their way to use this most effective platform for their business.

Also similarly with the increase in the mobile devices such as iPhone, iPad and Android it is quite difficult for the designers to make their content to be compatible with these devices. Below are mentioned some of the leading plugins for the WordPress having the touch swipe feature which will completely change the way you do your business.

All these plugins are the responsive sliders and will integrate with your business to perfection.    


The plugin basically gives you the best responsive taste without any trouble.  Many developers are using this open source plugin and certainly it has the thumb swipe feature for the mobile devices. Among the features of it are that it is responsive as well as it is IE7+ compatible. Along with that it supports all the Galley API’s such as previous, next, slide number and many more. It is best for callbacks and External API customization.

  Kenburner Slider WordPress Plugin


It is the dynamic combination of the text animation, Ken burner effects, versatile sliders and responsive features. You can really customize this slider as per your needs with a little CSS and HTML changes. It can be used with the thumb swipe gestures. It is easy to install and can be easily resized in terms of thumbs and images.


PhotoSwipeThis plugin for the WordPress is the most widely used plugin and no doubt it is mainly for the mobile devices. It is a HTML/ CSS/Java script based image gallery which is full responsive and touch compatible with the mobile devices. The plugin is basically open source and have many API’s which make it the famous option among many users. It is best optimized for the touch devices.


The plugin is certainly easy to use and is one of the best responsive types of plugin. Some of the features of it are content slider, animated captions, responsive layout, touch support and many other features. For the navigation purposes you can use the thumbnails, tabs or bullets. You can use it banner rotator, gallery, content slider, video gallery, HTML content, slide show and various other types of purposes.

  Galleria –Responsive Java Script Image Gallery

It is basically the Java Script framework that simplifies the process of the creation of the beautiful images and galleries for web applications. The plugin is best for the responsive panel and it is free without any type of restrictions. Also it is touch swipe friendly and a comprehensive documentation is available. There is the option for the multiple themes along with the one core theme.

The above plugins are best responsive for the WordPress. All of them have the touch swipe optimization and can be customized for every type of device by the user as per the requirements.

Author Bio

Claudia has written on a number of articles on the  Microsoft SQL Server Training highlighting its importance in the business and IT world. The author tries to make the reader accustomed to every dimension of this task follow me on Twitter, Facebook & Google+.

cyclone slider : add page num setting

The Cyclone slider plugin for wordpress is one of the best free plugins available for making sliders within pages and posts. Apart from dealing with slides within a drag and drop framework, it also features a list of parameters for each slider, but the possibility to use numbers in the slide pagers is currently missing. it is very easy to add, so I put the code below until a new release comes with that feature.

 Note : before using the code below make sure you upgrade cyclone slider to the latest version of jcycle2  

  • in inc / admin parts/ slider-properties, add the html code to display the input field 

    <! 20130505 add pagenum settings-->
    <div class="cycloneslider-field">
    	<label for="cycloneslider_settings_randomize"><?php _e('Pager / slide num ?', 'cycloneslider'); ?></label>
    	<select id="cycloneslider_settings_slide_num" name="cycloneslider_settings[slide_num]">
    		<option <?php echo (0==$slider_settings['slide_num']) ? 'selected="selected"' : ''; ?> value="0"><?php _e('No', 'cycloneslider'); ?></option>
    		<option <?php echo (1==$slider_settings['slide_num']) ? 'selected="selected"' : ''; ?> value="1"><?php _e('Yes', 'cycloneslider'); ?></option>
    	<span class="note"><?php _e('display slide num in pager.', 'cycloneslider'); ?></span>
    	<div class="clear"></div>
    <! 20130505 add pagenum settings-->
  • in class-cyclone-slider, add the save value code in save_settings function
      $settings['slide_num'] = (int) ($_POST['cycloneslider_settings']['slide_num']); //webmasterbulletin.net20130505
  • and in the same file add the get setting code in  the shortcode function : 
    $slider_settings['slide_num'] = $this->get_comp_slider_setting($admin_settings['slide_num'], $shortcode_settings['slide_num']); //webmasterbulletin.net20130505
  • finally in functions.php, add the jcycle setting if the cyclone slider setting is on in cyclone_settings function

    if ($slider_settings["slide_num"])$defaults['data-cycle-pager-template']="<strong><a href=#> {{slideNum}} </a></strong>"; //webmasterbulletin.net20130505

woocommerce hack : free shipping incentive sales

When configuring woocommerce for wordpress shopping rates, you can opt for a combination of flat rate and free shipping with  minimum amount. by default woocommerce shopping cart will not behave perfectly. First hack will let the shopping cart shipping method selection update automatically when minimum order for free shipping is reached. Second hack will display an incentive message wehn minimum amount for free shipping is not reached. Everything is coded via filters and actions, and will work with woocommerce 2.0 and above

first hack : update shipping display choice when free shipping  minimum amount is reached

/**   from
 *  Hide Standard Shipping option when free shipping is available
add_filter( 'woocommerce_available_shipping_methods', 'hide_standard_shipping_when_free_is_available' , 10, 1 );
function hide_standard_shipping_when_free_is_available( $available_methods ) {

    if( isset( $available_methods['free_shipping'] ) AND isset( $available_methods['flat_rate'] ) ) {

        // remove standard shipping option
        unset( $available_methods['flat_rate'] );

    return $available_methods;

second hack : display incentive message when minimum amount is not reached, including display of minimum amount and remaining amount to add to shopping cart. Very efficient ! 

 add_action( 'woocommerce_cart_totals_after_shipping', 'webmasterbulletin_sales_incentive'  );
       function  webmasterbulletin_sales_incentive()
            global $woocommerce;
            $all_methods = $woocommerce->shipping->load_shipping_methods();
          $available_methods = $woocommerce->shipping->get_available_shipping_methods(); 
           if (isset( $all_methods['free_shipping'] )) 
           if (isset( $available_methods['flat_rate'] ))
              echo "<tr><td colspan='2'><div class='sales_incentive'><b> 
              buy more products  :</b><br>
               only " .  woocommerce_price($all_methods['free_shipping']->settings['min_amount']-  $woocommerce->cart->cart_contents_total   ) . "  more and get <br>
              <b>free shipping starting at  
              " .    woocommerce_price($all_methods['free_shipping']->settings['min_amount']   )    . " </b>


Magento deposit extension

Just a quick review of the MAGENTO Deposit extension, that I just purchased on the indiesweb company website. this extension is useful if you want your customers to pay deposit, percentage of the final product price for example, to make a reservation on a non  available product in our case.

Apart from the fact that the extension is very easy to install, does the job perfectly, I must mention that the team behind it are very efficient and dedicated Magento Expert who WILL without a doubt help you getting it online if some issues arise with compatibility with other modules on your install   : big congratulations to INDIESWEB for looking after their customers even in complicated scenarios, like the one I have, where INDIESWEB had to reproduce my MAGENTO install on their own local servers to identify the extension conflict that was blocking the correct display of the deposist on some invoices within the magento admin and customer account display on the front end. 


review : hosted photography portfolio services

photographyblogsites is a  wordpress hosted platform that gives you access to a lot of post creation options, the main purpose being the developement of your own photoblog. it can connect to photography vendor services like SmugMug, Pictage,Album Exposure, ShootQ.

you will find on  this article that  a lot of photographers use typepad premium services to get rid of the ads, or blogger or self hosted wordpress, the latter requiring more technical knowledge because of the time and expertise to set up a self hosted web site.

What would make a difference is a photography  hosted service that provides both web and tablet publishing with very specific tablet layout. webservice viewbook provides such features within a light and beautiful graphic framework.

Our choice is to provide a solution for wordpress users, in the form of a gallery plugin that integrates lightbox for desktop and touch swipe for tablets and touch devices. We will release this wordpress tablet gallery plugin very soon.

wordpress : protect file download to registered users only

In this article we will explore a set of code hooks into the worpdress customization framework. The aim of this technique si to hide pdf documents from search engines and non connected users,  and to present them with a custom  login page if not connected, that would redirect directly to the file download after identification (login) via this custom login page.

  • STEP1:  block pages for non registered users
    • to block a page from non registered users, page editor must set a custom field "block" set to 1.
  • present non registered users with form on protected pages
    • we filter the content (the_content)   and return a login form if user is not connected for pages. the login form is included in a specific file po_login_form
  • create specific pdf download link for first page attached PDF, with docid as get variable
    • on your page template, use a query to find your pdf (page attachment) object, once you have that pdf object you can use it to make your url depending on the login status: 
if (is_user_logged_in()) $urlPDF=$pdf->guid; else $urlPDF="/utilisateurs/identification/?docid=" . $pdf->ID;
  • redirect to file if get variable is set
    • add the po_redirect_after_login function the init filter. This function will test the docid   get variable, find  the corresponding pdf attachment and redirect to this attachment url if found and user is logged in, otherwise does nothing and lets the_content filter do its job presenting the login form.

wordpress 3.5 major image management improvement

Media tags and File Gallery : two main plugins for image management that are not so necessary now, as wordpress 3.5 comes with a new image management tools, that's really impressive,  whose killer feature is the possibility to choose, drag and drop images for native gallery creation, not just images from the post, but possibility of selecting any set of image for a specific gallery among many if necessary within post / page. What I need to test now is the media tag plugin for backward compatibility and the file gallery plugin that was allowing me to build galleries from a drag and drop selection of images is now uneeded. Media tags has not been updated for a year or two so I'm really concerned about this one for website upgrading to 3.5, as it relies extensively on the media interface. question opened as of now on wordpress forum.

free drag and drop slider plugins for wordpress

there are more and more drag and drop content management plugins for wordpress. I will without a doubt review some that deal with general content management, but for now I focus on sliders.

Simple ad management for wordpress

Combine wordpress custom post type and widget management to get a simple ad management system that can easily be enhanced to suit specific needs. Code below provides implementation for

  • "ad" custom post type, with thumbnail for image, and custom field in meta box for url destination 
  • widget for displaying random ad each time web site is refreshed, you can adpat image sizz by changing the image size in your code, once it has been defined in wordpress image sizes (add_image_size function)


  // webmasterbulletin : ad custom post type with widget
  // include in your theme functions.php
// Registers the new post type and taxonomy
function webmasterbulletin_ads_type() {
    register_post_type( 'ads',
            'labels' => array(
                'name' => __( 'Pub' ),
                'singular_name' => __( 'Pub' ),
                'add_new' => __( 'Ajouter pub' ),
                'add_new_item' => __( 'Ajouter pub' ),
                'edit_item' => __( 'Modifier pub' ),
                'new_item' => __( 'Ajouter pub' ),
                'view_item' => __( 'Consulter Pub' ),
                'search_items' => __( 'Recherche annonceurs' ),
                'not_found' => __( 'aucun annonceur sur ces criteres' ),
                'not_found_in_trash' => __( 'aucun annonceur dans la poubelle' )
            'public' => true,
            'supports' => array( 'title', 'editor', 'thumbnail'  ),
            'capability_type' => 'post',
            'rewrite' => array("slug" => "ads"), // Permalinks format
            'menu_position' => 5,
            'register_meta_box_cb' => 'add_wb_ad_metaboxes'
add_action( 'init', 'webmasterbulletin_ads_type' );
add_action( 'add_meta_boxes', 'add_wb_ad_metaboxes' );

// Add the Events Meta Boxes
function add_wb_ad_metaboxes() {
    add_meta_box('wpt_add_url', 'Destination', 'wb_ad_mb', 'ads', 'normal', 'high');
 // The Event Location Metabox
function wb_ad_mb() {
    global $post;
    // Noncename needed to verify where the data originated
    echo '<input type="hidden" name="adurl_noncename" id="adurl_noncename" value="' .
    wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
    // Get the location data if its already been entered
    $addurl = get_post_meta($post->ID, 'addurl', true);
    // Echo out the field
    echo '<input type="text" name="addurl" value="' . $addurl  . '" class="widefat" />';

// Save the Metabox Data
function wb_save_ad_meta($post_id, $post) {
    // verify this came from the our screen and with proper authorization,
    // because save_post can be triggered at other times
    if ( !wp_verify_nonce( $_POST['adurl_noncename'], plugin_basename(__FILE__) )) {
    return $post->ID;
    // Is the user allowed to edit the post or page?
    if ( !current_user_can( 'edit_post', $post->ID ))
        return $post->ID;
    // OK, we're authenticated: we need to find and save the data
    // We'll put it into an array to make it easier to loop though.
    $events_meta['addurl'] = $_POST['addurl'];
    // Add values of $events_meta as custom fields
    foreach ($events_meta as $key => $value) { // Cycle through the $events_meta array!
        if( $post->post_type == 'revision' ) return; // Don't store custom data twice
        $value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely)
        if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
            update_post_meta($post->ID, $key, $value);
        } else { // If the custom field doesn't have a value
            add_post_meta($post->ID, $key, $value);
        if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
add_action('save_post', 'wb_save_ad_meta', 1, 2); // save the custom fields


widget for ad management

code adapted from Simple Random Posts Widget plugin

define("DefNoOfPosts", "1"); // default number of random posts to display

class SimpleRandomPostsWidget extends WP_Widget {

    function SimpleRandomPostsWidget()
        parent::WP_Widget( false, 'Simple ADS Random Posts',  array('description' => 'Random posts widget') );

    function widget($args, $instance)
        global $NewSimpleRandomPosts;
        $title =   $instance['title'];
        echo $args['before_widget'];
        echo $args['before_title'] . $title . $args['after_title'];
        echo $NewSimpleRandomPosts->GetSimpleRandomPosts(  empty( $instance['ShowPosts'] ) ? DefNoOfPosts : $instance['ShowPosts'] );
        echo $args['after_widget'];

    function update($new_instance)
        return $new_instance;

    function form($instance)

            <label for="<?php echo $this->get_field_id('title'); ?>"><?php echo 'Title:'; ?></label>
            <input type="text" name="<?php echo $this->get_field_name('title'); ?>" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" value="<?php echo esc_attr($instance['title']); ?>" />
            <label for="<?php echo $this->get_field_id('ShowPosts'); ?>"><?php echo 'Number of entries:'; ?></label>
            <input type="text" name="<?php echo $this->get_field_name('ShowPosts'); ?>" id="<?php echo $this->get_field_id('ShowPosts'); ?>" value="<?php if ( empty( $instance['ShowPosts'] ) ) { echo esc_attr(DefNoOfPosts); } else { echo esc_attr($instance['ShowPosts']); } ?>" size="3" />



class SimpleRandomPosts {

    function GetSimpleRandomPosts($noofposts)
         remove_filter ( 'posts_join', 'recent_join'  );
         remove_filter ( 'posts_fields', 'recent_fields'  );
            $the_query = new WP_Query('orderby=rand&post_type=ads&showposts='.$noofposts);
           // echo $the_query->request;
            if ($the_query->have_posts()) :
                while ($the_query->have_posts()) : $the_query->the_post();
                $url=get_post_meta(get_the_ID(),"adurl", true);
                    echo  '<div align="center"><a href="'.$url.'" target="_blank">';
                    echo get_the_post_thumbnail( get_the_ID(), "largeur200", array('title'=>get_the_title(), "alt"=>get_the_title() )); echo"<br>";
                    echo get_the_title().'</a></div> ';
                echo '</ul>';




$NewSimpleRandomPosts = new SimpleRandomPosts();

function SimpleRandomPosts_widgets_init()

add_action('widgets_init', 'SimpleRandomPosts_widgets_init');

WordPress theming access for designers

Ever encoutered the following issue:  you want to give theming access to your worpdress designer, but cannot communicate the FTP account ? you have two solutions : first is to build specific FTP access for the theme directory you're working on. Second solution comes from DIY DESIGN, a theming company who have implemented a backup, upload, download for their custom themes, that for this particular usage they call skins, via the thesis skin manager introduced in their newest version of the thesis framework theme..

Magazine layout for wordpress : latest article for each category

a quick and efficient way of ensuring you have a permanent display of various articles on the front page of your wordpress blog is to alter the main query to get only one article per category. this can be done using specific join filters, as described on this wordpress support blog discussion. a very simple solution consists of including the alter-query.php file before the main query is executed. Here is the content of this file :

if (is_home())



function recent_join ( $join, $query ) {

global $wpdb;

$taxonomy = 'category';

$join .=<<<SQL

JOIN( SELECT MAX( {$wpdb->posts}.post_date ) AS post_date, trm.term_id AS term_ID FROM {$wpdb->posts}

LEFT JOIN {$wpdb->term_relationships} AS rel ON {$wpdb->posts}.ID=rel.object_ID

LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )

LEFT JOIN {$wpdb->terms} AS trm USING( term_id )

WHERE tax.taxonomy='{$taxonomy}' GROUP BY trm.term_id ) AS pmx USING( post_date )


return $join;


add_filter ( 'posts_join', 'recent_join', 10, 2 );


function recent_fields ( $fields, $query ) {

global $wpdb;

return $fields . ', term_ID';


add_filter ( 'posts_fields', 'recent_fields', 10, 2 );


$args = array (

'post_type' => 'post',

'taxonomy' => 'category',

'paged' => get_query_var ( 'paged' ) ? get_query_var ( 'paged' ) : 1