-2

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?

2 Answers 2

1

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.

EDIT:

To implement, rename your function call from:

function my_init_method() {}

to:

function mytheme-slug_init_method() {}

Then, change your hook call from:

add_action( 'init', 'my_init_method' );

to:

add_action( 'init', 'mytheme_init_method' );
2
  • Thanks for helping but I can't find function my_init_method() {} where it is? (and which slug should I add?)
    – wyc
    Commented May 11, 2011 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
    – wyc
    Commented May 11, 2011 at 19:14
0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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