home *** CD-ROM | disk | FTP | other *** search
Wrap
<?php /* Plugin Name: Articles Plugin URI: http://alexking.org/projects/wordpress Description: Display posts in an 'Articles' list. To include a post in the list, add a custom field to the post: 'article' = '1'. Set your <a href="options-general.php?page=articles.php">Articles Options here</a>. Questions on configuration, etc.? Make sure to read the README. Version: 1.2 Author: Alex King Author URI: http://alexking.org */ load_plugin_textdomain('alexking.org'); function aka_install() { add_option('aka_columns', '1'); add_option('aka_token', '1'); } if (isset($_GET['activate']) && $_GET['activate'] == 'true') { if (get_option('aka_columns') == '') { aka_install(); } } function aka_request_handler() { if (isset($_POST['ak_action'])) { switch ($_POST['ak_action']) { case 'aka_update_settings': aka_update_settings(); break; } } } add_action('init', 'aka_request_handler'); function aka_head() { if (get_option('aka_columns') == 2) { print(' <style type="text/css"> div.aka_half { float: left; overflow: auto; width: 45%; } div.aka_clear { clear: both; float: none; } </style> '); } } add_action('wp_head', 'aka_head'); function aka_update_settings() { if (isset($_POST['aka_columns'])) { update_option('aka_columns', intval($_POST['aka_columns'])); } if (isset($_POST['aka_token'])) { update_option('aka_token', intval($_POST['aka_token'])); } header('Location: '.get_bloginfo('wpurl').'/wp-admin/options-general.php?page=articles.php&updated=true'); die(); } function aka_get_articles() { global $wpdb, $post; $original_post = $post; $columns = get_option('aka_columns'); $now = gmdate("Y-m-d H:i:s",time()); $posts_data = $wpdb->get_results(" SELECT $wpdb->posts.* FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_date_gmt < '$now' AND $wpdb->postmeta.meta_key = 'article' AND $wpdb->postmeta.meta_value = '1' GROUP BY $wpdb->posts.ID ORDER BY $wpdb->posts.post_date_gmt DESC "); if (!$posts_data || count($posts_data) == 0) { return ''; } $posts = array(); $post_ids = array(); foreach ($posts_data as $post) { $posts['post_'.$post->ID] = $post; $post_ids[] = $post->ID; } $cats = $wpdb->get_results(" SELECT $wpdb->term_relationships.object_id, $wpdb->terms.term_id, $wpdb->terms.name, $wpdb->terms.slug FROM $wpdb->term_relationships LEFT JOIN $wpdb->terms ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->terms.term_id LEFT JOIN $wpdb->term_taxonomy ON $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id WHERE $wpdb->term_relationships.object_id IN (".implode(',', $post_ids).") AND $wpdb->term_taxonomy.taxonomy = 'category' ORDER BY $wpdb->terms.slug, $wpdb->term_relationships.object_id DESC "); $output = ''; $current = ''; $open = false; $i = 0; if ($columns == '2') { $half = 0; $next = false; $output .= ' <div class="aka_half"> '; } foreach ($cats as $cat) { $slug = $cat->slug; if ($current != $slug) { if ($next) { $output .= ' </ul> </div> <div class="aka_half"> '; $half++; $open = false; $next = false; } if ($i > 0 && $open) { $output .= ' </ul> '; } $output .= ' <h3 id="cat_'.$slug.'">'.$cat->name.'</h3> <ul> '; $open = true; } $current = $slug; $post = $posts['post_'.$cat->object_id]; $output .= '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>'."\n"; $i++; if ($columns == '2' && $half == 0 && $i > count($cats) / 2) { $next = true; } } if ($open) { $output .= ' </ul> '; } if ($columns == '2') { $output .= ' </div> <div class="aka_clear"></div> '; } $post = $original_post; return $output; } function aka_show_articles() { print(aka_get_articles()); } function aka_the_content($content) { if (strstr($content, '###articles###')) { $content = str_replace('###articles###', aka_get_articles(), $content); } return $content; } if (get_option('aka_token') == '1') { add_action('the_content', 'aka_the_content'); } function aka_the_excerpt($content) { return str_replace('###articles###', '', $content);; } if (get_option('aka_token') == '1') { add_action('the_excerpt', 'aka_the_excerpt'); } function aka_options_form() { if (get_option('aka_columns') == '2') { $column_options = '<option value="1">1</option><option selected="selected" value="2">2</option>'; } else { $column_options = '<option value="1" selected="selected">1</option><option value="2">2</option>'; } if (get_option('aka_token') == '0') { $token_options = '<option value="1">'.__('Yes', 'alexking.org').'</option><option value="0" selected="selected">'.__('No', 'alexking.org').'</option>'; } else { $token_options = '<option value="1" selected="selected">'.__('Yes', 'alexking.org').'</option><option value="0">'.__('No', 'alexking.org').'</option>'; } print(' <div class="wrap"> <h2>'.__('Articles Options', 'alexking.org').'</h2> <form name="ak_articles" action="'.get_bloginfo('wpurl').'/wp-admin/options-general.php" method="post"> <fieldset class="options"> <p> <label for="aka_columns">'.__('List articles in how many columns:', 'alexking.org').'</label> <select name="aka_columns" id="aka_columns">'.$column_options.'</select> </p> <p> <label for="aka_token">'.__('Enable <a href="#token">token method</a> for showing the articles list:', 'alexking.org').'</label> <select name="aka_token" id="aka_token">'.$token_options.'</select> </p> <input type="hidden" name="ak_action" value="aka_update_settings" /> </fieldset> <p class="submit"> <input type="submit" name="submit_buttom" value="'.__('Update Articles Settings', 'alexking.org').'" /> </p> </form> <h2>'.__('Adding Articles to Your List', 'alexking.org').'</h2> <p>'.__('To add post to your Articles list, simply add a custom field to the post:', 'alexking.org').'</p> <ul> <li>'.__('Key: <strong>article</strong>', 'alexking.org').'</li> <li>'.__('Value: <strong>1</strong>', 'alexking.org').'</li> </ul> <h2>'.__('Showing the Articles List', 'alexking.org').'</h2> <h3 id="token">'.__('Token Method', 'alexking.org').'</h3> <p>'.__('If you have enabled the token method above, you can simply add <strong>###articles###</strong> to any post or page and your articles list will be inserted at that place in the post/page.', 'alexking.org').'</p> <h3 id="template">'.__('Template Tag Method', 'alexking.org').'</h3> <p>'.__('You can always add a template tag to your theme (in a page template perhaps) to show your articles list.', 'alexking.org').'</p> <p><strong><code><php aka_show_articles(); ?></code></strong></p> </div> '); } function aka_options() { if (function_exists('add_options_page')) { add_options_page( __('Articles Options', 'alexking.org') , __('Articles', 'alexking.org') , 10 , basename(__FILE__) , 'aka_options_form' ); } } add_action('admin_menu', 'aka_options'); ?>