Allow PHP in WordPress Widgets without any plugin


Sometimes in your WordPress theme you need to execute custom php code in a widget, because you want to display different information according to the category you are in, or simply because you need to execute a php script into that widget.

There are a lot of plugins doing this task, adding a new type of widget generally called “php widget”, but rather than installing a plugin this simple job can be done simply adding in functions.php file of your theme these few lines:

add_filter('widget_text','execute_php',100);
function execute_php($html){
     if(strpos($html,"<"."?php")!==false){
          ob_start();
          eval("?".">".$html);
          $html=ob_get_contents();
          ob_end_clean();
     }
     return $html;
}

Now, when you add a text widget to your site, you can use PHP.

Advertisements

Disable Post Revisions in WordPress to reduce Database Size


Post revisions is a great feature that WordPress has to offer but for some users it might not be the best option. For users who have limited database space, or for users creating WordPress as a CMS where they don’t need autosave, they can simply disable Post Revisions feature in WordPress by following this tutorial. By reducing the database size, you can also speed up your site.

Open wp-config.php located in your WordPress root directory and add the following code:

define('AUTOSAVE_INTERVAL', 300 ); // seconds
define('WP_POST_REVISIONS', false);
 This code will disable all future revisions to be saved and it will also increase your autosave interval from 60 seconds to 300 seconds, so it means your post will be autosaving every 5 minute instead of every minute.

The above code, will not delete your past revisions that are already saved in your database. To delete all previous revisions, you will need to visit PHPMyAdmin and run the following SQL query.

DELETE FROM wp_posts WHERE post_type = "revision";
 This should disable Post revisions and delete all previously saved post revisions stored in your Database.

Validate Number field in Contact Form 7


Allow numbers only in ‘number’ field in Contact Form 7 plugin, add the following code in your functions.php

/*
Validate Numbers in Contact Form 7
This is for 10 digit numbers
*/

function is_number( $result, $tag ) {
$type = $tag['type'];
$name = $tag['name'];

if ($name == 'request-phone') {
$stripped = preg_replace( '/\D/', '', $_POST[$name] );
$_POST[$name] = $stripped;
if( strlen( $_POST[$name] ) != 10 ) { // Number string must equal this
$result['valid'] = false;
$result['reason'][$name] = $_POST[$name] = 'Enter 10 digit phone number.';
}
}
return $result;
}

add_filter( 'wpcf7_validate_text', 'is_number', 10, 2 );
add_filter( 'wpcf7_validate_text*', 'is_number', 10, 2 );

How to call it in the admin section

[number request-phone]

Replace “request-phone” with your field name.

Add Capability of Custom Plugin to a Role


To add new Capability of a custom made plugin in WordPress to a specific Role.

function add_theme_caps() {
    // gets the author role
    $role = get_role('editor');

    // This only works, because it accesses the class instance.
    // would allow the author to edit others' posts for current theme only
    // just mention your plugin filename like I have edit_events.php as my plugin
    $role->add_cap('edit_events'); 
}
add_action( 'admin_init', 'add_theme_caps');

To add new Capability of a custom made plugin in WordPress to a specific user.

function add_theme_caps() {
    // get the user
    $user = new WP_User( $user_id );

    // This only works, because it accesses the class instance.
    // would allow the author to edit others' posts for current theme only
    // just mention your plugin filename like I have edit_events.php as my plugin
    $user->add_cap('edit_events'); 
}
add_action( 'admin_init', 'add_theme_caps');

Give Editor Access To WordPress Sidebar


If you want to give the Editor Role access to editing the sidebar and it’s contents.

The edit_theme_options capability should allow the user to edit the sidebar as described on this page : http://codex.wordpress.org/Appearance_Widgets_SubPanel

Code to add to functions.php

$role = get_role('editor'); 
$role->add_cap('edit_theme_options');

or, you can use Members plugin to create/manage other roles and modify the capabilities.

http://wordpress.org/plugins/members/

This should work to prevent editor accessing themes or menus

function custom_admin_menu(){

    $user =new WP_User(get_current_user_id());if(!empty( $user->roles)&& is_array($user->roles)){foreach($user->roles as $role)
            $role = $role;}if($role =="editor"){ 
       remove_submenu_page('themes.php','themes.php');
       remove_submenu_page('themes.php','nav-menus.php');}}

add_action('admin_menu','custom_admin_menu');

How to add excerpt on a Page in WordPress without plugin


To add an excerpt field in WordPress Pages like we have in Posts, just paste the following code to your functions.php and have fun !!

add_post_type_support( 'page', 'excerpt' );

List of Wordpress Multisites (MU) Blogs


<?php
// Query for getting blogs
$blogs = $wpdb->get_results( $wpdb->prepare("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY registered DESC", $wpdb->siteid), ARRAY_A );

// put it in array
foreach ( (array) $blogs as $details )
{
$blog_list[ $details['blog_id'] ] = $details;
}
unset( $blogs );
$blogs = $blog_list;

// if is valid array
if (is_array( $blogs ) )
{
echo '<ul>';
$array= array();
// reorder
$array= array_slice( $blogs, 0, count( $blogs ) );
for($i=0;$i<count($array);$i++)
{
// get data for each id
$blog = get_blog_details( $array[$i]['blog_id'] );
// print it
echo '<li><a href="'.$blog->siteurl.'">'.$blog->blogname.'</a></li>';
}
echo '</ul>';
}
?>