Created
August 19, 2010 15:11
-
-
Save taras/538096 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: Listing Content Item | |
Plugin URI: | |
Description: | |
Author: | |
Version: 1.0 | |
Author URI: | |
*/ | |
class Listing { | |
var $meta_fields = array("list-address1","list-address2","list-country","list-province","list-city","list-postcode","list-firstname","list-lastname","list-website","list-mobile","list-phone","list-fax","list-email", "list-profile", "list-distributionrange", "list-distributionarea"); | |
public function loadStyleScripts(){ | |
$eventsURL = trailingslashit( WP_PLUGIN_URL ) . trailingslashit( plugin_basename( dirname( __FILE__ ) ) ) . 'css/'; | |
wp_enqueue_style('listing-style', $eventsURL.'listing.css'); | |
} | |
function Listing() | |
{ | |
// Register custom post types | |
register_post_type('listing', array( | |
'labels' => array( | |
'name' => __('Listings'), 'singular_name' => __( 'Listing' ), | |
'add_new' => __( 'Add Listing' ), | |
'add_new_item' => __( 'Add New Listing' ), | |
'edit' => __( 'Edit' ), | |
'edit_item' => __( 'Edit Listing' ), | |
'new_item' => __( 'New Listing' ), | |
'view' => __( 'View Listing' ), | |
'view_item' => __( 'View Listing' ), | |
'search_items' => __( 'Search Listings' ), | |
'not_found' => __( 'No listings found' ), | |
'not_found_in_trash' => __( 'No listings found in Trash' ), | |
'parent' => __( 'Parent Listing' ), | |
), | |
'singular_label' => __('Listing'), | |
'public' => true, | |
'show_ui' => true, // UI in admin panel | |
'_builtin' => false, // It's a custom post type, not built in | |
'_edit_link' => 'post.php?post=%d', | |
'capability_type' => 'post', | |
'hierarchical' => false, | |
'rewrite' => array("slug" => "listings"), // Permalinks | |
'query_var' => "listings", // This goes to the WP_Query schema | |
'supports' => array('title','editor') | |
)); | |
add_filter("manage_edit-listing_columns", array(&$this, "edit_columns")); | |
add_action("manage_posts_custom_column", array(&$this, "custom_columns")); | |
// Register custom taxonomy | |
register_taxonomy("businesses", array("listing"), array("hierarchical" => true, "label" => "Listing Categories", "singular_label" => "Listing Categorie", "rewrite" => true)); | |
# Region | |
register_taxonomy("regions", array("listing"), array('labels' => array( | |
'search_items' => __( 'Search Regions' ), | |
'popular_items' => __( 'Popular Regions' ), | |
'all_items' => __( 'All Regions' ), | |
'parent_item' => null, | |
'parent_item_colon' => null, | |
'edit_item' => __( 'Edit Region' ), | |
'update_item' => __( 'Update Region' ), | |
'add_new_item' => __( 'Add New Region' ), | |
'new_item_name' => __( 'New Region Name' ), | |
'separate_items_with_commas' => __( 'Separate regions with commas' ), | |
'add_or_remove_items' => __( 'Add or remove regions' ), | |
'choose_from_most_used' => __( 'Choose from the most used regions' )), | |
"hierarchical" => false, "label" => "Listing Regions", "singular_label" => "Listing Region", "rewrite" => true)); | |
# Member Organizations | |
register_taxonomy("organizations", array("listing"), array('labels' => array( | |
'search_items' => __( 'Search Member Organizations' ), | |
'popular_items' => __( 'Popular Member Organizations' ), | |
'all_items' => __( 'All Member Organizations' ), | |
'parent_item' => null, | |
'parent_item_colon' => null, | |
'edit_item' => __( 'Edit Member Organization' ), | |
'update_item' => __( 'Update Member Organization' ), | |
'add_new_item' => __( 'Add New Member Organization' ), | |
'new_item_name' => __( 'New Member Organization Name' ), | |
'separate_items_with_commas' => __( 'Separate member organizations with commas' ), | |
'add_or_remove_items' => __( 'Add or remove member organizations' ), | |
'choose_from_most_used' => __( 'Choose from the most used member organizations' )), | |
"hierarchical" => false, "label" => "Member Organizations", "singular_label" => "Member Organization", "rewrite" => true)); | |
# Retail Products | |
register_taxonomy("retails", array("listing"), array('labels' => array( | |
'search_items' => __( 'Search Retail Products' ), | |
'popular_items' => __( 'Popular Retail Products' ), | |
'all_items' => __( 'All Retail Products' ), | |
'parent_item' => null, | |
'parent_item_colon' => null, | |
'edit_item' => __( 'Edit Retail Product' ), | |
'update_item' => __( 'Update Retail Product' ), | |
'add_new_item' => __( 'Add New Retail Product' ), | |
'new_item_name' => __( 'New Retail Product Name' ), | |
'separate_items_with_commas' => __( 'Separate retail products with commas' ), | |
'add_or_remove_items' => __( 'Add or remove retail products' ), | |
'choose_from_most_used' => __( 'Choose from the most used retail products' )), | |
"hierarchical" => false, "label" => "Retail Products", "singular_label" => "Retail Product", "rewrite" => true)); | |
# Farming Practices | |
register_taxonomy("practices", array("listing"), array('labels' => array( | |
'search_items' => __( 'Search Farming Practices' ), | |
'popular_items' => __( 'Popular Farming Practices' ), | |
'all_items' => __( 'All Farming Practices' ), | |
'parent_item' => null, | |
'parent_item_colon' => null, | |
'edit_item' => __( 'Edit Farming Practice' ), | |
'update_item' => __( 'Update Farming Practice' ), | |
'add_new_item' => __( 'Add New Farming Practice' ), | |
'new_item_name' => __( 'New Farming Practice Name' ), | |
'separate_items_with_commas' => __( 'Separate farming practices with commas' ), | |
'add_or_remove_items' => __( 'Add or remove farming practices' ), | |
'choose_from_most_used' => __( 'Choose from the most used farming practices' )), | |
"hierarchical" => false, "label" => "Farming Practices", "singular_label" => "Farming Practice", "rewrite" => true)); | |
# Products | |
register_taxonomy("products", array("listing"), array('labels' => array( | |
'search_items' => __( 'Search Products' ), | |
'popular_items' => __( 'Popular Products' ), | |
'all_items' => __( 'All Products' ), | |
'parent_item' => null, | |
'parent_item_colon' => null, | |
'edit_item' => __( 'Edit Product' ), | |
'update_item' => __( 'Update Product' ), | |
'add_new_item' => __( 'Add New Product' ), | |
'new_item_name' => __( 'New Product Name' ), | |
'separate_items_with_commas' => __( 'Separate products with commas' ), | |
'add_or_remove_items' => __( 'Add or remove products' ), | |
'choose_from_most_used' => __( 'Choose from the most used products' )), | |
"hierarchical" => false, "label" => "Products", "singular_label" => "Product", "rewrite" => true)); | |
// Admin interface init | |
add_action("admin_init", array(&$this, "admin_init")); | |
add_action("template_redirect", array(&$this, 'template_redirect')); | |
// Insert post hook | |
add_action("wp_insert_post", array(&$this, "wp_insert_post"), 10, 2); | |
} | |
function edit_columns($columns) | |
{ | |
$columns = array( | |
"cb" => "<input type=\"checkbox\" />", | |
"title" => "Business Name", | |
"description" => "Description", | |
"list-personal" => "Personal Information", | |
"list-location" => "Location", | |
"list-categorie" => "Categorie", | |
); | |
return $columns; | |
} | |
function custom_columns($column) | |
{ | |
global $post; | |
switch ($column) | |
{ | |
case "description": | |
the_excerpt(); | |
break; | |
case "list-personal": | |
$custom = get_post_custom(); | |
if(isset($custom["list-firstname"][0])) echo $custom["list-firstname"][0]."<br />"; | |
if(isset($custom["list-lastname"][0])) echo $custom["list-lastname"][0]."<br />"; | |
if(isset($custom["list-email"][0])) echo $custom["list-email"][0]."<br />"; | |
if(isset($custom["list-website"][0])) echo $custom["list-website"][0]."<br />"; | |
if(isset($custom["list-phone"][0])) echo $custom["list-phone"][0]."<br />"; | |
if(isset($custom["list-mobile"][0])) echo $custom["list-mobile"][0]."<br />"; | |
if(isset($custom["list-fax"][0])) echo $custom["list-fax"][0]; | |
break; | |
case "list-location": | |
$custom = get_post_custom(); | |
if(isset($custom["list-address1"][0])) echo $custom["list-address1"][0]."<br />"; | |
if(isset($custom["list-address2"][0])) echo $custom["list-address2"][0]."<br />"; | |
if(isset($custom["list-city"][0])) echo $custom["list-city"][0]."<br />"; | |
if(isset($custom["list-province"][0])) echo $custom["list-province"][0]."<br />"; | |
if(isset($custom["list-postcode"][0])) echo $custom["list-postcode"][0]."<br />"; | |
if(isset($custom["list-country"][0])) echo $custom["list-country"][0]."<br />"; | |
if(isset($custom["list-profile"][0])) echo $custom["list-profile"][0]."<br />"; | |
if(isset($custom["list-distributionrange"][0])) echo $custom["list-distributionrange"][0]."<br />"; | |
if(isset($custom["list-distributionarea"][0])) echo $custom["list-distributionarea"][0]; | |
break; | |
case "list-categorie": | |
$speakers = get_the_terms(0, "businesses"); | |
$speakers_html = array(); | |
if(is_array($speakers)){ | |
foreach ($speakers as $speaker) | |
array_push($speakers_html, '<a href="' . get_term_link($speaker->slug, "businesses") . '">' . $speaker->name . '</a>'); | |
echo implode($speakers_html, ", "); | |
} | |
break; | |
} | |
} | |
// Template selection | |
function template_redirect() | |
{ | |
global $wp; | |
if (isset($wp->query_vars["post_type"]) && ($wp->query_vars["post_type"] == "listing")) | |
{ | |
include(STYLESHEETPATH . "/listing.php"); | |
die(); | |
} | |
} | |
// When a post is inserted or updated | |
function wp_insert_post($post_id, $post = null) | |
{ | |
if ($post->post_type == "listing") | |
{ | |
// Loop through the POST data | |
foreach ($this->meta_fields as $key) | |
{ | |
$value = @$_POST[$key]; | |
if (empty($value)) | |
{ | |
delete_post_meta($post_id, $key); | |
continue; | |
} | |
// If value is a string it should be unique | |
if (!is_array($value)) | |
{ | |
// Update meta | |
if (!update_post_meta($post_id, $key, $value)) | |
{ | |
// Or add the meta data | |
add_post_meta($post_id, $key, $value); | |
} | |
} | |
else | |
{ | |
// If passed along is an array, we should remove all previous data | |
delete_post_meta($post_id, $key); | |
// Loop through the array adding new values to the post meta as different entries with the same name | |
foreach ($value as $entry) | |
add_post_meta($post_id, $key, $entry); | |
} | |
} | |
} | |
} | |
function admin_init() | |
{ | |
// Custom meta boxes for the edit listing screen | |
add_meta_box("list-pers-meta", "Personal Information", array(&$this, "meta_personal"), "listing", "normal", "low"); | |
add_meta_box("list-meta", "Location", array(&$this, "meta_location"), "listing", "normal", "low"); | |
} | |
function meta_personal() | |
{ | |
global $post; | |
$custom = get_post_custom($post->ID); | |
if(isset($custom["list-firstname"][0])) $first_name = $custom["list-firstname"][0];else $first_name = ''; | |
if(isset($custom["list-lastname"][0])) $last_name = $custom["list-lastname"][0];else $last_name = ''; | |
if(isset($custom["list-website"][0])) $website = $custom["list-website"][0];else $website = ''; | |
if(isset($custom["list-phone"][0])) $phone = $custom["list-phone"][0];else $phone = ''; | |
if(isset($custom["list-mobile"][0])) $mobile = $custom["list-mobile"][0];else $mobile = ''; | |
if(isset($custom["list-fax"][0])) $fax = $custom["list-fax"][0];else $fax = ''; | |
if(isset($custom["list-email"][0])) $email = $custom["list-email"][0];else $email = ''; | |
?> | |
<div class="personal"> | |
<table border="0" id="personal"> | |
<tr><td class="personal_field"><label>Firstname:</label></td><td class="personal_input"><input name="list-firstname" value="<?php echo $first_name; ?>" /></td></tr> | |
<tr><td class="personal_field"><label>Lastname:</label></td><td class="personal_input"><input name="list-lastname" value="<?php echo $last_name; ?>" /></td></tr> | |
<tr><td class="personal_field"><label>Email:</label></td><td class="personal_input"><input name="list-email" value="<?php echo $email; ?>" size="40"/></td></tr> | |
<tr><td class="personal_field"><label>Website:</label></td><td class="personal_input"><input name="list-website" value="<?php echo $website; ?>" size="40"/></td></tr> | |
<tr><td class="personal_field"><label>Phone:</label></td><td class="personal_input"><input name="list-phone" value="<?php echo $phone; ?>" /></td></tr> | |
<tr><td class="personal_field"><label>Mobile:</label></td><td class="personal_input"><input name="list-mobile" value="<?php echo $mobile; ?>" /></td></tr> | |
<tr><td class="personal_field"><label>Fax:</label></td><td class="personal_input"><input name="list-fax" value="<?php echo $fax; ?>" /></td></tr> | |
</table> | |
</div> | |
<?php | |
} | |
// Admin post meta contents | |
function meta_location() | |
{ | |
global $post; | |
$custom = get_post_custom($post->ID); | |
if(isset($custom["list-address1"])) $address1 = $custom["list-address1"][0];else $address1 = ''; | |
if(isset($custom["list-address2"])) $address2 = $custom["list-address2"][0];else $address2 = ''; | |
if(isset($custom["list-country"])) $country = $custom["list-country"][0];else $country = ''; | |
if(isset($custom["list-province"])) $province = $custom["list-province"][0];else $province = ''; | |
if(isset($custom["list-city"])) $city = $custom["list-city"][0];else $city = ''; | |
if(isset($custom["list-postcode"])) $post_code = $custom["list-postcode"][0];else $post_code = ''; | |
if(isset($custom["list-profile"])) $profile = $custom["list-profile"][0];else $profile = ''; | |
if(isset($custom["list-distributionrange"])) $distribution_range = $custom["list-distributionrange"][0];else $distribution_range = ''; | |
if(isset($custom["list-distributionarea"])) $distribution_area = $custom["list-distributionarea"][0];else $ddistribution_area = ''; | |
?> | |
<div class="location"> | |
<table border="0" id="location"> | |
<tr><td class="location_field"><label>Address 1:</label></td><td class="location_input"><input name="list-address1" value="<?php echo $address1; ?>" size="60" /></td></tr> | |
<tr><td class="location_field"><label>Address 2:</label></td><td class="location_input"><input name="list-address2" value="<?php echo $address2; ?>" size="60" /></td></tr> | |
<tr><td class="location_field"><label>City:</label></td><td class="location_input"><input name="list-city" value="<?php echo $city; ?>" /></td></tr> | |
<tr><td class="location_field"><label>Province:</label></td><td class="location_input"><input name="list-province" value="Ontario" readonly /></td></tr> | |
<tr><td class="location_field"><label>Postal Code:</label></td><td class="location_input"><input name="list-postcode" value="<?php echo $post_code; ?>" /></td></tr> | |
<tr><td class="location_field"><label>Country:</label></td><td class="location_input"><input name="list-country" value="Canada" readonly /></td></tr> | |
<tr><td class="location_field"><label>Profile:</label></td><td class="location_input"><input name="list-profile" value="<?php echo $profile; ?>" size="60" /></td></tr> | |
<tr><td class="location_field"><label>Distribution Range:</label></td><td class="location_input"><input name="list-distributionrange" value="<?php echo $distribution_range; ?>" size="60" /></td></tr> | |
<tr><td class="location_field"><label>Distribution Area:</label></td><td class="location_input"><input name="list-distributionarea" value="<?php echo $distribution_area; ?>" size="60" /></td></tr> | |
</table> | |
</div> | |
<?php | |
} | |
} | |
// Initiate the plugin | |
add_action("init", "ListingInit"); | |
function ListingInit() { | |
global $listing; | |
$listing = new Listing(); | |
$add_css = $listing->loadStyleScripts(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment