Skip to content

Instantly share code, notes, and snippets.

@freekrai
Created July 19, 2011 14:20
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
  • Save freekrai/1092505 to your computer and use it in GitHub Desktop.
Save freekrai/1092505 to your computer and use it in GitHub Desktop.
Some handy wordpress multisite functions
<?php
$posts = multisite_latest_post( array(
"how_many"=>10,
"how_long_days"=>30,
"how_many_words"=>50,
"more_text"=>"[...]",
"remove_html"=>true,
"sort_by"=>"post_date",
// if paginating:
"paginate"=>true,
"start"=>0,
"end"=>25,
// query based on meta values: (key / value)
"metas"=>array(
"tumblog"=>"articles",
)
));
echo "There were ".$posts['total']." posts found";
foreach($posts['posts'] as $item){
?>
<li><a href="<?php echo $item->post_url; ?>">++ <?php echo $item->post_title; ?></a><span> <?php echo multisite_post_meta($item->blog_id,$item->ID,"tumblog"); ?></span></li>
<?php
}
function multisite_latest_post($args) {
global $wpdb;
extract($args);
// Validate
if( empty($how_many) ) $how_many = 10;
if( empty($how_long_days) ) $how_long_days = 30;
if( empty($how_many_words) ) $how_many_words = 50;
if( empty($more_text) ) $more_text = "[...]";
if( empty($remove_html) ) $remove_html = true;
if( empty($post_type) ) $post_type = "video";
if( empty($sort_by) ) $sort_by = "post_date";
if( empty($paginate) ) $paginate = true;
if( empty($start) ) $start = 0;
if( empty($end) ) $end = 25;
if( !isset($metas) ) $metas = array();
$query = "SELECT blog_id FROM $wpdb->blogs WHERE blog_id !='1'";
$blogs = $wpdb->get_col($query);
if ($blogs) {
//we use blog id to loop post query
foreach ($blogs as $blog) {
$blogPostsTable = 'wp_'.$blog.'_posts';
$blogPostMetaTable = 'wp_'.$blog.'_postmeta';
$db_query = "SELECT sql_calc_found_rows $blogPostsTable.ID,
$blogPostsTable.post_author,
$blogPostsTable.post_title,
$blogPostsTable.guid,
$blogPostsTable.post_date,
$blogPostsTable.post_content,
$blogPostsTable.post_modified,
$blogPostsTable.comment_count
FROM $blogPostsTable";
$i = 1;
if( count($metas) ){
foreach($metas as $m){
foreach($m as $mname=>$mval){
$db_query .= " JOIN $blogPostMetaTable m{$i} ON m{$i}.post_id = $blogPostsTable.ID AND m{$i}.meta_key='{$mname}'";
$i++;
}
}
reset($metas);
$db_query .= " WHERE $blogPostsTable.post_status = 'publish' AND $blogPostsTable.post_type = '".$post_type."'";
$i = 1;
$mquery = array();
foreach($metas as $m){
foreach($m as $mname=>$mval){
$mquery[] = " m{$i}.meta_value='{$mval}' ";
$i++;
}
}
if( count($mquery) ){
$db_query .= " AND ( ".implode(" OR ",$mquery)." )";
}
}else{
$db_query .= " WHERE $blogPostsTable.post_status = 'publish' AND $blogPostsTable.post_type = '".$post_type."'";
}
if( $paginate ){
$db_query .= " LIMIT $start,$end";
}else{
$db_query .= " AND $blogPostsTable.post_date >= DATE_SUB(CURRENT_DATE(), INTERVAL $how_long_days DAY)";
}
# echo $db_query."<br />";
$thispos = $wpdb->get_results($db_query);
foreach($thispos as $thispost) {
if($sort_by == 'post_date') {
$order = $thispost->post_date;
}
else{
$order = $thispost->post_modified;
}
$post_dates[] = $order;
$post_guids[$order] = $thispost->guid;
$blog_IDs[$order] = $blog;
$post_IDs[$order] = $thispost->ID;
$post_titles[$order] = $thispost->post_title;
$post_authors[$order] = $thispost->post_author;
$post_contents[$order] = $thispost->post_content;
$comments[$order] = $thispost->comment_count;
}
}
rsort($post_dates);
$union_results = array_unique($post_dates);
$ResultArray = array_slice($union_results, 0, $how_many);
foreach ($ResultArray as $date) {
$ID = $post_IDs[$date];
$id_author = $post_authors[$date];
$post_url = get_blog_permalink($blog_IDs[$date], $ID);/*$post_guids[$date];*/
$post_title = $post_titles[$date];
$post_content = $post_contents[$date];
$post_date = mysql2date(get_option('date_format'), $date);
$post_time = mysql2date(get_option('time_format'), $date);
$total_comment = $comments[$date];
$user_info = get_userdata($id_author);
$author_blog_url = get_blogaddress_by_id($user_info->primary_blog);
$author_url = $user_info->user_url;
$author_email = $user_info->user_email;
$blog_id = $blog_IDs[$date];
if($user_info->first_name) {
$author_name = $user_info->first_name.' '.$user_info->last_name;
}
else{
$author_name = $user_info->nickname;
}
if($remove_html) {
$post_content = multisite_cleanup_post($post_content);
}
$results = array();
$results['ID'] = $ID;
$results['post_url'] = $post_url;
$results['post_title'] = $post_title;
$results['post_content'] = multisite_cut_article_by_words($post_content, $how_many_words);
$results['post_content'] .= $more_text;
$results['author_blog_url'] = $author_blog_url;
$results['author_url'] = $author_url;
$results['author_email'] = $author_email;
$results['author_name'] = $author_name;
$results['post_date'] = $post_date;
$results['post_time'] = $post_time;
$results['comment_count'] = $total_comment;
$results['blog_id'] = $blog_id;
$returns[] = $results;
}
$latest_posts = multisite_bind_array_to_object($returns);
$total = $wpdb->get_var("SELECT FOUND_ROWS() as total");
return array("posts"=>$latest_posts,"total"=>$total);
}
}
function multisite_post_meta($blog, $post, $key){
global $wpdb;
$blogPostsTable = 'wp_'.$blog.'_postmeta';
$query = "SELECT meta_value FROM {$blogPostsTable} WHERE post_id ='{$post}' AND meta_key='{$key}'";
$meta_value = $wpdb->get_var($query);
return $meta_value;
}
function get_blog_domain($blog_id){
global $wpdb;
$query = "SELECT domain FROM $wpdb->blogs WHERE blog_id ='{$blog_id}'";
$domain = $wpdb->get_var($query);
return $domain;
}
function multisite_bind_array_to_object($array) {
$return = new stdClass();
foreach ($array as $k => $v) {
if (is_array($v)) {
$return->$k = multisite_bind_array_to_object($v);
}
else {
$return->$k = $v;
}
}
return $return;
}
function multisite_cut_article_by_words($original_text, $how_many) {
$word_cut = strtok($original_text," ");
$return = '';
for ($i=1;$i<=$how_many;$i++) {
$return .= $word_cut;
$return .= (" ");
$word_cut = strtok(" ");
}
$return .= '';
return $return;
}
function multisite_cleanup_post($source) {
$replace_all_html = strip_tags($source);
$bbc_tag = array('/\[caption(.*?)]\[\/caption\]/is');
$result = preg_replace($bbc_tag, '', $replace_all_html);
return $result;
}
function multisite_get_option($blog_id,$key){
switch_to_blog($blog_id);
$val = get_option($key);
restore_current_blog();
return $val;
}
function multisite_get_thumb($postID, $w = 200, $h = 150, $blogID = 1, $link = true, $return = false) {
switch_to_blog($blogID);
$scriptpath = get_bloginfo('template_directory');
if( $thumbnail = get_post_meta($postID, 'thumbnail', true) ){
$iurl = '/wp-content/iptv/img/'.$thumbnail;
}else{
$images = get_children(array('post_parent' => $postID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order'));
if ( $images ){
$img = array_shift($images);
$imagelink = wp_get_attachment_image_src($img->ID,array($w,$h));
$iurl = $imagelink[0];
}
}
$out = '';
if( $iurl ){
$img = $iurl;
if( $link ) $out .= '<a href="'.get_permalink($postID).'" title="Permanent Link to '.get_the_title($postID).'">';
$out .= '<img src="'.$img.'" width='.$w.' height='.$h.' />';
if( $link ) $out .= '</a>';
}
restore_current_blog();
if($return) {
return $out;
} else {
echo $out;
}
}
function get_thumb($postID, $w = 200, $h = 150, $link = true, $return = false) {
$scriptpath = get_bloginfo('template_directory');
if( $thumbnail = get_post_meta($postID, 'thumbnail', true) ){
$iurl = '/wp-content/iptv/img/'.$thumbnail;
}else{
$images = get_children(array('post_parent' => $postID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order'));
if ( $images ){
$img = array_shift($images);
$imagelink = wp_get_attachment_image_src($img->ID,array($w,$h));
$iurl = $imagelink[0];
}
}
$out = '';
if( $iurl ){
$img = $iurl;
if( $link ) $out .= '<a href="'.get_permalink($postID).'" title="Permanent Link to '.get_the_title($postID).'">';
$out .= '<img src="'.$img.'" width='.$w.' height='.$h.' />';
if( $link ) $out .= '</a>';
}
if($return) {
return $out;
} else {
echo $out;
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment