WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Mike Schindel provided me this code long time ago:

 * 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() {
        // Register custom post types and custom taxonomies
        static function init() {
                '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,
                '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' ),
                '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(
                foreach($terms as $term) {
                    if (!get_term_by('name',$term,'section')) {
                        wp_insert_term($term, 'section');
        // 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);
                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);
        // 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>";

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?

share|improve this question
up vote 1 down vote accepted

What is the error message being generated?

Also, to avoid conflicts, all custom Theme functions, classes, options, constants, etc. should be prefixed uniquely, e.g. using theme-slug.

It is highly likely that a generic function name like my_init_method is used by another Plugin or Theme. Try renaming it to mytheme-slug_init_method.


To implement, rename your function call from:

function my_init_method() {}


function mytheme-slug_init_method() {}

Then, change your hook call from:

add_action( 'init', 'my_init_method' );


add_action( 'init', 'mytheme_init_method' );
share|improve this answer
Thanks for helping but I can't find function my_init_method() {} where it is? (and which slug should I add?) – janoChen May 11 '11 at 19:08
Bennet By the way, this is the error message: Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'my_init_method' was given in /home/aleche23/alexchen.info/wp-includes/plugin.php on line 395 – janoChen May 11 '11 at 19:14

Based on your comments to Chip, I think this is probably what you want:

add_action( 'init', array( 'YourSite_Blocks', 'on_load' ) ).

And remove add_action( 'init', 'my_init_method' );

What you want to do is call the on_load method of the YourSite_Blocks class every time wordpress loads. That's the method that takes care of registering all the post types and adding the actions and filters.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.