| 1 | <?php |
|---|
| 2 | // Exit if accessed directly |
|---|
| 3 | if ( ! defined( 'ABSPATH' ) ) exit; |
|---|
| 4 | |
|---|
| 5 | /** |
|---|
| 6 | * @see http://codex.wordpress.org/Function_Reference/register_post_type |
|---|
| 7 | */ |
|---|
| 8 | function bp_custom_register_post_type() { |
|---|
| 9 | $labels = array( |
|---|
| 10 | 'name' => _x( 'Books', 'post type general name', 'your-plugin-textdomain' ), |
|---|
| 11 | 'singular_name' => _x( 'Book', 'post type singular name', 'your-plugin-textdomain' ), |
|---|
| 12 | 'menu_name' => _x( 'Books', 'admin menu', 'your-plugin-textdomain' ), |
|---|
| 13 | 'name_admin_bar' => _x( 'Book', 'add new on admin bar', 'your-plugin-textdomain' ), |
|---|
| 14 | 'add_new' => _x( 'Add New', 'book', 'your-plugin-textdomain' ), |
|---|
| 15 | 'add_new_item' => __( 'Add New Book', 'your-plugin-textdomain' ), |
|---|
| 16 | 'new_item' => __( 'New Book', 'your-plugin-textdomain' ), |
|---|
| 17 | 'edit_item' => __( 'Edit Book', 'your-plugin-textdomain' ), |
|---|
| 18 | 'view_item' => __( 'View Book', 'your-plugin-textdomain' ), |
|---|
| 19 | 'all_items' => __( 'All Books', 'your-plugin-textdomain' ), |
|---|
| 20 | 'search_items' => __( 'Search Books', 'your-plugin-textdomain' ), |
|---|
| 21 | 'parent_item_colon' => __( 'Parent Books:', 'your-plugin-textdomain' ), |
|---|
| 22 | 'not_found' => __( 'No books found.', 'your-plugin-textdomain' ), |
|---|
| 23 | 'not_found_in_trash' => __( 'No books found in Trash.', 'your-plugin-textdomain' ), |
|---|
| 24 | ); |
|---|
| 25 | |
|---|
| 26 | $args = array( |
|---|
| 27 | 'labels' => $labels, |
|---|
| 28 | 'public' => true, |
|---|
| 29 | 'publicly_queryable' => true, |
|---|
| 30 | 'show_ui' => true, |
|---|
| 31 | 'show_in_menu' => true, |
|---|
| 32 | 'query_var' => true, |
|---|
| 33 | 'rewrite' => array( 'slug' => 'book' ), |
|---|
| 34 | 'capability_type' => 'post', |
|---|
| 35 | 'has_archive' => true, |
|---|
| 36 | 'hierarchical' => false, |
|---|
| 37 | 'menu_position' => null, |
|---|
| 38 | 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ) |
|---|
| 39 | ); |
|---|
| 40 | |
|---|
| 41 | register_post_type( 'book', $args ); |
|---|
| 42 | } |
|---|
| 43 | add_action( 'init', 'bp_custom_register_post_type' ); |
|---|
| 44 | |
|---|
| 45 | function bp_custom_set_activity_tracking( $tracked = array() ) { |
|---|
| 46 | /** |
|---|
| 47 | * If buddypress arg is defined, you can set the activity recording for your plugin where |
|---|
| 48 | * - type : is your plugin's activity type |
|---|
| 49 | * - description : is your plugin's activity description for the administration screen dropdown |
|---|
| 50 | * - format_callback : is the format callback to use to build your plugin's activity action |
|---|
| 51 | * - label : is your plugin's front end dropdown option label |
|---|
| 52 | * |
|---|
| 53 | * - context : is an array of the contexts your plugin's dropdown option should show |
|---|
| 54 | * - activity > the Activity directory page |
|---|
| 55 | * - member > the user's activity profile pages |
|---|
| 56 | * - member_groups > the user's groups activity profile page |
|---|
| 57 | * - group > the group's activity page (generally group's home page) |
|---|
| 58 | * |
|---|
| 59 | * Using context can avoid using the front-end dropdown hooks such as bp_activity_filter_options. Although, it's possible |
|---|
| 60 | * some themes didn't upgraded to BuddyPress 2.1 way of displaying new activity types in front end dropdowns. |
|---|
| 61 | * So you might check if bp_activity_show_filters() function exists to be sure of it |
|---|
| 62 | * |
|---|
| 63 | * - track : whether to record or not an activity for your plugin |
|---|
| 64 | * - publish_callback (optional) : your specific callback if you want to have more control on the way activities will be recorded |
|---|
| 65 | * - unpublish_callback (optional) : your specific callback if you want to have more control on the way activities will be removed |
|---|
| 66 | * - update_callback (optional) : your specific callback if you want to have more control on the way activities will be updated |
|---|
| 67 | * - untrash_callback (optional) : your specific callback if you want to have more control on the way activities will be reverted |
|---|
| 68 | * - remove_callback (optional) : your specific callback if you want to have more control on the way activities will be removed |
|---|
| 69 | * |
|---|
| 70 | * NB : your plugin's post type will only be tracked if the BuddyPress blogs component is active, as your plugin's post type will |
|---|
| 71 | * be attached to the BuddyPress blogs component one (post) and the activity will be recorded on multisite child blogs if the discourage |
|---|
| 72 | * search engines settings is not set. |
|---|
| 73 | */ |
|---|
| 74 | $tracked['book'] = array( |
|---|
| 75 | 'buddypress' => array( |
|---|
| 76 | 'type' => 'new_book', |
|---|
| 77 | 'description' => __( 'New book published', 'your-plugin-textdomain' ), |
|---|
| 78 | 'format_callback' => 'bp_custom_format_activity_action_new_book_post', |
|---|
| 79 | 'label' => __( 'Books', 'your-plugin-textdomain' ), |
|---|
| 80 | 'context' => array( 'activity' ), |
|---|
| 81 | 'track' => true, |
|---|
| 82 | ) |
|---|
| 83 | ); |
|---|
| 84 | return $tracked; |
|---|
| 85 | } |
|---|
| 86 | add_filter( 'bp_blogs_register_post_types', 'bp_custom_set_activity_tracking', 10, 1 ); |
|---|
| 87 | |
|---|
| 88 | function bp_custom_format_activity_action_new_book_post( $action, $activity ) { |
|---|
| 89 | if ( empty( $activity ) || ( empty( $action ) && empty( $activity->id ) ) ) |
|---|
| 90 | return false; |
|---|
| 91 | |
|---|
| 92 | $user_link = bp_core_get_userlink( $activity->user_id ); |
|---|
| 93 | $post_link = add_query_arg( 'p', $activity->secondary_item_id, trailingslashit( get_home_url( $activity->item_id ) ) ); |
|---|
| 94 | $post_link = '<a href="'.$post_link.'">' . __( 'Read it!', 'your-plugin-textdomain' ) . '</a>'; |
|---|
| 95 | |
|---|
| 96 | $action = sprintf( __( '%1$s wrote a new book, %2$s', 'your-plugin-textdomain' ), $user_link, $post_link ); |
|---|
| 97 | |
|---|
| 98 | return $action; |
|---|
| 99 | } |
|---|