A place where random pieces of code get to reside, example plugin code, useful code i've seen in threads, or anything else i come across that i feel is worth putting here.
Example plugin code or standalone functions.
Updated on: April 21th 2010
Tested on: Wordpress - 2.9.2
Changed: -
Known bugs: -
<?php
/*
Plugin Name: Category Posts Per Page
Plugin URI:
Description: Switch the amount of posts shown on the native category archive pages
Author: t31os
Version: 1.0
Author URI:
*/
if( !class_exists( 'cppp' ) ) {
class cppp {
const plugin_option_name = 'cppp';
const plugin_menu_name = 'Posts per cat';
private $plugin_page;
// Constructor
public function __construct() {
if( is_admin() ) {
add_action( 'admin_init' , array( &$this , 'plugin_register' ) );
add_action( 'admin_menu' , array( &$this , 'plugin_components' ) );
}
if( !is_admin )
add_filter( 'pre_get_posts' , array( &$this , 'category_posts_limits' ) , 1 , 1 );
}
// Register plugin components
public function plugin_components() {
if( !is_admin() )
return;
$this->plugin_page =
add_dashboard_page( 'Category - Posts Per Page' , __( self::plugin_menu_name , '_cppp_l1on' ) , 'manage_options' , 'posts_per_catpage' , array( &$this , 'plugin_page' ) );
add_action( "admin_head-$this->plugin_page" , array( &$this , 'plugin_css' ) );
add_contextual_help( $this->plugin_page , self::plugin_legend() );
}
public function plugin_register() {
if( !is_admin() )
return;
$domain_path = dirname( plugin_basename( __FILE__ ) );
load_plugin_textdomain( '_cppp_l1on', PLUGINDIR . '/' . $domain_path , $domain_path );
register_setting( 'cppp_posts' , self::plugin_option_name , array( &$this , 'intval_cppp') );
add_settings_section( 'main' , '' , array( &$this , 'plugin_intro' ) , 'cppp_cats' );
add_settings_field( 'fields' , '' , array( &$this , 'plugin_rows' ) , 'cppp_cats' , 'main' );
}
public function category_posts_limits( $query ) {
if( $query->is_category ) {
$pos_catname = esc_attr( $query->query_vars['category_name'] );
if( !$pos_catname )
return $query;
$options = self::current_options();
if( !isset( $options[$pos_catname] ) )
return $query;
$query->set( 'posts_per_page', $options[$pos_catname] );
}
return $query;
}
public function plugin_css() {
if( !is_admin() )
return;
$css = '
.form-table th {display:none}
.widefat th { display:table-cell!important; }
td.row-title { white-space:nowrap!important; }
td.postspercat-title { border-right:1px solid #ddd; }
td.postspercat { background:#fafafa!important;width:100%;border-left:1px solid #fff; }
';
$css = str_replace( array("\t","\n") , '' , $css );
echo '<!-- Plugin CSS -->'."\n".'<style type="text/css">';
echo $css;
echo '</style>'."\n".'<!-- END CSS -->'."\n";
}
public function plugin_page() {
if( !is_admin() )
return;
?>
<div class="wrap">
<?php screen_icon('index'); ?>
<h2><?php _e( 'Posts per category page' , '_cppp_l1on' ); ?></h2>
<?php if( $_GET['updated'] === 'true' ) : ?>
<div id="message" class="updated"><p><strong><?php _e( 'Settings saved' , '_cppp_l1on' ); ?></strong></p></div>
<?php endif; ?>
<form method="post" action="options.php">
<?php do_settings_sections( 'cppp_cats' ); ?>
<?php settings_fields( 'cppp_posts' ); ?>
</form>
</div>
<?php
}
public function intval_cppp( $input ) {
if( !is_admin() )
return;
if( !$input || !is_array( $input ) )
return;
return array_map( 'intval' , $input );
}
public function plugin_rows() {
if( !is_admin() )
return;
$options = self::current_options();
$terms = get_terms( 'category' , array( 'hide_empty' => false , 'order' => 'asc' ) );
if( !is_wp_error( $terms ) ) {
?>
<table class="widefat">
<thead>
<tr>
<th><?php _e( 'Category' , '_cppp_l1on' ); ?></th>
<th><?php _e( 'Show' , '_cppp_l1on' ); ?></th>
</tr>
</thead>
<tbody>
<?php
foreach( $terms as $term ) :
$slug = esc_attr( $term->slug );
$option = self::plugin_option_name . '[' . $slug . ']';
$option_value = ( isset( $options[$slug] ) ) ? (int) $options[$slug] : '';
?>
<tr>
<td class="postspercat-title">
<span class="row-title"><?php esc_attr_e( $term->name ); ?></span>
<p class="description"><?php _e( $slug ); ?></p>
</td>
<td class="postspercat">
<input class="small-text" name="<?php _e( $option ); ?>" id="<?php _e( $option ); ?>" type="text" value="<?php echo $option_value; ?>" />
<span class="description"><?php _e(' posts per page' , '_cppp_l1on'); ?></span>
</td>
</tr>
<?php
endforeach;
?>
</tbody>
<tfoot>
<tr>
<th><?php _e( 'Category' , '_cppp_l1on' ); ?></th>
<th><?php _e( 'Show' , '_cppp_l1on' ); ?></th>
</tr>
</tfoot>
</table>
<p class="submit">
<input type="submit" name="Submit" class="button-secondary action" value="<?php esc_attr_e('Save Changes'); ?>" />
</p>
<?php
}
return;
}
public function plugin_intro() {
if( !is_admin() )
return;
echo '
<p class="description">' . __( 'Change the amount of posts shown on the individual category archives.' , '_cppp_l1on' ) . '</p>
';
}
public function plugin_legend() {
if( !is_admin() )
return;
$legend = '
<h3>' . __('What\'s on screen' , '_cppp_l1on') . '</h3>
<p><span class="row-title">' . __('Category' , '_cppp_l1on') . '</span><br /><span class="description">' . __('The category name and slug.' , '_cppp_l1on') . '</span></p>
<p><span class="row-title">' . __('Show' , '_cppp_l1on') . '</span><br /><span class="description">' . __('How many posts to show when viewing the category' , '_cppp_l1on') . '</span></p>
<p><span class="row-title">' . __('Possible Values' , '_cppp_l1on') . '</span><br /><span class="description">-1 , 0 , (any positive numeric value)</span></p>
';
return $legend;
}
private function current_options() {
$options = get_option( self::plugin_option_name );
return $options ;
}
}
$cppp = new cppp();
}
?>
Updated on: February 17th 2010.
Tested on: Wordpress - 2.9.x & 3.0a
Changed: Re-write of code, uses filter to change widget callback.
Known bugs: When saving a post in the widget the category dropdown
disappears, leaving you with the original widget (thanks to johnywhy for reporting the problem).
--> Status: Cannot fix
- See http://wordpress.org/support/topic/317373?replies=12#post-1336928
<?php
/*
Plugin Name: QuickPress Category
Plugin URI: http://example.com
Description: Adds category selection to the QuickPress widget shown in the WordPress dashboard
Author: example
Version: 0.1
Author URI: http://example.com
*/
class quickpress_category {
public function quickpress_category() {
add_action( 'wp_dashboard_setup' , array( $this , 'dashboard_updater' ) );
add_action( 'admin_init', array( $this , 'register_option' ) );
}
public function register_option() {
// Register the setting - with basic validation, only need be 0/1 or true/false , keep it simple
register_setting( 'enable-dropdown', 'quickpress_category' , array( $this , 'option_validation') );
// Register the setting field
add_settings_field( 'quickpress_category', 'Quickpress category', array( $this , 'add_category_option' ), 'writing', 'default' );
}
public function option_validation( $input ) {
if( !$input )
return 0;
if( $input == 1 )
return 1;
else
return 0;
}
// Output the checkbox for toggling the category dropdown
public function add_category_option() {
$checked =
( get_option('quickpress_category') && get_option('quickpress_category') == 1 ) ? 'checked="checked" ' : '';
?>
<div class="input-text-wrap">
<label class="selectit">
<input type="checkbox" name="quickpress_category" <?php echo $checked; ?>value="1" />
Enable quickpress category selection.
</label>
</div>
<?php
settings_fields('enable-dropdown');
return;
}
public function dashboard_updater() {
// Global the variable so it's available inside the function (that's how you access variables outside a functions scope)
global $wp_meta_boxes;
// Determine where the widget is and update the callback name if the option is enabled
switch( true ) {
case ( !get_option( 'quickpress_category' ) || get_option( 'quickpress_category' ) == false ) :
return;
case ( isset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press'] ) ) :
$wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']['callback'] = array( &$this , 'quickpress_widget' );
return;
case ( isset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_quick_press'] ) ):
$wp_meta_boxes['dashboard']['normal']['core']['dashboard_quick_press']['callback'] = array( &$this , 'quickpress_widget' );
return;
}
return;
}
// Most of this is just code from the original widget
public function quickpress_widget() {
// Call $current_user, so there's no reliance on $GLOBAL, per original widget
global $current_user;
$drafts = false;
if(
'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['action'] ) &&
0 === strpos( $_POST['action'], 'post-quickpress' ) && (int) $_POST['post_ID'] ) {
$view = get_permalink( $_POST['post_ID'] );
$edit = esc_url( get_edit_post_link( $_POST['post_ID'] ) );
if ( 'post-quickpress-publish' == $_POST['action'] ) {
if ( current_user_can('publish_posts') )
printf( '<div class="message"><p>' . __( 'Post Published. <a href="%s">View post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( $view ), $edit );
else
printf( '<div class="message"><p>' . __( 'Post submitted. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
}
else {
printf( '<div class="message"><p>' . __( 'Draft Saved. <a href="%s">Preview post</a> | <a href="%s">Edit post</a>' ) . '</p></div>', esc_url( add_query_arg( 'preview', 1, $view ) ), $edit );
$drafts_query = new WP_Query( array(
'post_type' => 'post',
'post_status' => 'draft',
'author' => $current_user->data->ID,
'posts_per_page' => 1,
'orderby' => 'modified',
'order' => 'DESC'
) );
if ( $drafts_query->posts )
$drafts =& $drafts_query->posts;
}
printf('<p class="textright">' . __('You can also try %s, easy blogging from anywhere on the Web.') . '</p>', '<a href="tools.php">' . __('Press This') . '</a>' );
$_REQUEST = array(); // hack for get_default_post_to_edit()
}
$post = get_default_post_to_edit();
// Args for dropdown
$args = array(
'order' => 'ASC',
'hierarchical' => 1,
'echo' => 0,
'name' => 'post_category[]',
'hide_empty' => 0
);
// Create dropdown
$categories = wp_dropdown_categories( array_merge( $args , array( 'selected' => get_option('default_category') ) ) );
// Replace the ID
$categories = str_replace( "id='post_category[]'" , "id='post_category'" , $categories );
?>
<form name="post" action="<?php echo esc_url( admin_url( 'post.php' ) ); ?>" method="post" id="quick-press">
<h4 id="quick-post-title"><label for="title">Title</label></h4>
<div class="input-text-wrap">
<input type="text" name="post_title" id="title" tabindex="1" autocomplete="off" value="<?php echo esc_attr( $post->post_title ); ?>" />
</div>
<h4 id="quick-post-category"><label for="title">Category</label></h4>
<div><?php echo $categories;?></div>
<div class="clear"><br /></div>
<?php
if ( current_user_can( 'upload_files' ) ) { ?>
<div id="media-buttons" class="hide-if-no-js"><?php do_action( 'media_buttons' );?></div>
<?php
}
?>
<h4 id="content-label"><label for="content">Content</label></h4>
<div class="textarea-wrap">
<textarea name="content" id="content" class="mceEditor" rows="3" cols="15" tabindex="2"><?php echo $post->post_content; ?></textarea>
</div>
<script type="text/javascript">edCanvas = document.getElementById('content');edInsertContent = null;</script>
<h4><label for="tags-input">Tags</label></h4>
<div class="input-text-wrap">
<input type="text" name="tags_input" id="tags-input" tabindex="3" value="<?php echo get_tags_to_edit( $post->ID ); ?>" />
</div>
<p class="submit">
<input type="hidden" name="action" id="quickpost-action" value="post-quickpress-save" />
<input type="hidden" name="quickpress_post_ID" value="<?php echo (int) $post->ID; ?>" />
<?php wp_nonce_field('add-post'); ?>
<input type="submit" name="save" id="save-post" class="button" tabindex="4" value="<?php esc_attr_e('Save Draft'); ?>" />
<input type="reset" value="<?php esc_attr_e( 'Reset' ); ?>" class="button" />
<?php
if ( current_user_can('publish_posts') ) {
echo '<input type="submit" name="publish" id="publish" accesskey="p" tabindex="5" class="button-primary" value="' . esc_attr('Publish') . '" />';
}
else {
echo '<input type="submit" name="publish" id="publish" accesskey="p" tabindex="5" class="button-primary" value="' . esc_attr('Submit for Review') .'" />';
}
?>
<br class="clear" />
</p>
</form>
<?php
if ( $drafts )
wp_dashboard_recent_drafts( $drafts );
return;
}
}
$quickpress_category = new quickpress_category();
// Removes the option from the options table on deactivation
register_deactivation_hook( __FILE__, 'remove_options' );
function remove_options() {
delete_option( 'quickpress_category' );
}
?>
Random pieces of code, neither function nor plugin, see the description.
Adding additional smilies to WordPress.
global $wpsmiliestrans; $wpsmiliestrans = array( ':mrgreen:' => 'icon_mrgreen.gif', ':neutral:' => 'icon_neutral.gif', ':twisted:' => 'icon_twisted.gif', ':arrow:' => 'icon_arrow.gif', ':shock:' => 'icon_eek.gif', ':smile:' => 'icon_smile.gif', );
This a custom query to select all the tags associated with the current category (all posts for that category).
<?php
$varcat = get_query_var('cat');
$category_tags = $wpdb->get_results("
SELECT DISTINCT
terms2.term_id as tag_ID,
terms2.name as tag_name,
t2.count as posts_with_tag
FROM
$wpdb->posts as p1
LEFT JOIN $wpdb->term_relationships as r1 ON p1.ID = r1.object_ID
LEFT JOIN $wpdb->term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms1 ON t1.term_id = terms1.term_id,
$wpdb->posts as p2
LEFT JOIN $wpdb->term_relationships as r2 ON p2.ID = r2.object_ID
LEFT JOIN $wpdb->term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms2 ON t2.term_id = terms2.term_id
WHERE (
t1.taxonomy = 'category' AND
p1.post_status = 'publish' AND
terms1.term_id = '$varcat' AND
t2.taxonomy = 'post_tag' AND
p2.post_status = 'publish' AND
p1.ID = p2.ID
)
");
if($category_tags) {
echo '
<div class="static">
<h2>Category Tags</h2>
<div>
';
foreach($category_tags as $cat) {
echo '<a class="button rbutton" href="'.get_tag_link($cat->tag_ID).'">'.$cat->tag_name.'</a> ';
}
echo '
</div>
</div>
';
}
?>