Mike Schindel provided me this code long time ago:
<?php
/**
* Create the Blocks custom post type and the Sections custom taxonomy
*/
add_action('init', 'my_init_method');
if (!class_exists('YourSite_Blocks')) {
class YourSite_Blocks {
static function on_load() {
add_action('init',array(__CLASS__,'init'));
add_filter('manage_blocks_posts_columns',
array(__CLASS__,'manage_blocks_posts_columns'));
add_filter('manage_posts_custom_column',
array(__CLASS__,'manage_posts_custom_column'),10,2);
add_action('restrict_manage_posts',
array(__CLASS__,'restrict_manage_posts'));
}
// Register custom post types and custom taxonomies
static function init() {
register_post_type('blocks',array(
'labels' => array(
'name' => __( 'Blocks' ),
'singular_name' => __( 'Block' ),
'add_new_item' => 'Add New Block',
'edit_item' => 'Edit Block',
'new_item' => 'New Block',
'search_items' => 'Search Block',
'not_found' => 'No Blocks found',
'not_found_in_trash' => 'No Blocks found in trash',
),
'public' => true,
'hierarchical' => false,
'taxonomies' => array( 'section'),
'supports' => array('title','editor','thumbnail','custom-fields'),
'rewrite' => array('slug'=>'blocks','with_front'=>false),
'menu_position' => 50,
));
register_taxonomy('location','blocks',array(
'hierarchical' => true,
'labels' => array(
'name' => __( 'Locations' ),
'singular_name' => __( 'Location' ),
'add_new_item' => 'Add New Location',
'edit_item' => 'Edit Location',
'new_item' => 'New Location',
'search_items' => 'Search Location',
'not_found' => 'No Location found',
'not_found_in_trash' => 'No Locations found in trash',
'all_items' => __( 'All Locations' ),
),
'query_var' => true,
'rewrite' => array( 'slug' => 'location' ),
));
register_taxonomy('section','blocks',array(
'hierarchical' => true,
'labels' => array(
'name' => __( 'Sections' ),
'singular_name' => __( 'Section' ),
'add_new_item' => 'Add New Section',
'edit_item' => 'Edit Section',
'new_item' => 'New Section',
'search_items' => 'Search Section',
'not_found' => 'No Sections found',
'not_found_in_trash' => 'No Sectionss found in trash',
'all_items' => __( 'All Sections' ),
),
'query_var' => true,
'rewrite' => array( 'slug' => 'section' ),
));
// Add initial terms
if (!get_option('yoursite-blocks-initialized')) {
$terms = array(
'Intro',
'Tagline',
'Mainbar',
'Sidebar',
'Featured',
'Content',
);
foreach($terms as $term) {
if (!get_term_by('name',$term,'section')) {
wp_insert_term($term, 'section');
}
}
update_option('yoursite-blocks-initialized',true);
}
}
// Arrange the position of elements in the table
function manage_blocks_posts_columns($columns) {
$columns = array(
'cb' => '<input type="checkbox" />',
'title' => 'Name',
'location_column' => 'Location',
'section_column' => 'Section',
'author' => 'Author',
'date' => 'Date',
);
return $columns;
}
// Verify that we are indeed working with only the custom post type and use a switch statement to test against the column
function manage_posts_custom_column( $column,$post_id ) {
global $typenow;
if ($typenow=='blocks') {
$location_taxonomy = 'location';
$section_taxonomy = 'section';
switch ($column) {
case 'location_column':
$location_column = get_the_terms($post_id,$location_taxonomy);
if (is_array($location_column)) {
foreach($location_column as $key => $location) {
$edit_link = get_term_link($location,$location_taxonomy);
$location_column[$key] = '<a href="'.$edit_link.'">' . $location->name . '</a>';
}
echo implode(' | ',$location_column);
}
break;
case 'section_column':
$section_column = get_the_terms($post_id,$section_taxonomy);
if (is_array($section_column)) {
foreach($section_column as $key => $section) {
$edit_link = get_term_link($section,$section_taxonomy);
$section_column[$key] = '<a href="'.$edit_link.'">' . $section->name . '</a>';
}
echo implode(' | ',$section_column);
}
break;
}
}
}
// Output multiple taxonomy filters
function restrict_manage_posts() {
// Only display these taxonomy filters on desired custom post_type listings
global $typenow;
if ($typenow == 'blocks') {
// Create an array of taxonomy slugs you want to filter by - if you want to retrieve all taxonomies, could use get_taxonomies() to build the list
$filters = array('location', 'section');
foreach ($filters as $tax_slug) {
// Retrieve the taxonomy object
$tax_obj = get_taxonomy($tax_slug);
$tax_name = $tax_obj->labels->name;
// Retrieve array of term objects per taxonomy
$terms = get_terms($tax_slug);
// Output html for taxonomy dropdown filter
echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
echo "<option value=''>Show All $tax_name</option>";
foreach ($terms as $term) {
// Output each select option line, check against the last $_GET to show the current option selected
echo '<option value='. $term->slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>';
}
echo "</select>";
}
}
}
}
YourSite_Blocks::on_load();
}
It worked perfectly until now.
I'm using a theme that seems to have a problem with the first line:
add_action('init', 'my_init_method');
Is there any way of modifying this code so that it can still work without that conflicting line of code?