/** * Retrieve a post's relations as a list with specified format. * * @param int $id Post ID. * @param string|array $post_type Post type name. * @param string $before Optional. Before list. * @param string $sep Optional. Separate items using this. * @param string $after Optional. After list. * @return string */ function get_the_relations($id = 0, $post_type, $before = '', $sep = '', $after = '') { $relations = rpt_get_object_relation($id, $post_type, false); if (is_wp_error($relations)) { return $relations; } if (empty($relations)) { return false; } foreach ($relations as $relation) { $link = get_permalink($relation); if (is_wp_error($link)) { return $link; } $relation_links[] = '<a href="' . $link . '" title="' . esc_attr(get_the_title($relation)) . '">' . get_the_title($relation) . '</a>'; } $relation_links = apply_filters("get_the_relations", $relation_links, $post_type); return $before . join($sep, $relation_links) . $after; }
/** * Client side widget render * * @param array $args * @param array $instance * @return void * @author Amaury Balmer */ public function widget($args, $instance) { global $wp_query; extract($args); // Singular view ? if (!is_singular()) { return false; } // Post type egal "ALL", delete it ! if ($instance['post_type'] == 'all') { $instance['post_type'] = array(); } // Related IDs for this view ? $ids = rpt_get_object_relation($wp_query->get_queried_object_id(), $instance['post_type']); if ($ids == false || empty($ids)) { return false; } // Build or not the name of the widget if (!empty($instance['title'])) { $title = $instance['title']; } else { $custom_type = get_post_type_object($instance['post_type']); $title = $custom_type->labels->name; } $title = apply_filters('widget_title', $title, $instance, $this->id_base); $items_query = new WP_Query(array('post__in' => $ids, 'post_type' => $instance['post_type'], 'post_status' => 'publish', 'showposts' => $instance['number'], 'orderby' => $instance['orderby'], 'order' => $instance['order'])); echo $before_widget; // Display the widget, allow take template from child or parent theme if (is_file(STYLESHEETPATH . '/widget-views/rpt-widget.php')) { // Use custom template from child theme include STYLESHEETPATH . '/widget-views/rpt-widget.php'; } elseif (is_file(TEMPLATEPATH . '/widget-views/rpt-widget.php')) { // Use custom template from parent theme include TEMPLATEPATH . '/widget-views/rpt-widget.php'; } else { // Use builtin temlate include RPT_DIR . 'views/client/widget.php'; } wp_reset_postdata(); echo $after_widget; return true; }
<div class="info--overlay"><div> <p class="teaser__title"> <?php echo get_the_title($post); //echo ' '.get_the_ID(); ?> </p> <p class="teaser__artist"> <?php //////////// Find related artists of related work ////////////// //$related_artist_pages_ids = array(); unset($related_artist_pages_ids); $related_artist_pages_ids = rpt_get_object_relation($post->ID, 'artist'); //echo print_r($related_artist_pages_ids).' '; //echo count($related_artist_pages_ids).' '; if (count($related_artist_pages_ids) >= 1) { $related_artist_pages = get_posts(array('post_type' => 'artist', 'post_status' => 'publish', 'posts_per_page' => -1, 'post__in' => $related_artist_pages_ids, 'orderby' => 'post_date', 'order' => 'DESC')); //echo print_r($related_artist_pages).' '; foreach ($related_artist_pages as $artist_post) { echo get_the_title($artist_post) . '<br />'; } //unset($related_artist_pages_ids); //$related_artist_pages_ids = array(); //echo count($related_artist_pages_ids); } ?> <?php
/** * Prints the appropriate response to a posttype quick search. * * * @param void * @author Nicolas Juen */ public static function wp_ajax_posttype_quick_search() { $args = array(); $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : ''; $query = isset($_REQUEST['q']) ? $_REQUEST['q'] : ''; $response_format = isset($_REQUEST['response-format']) && in_array($_REQUEST['response-format'], array('json', 'markup')) ? $_REQUEST['response-format'] : 'json'; $post_id = isset($_REQUEST['post_id']) ? (int) $_REQUEST['post_id'] : ''; // Ad custom walker if ('markup' == $response_format) { $args['walker'] = new Walker_Relations_Checklist(); } if ((int) $post_id > 0) { // Get current items for checked datas. $current_items = rpt_get_object_relation($post_id); if (is_array($current_items)) { $current_items = array_map('intval', $current_items); } $args['current_items'] = $current_items; $args['current_id'] = $post_id; } $matches = array(); if (preg_match('/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*\\b)/', $type, $matches)) { if ('posttype' == $matches[1] && get_post_type_object($matches[2])) { query_posts(array('nopaging' => true, 'post_type' => $matches[2], 'post_status' => 'publish', 'order' => 'ASC', 'orderby' => 'title', 's' => $query, 'post__not_in' => array($post_id), 'rpt_query' => true)); if (!have_posts()) { return false; } while (have_posts()) { the_post(); if ('markup' == $response_format) { // Add post_type for the walker $args['post_type'] = $matches[2]; echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', array(get_post(get_the_ID()))), 0, (object) $args); } elseif ('json' == $response_format) { echo json_encode(array('ID' => get_the_ID(), 'post_title' => get_the_title(), 'post_type' => get_post_type())); echo "\n"; } } } } die; }
<a class="thumbnail" href="<?php the_permalink(); ?> "><?php the_post_thumbnail("work-thumb"); ?> <div class="info--overlay"><div> <div><?php the_title(); ?> </div> <?php unset($related_artist_pages_ids); $id = get_the_ID(); $related_artist_pages_ids = rpt_get_object_relation($id, 'artist'); if (count($related_artist_pages_ids) >= 1) { $related_artist_pages = get_posts(array('post_type' => 'artist', 'post_status' => 'publish', 'posts_per_page' => -1, 'post__in' => $related_artist_pages_ids, 'orderby' => 'post_date', 'order' => 'DESC')); //echo print_r($related_artist_pages).' '; foreach ($related_artist_pages as $artist_post) { echo get_the_title($artist_post) . '<br />'; } //unset($related_artist_pages_ids); //$related_artist_pages_ids = array(); //echo count($related_artist_pages_ids); // wp_reset_query(); } ?> <?php // other artists $artists = rwmb_meta('work_artists');
/** * Filtering results when rel- key word is set on WP_Query */ public static function parse_query($query) { global $wpdb; foreach (get_post_types(array('show_ui' => true, 'public' => true), 'objects') as $post_type) { $key = 'rel-' . $post_type->name; if (isset($query->query_vars[$key]) && !empty($query->query_vars[$key])) { // Get ID form slug $post_id = (int) $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_name = %s AND post_type = %s", stripslashes($query->query_vars[$key]), $post_type->name)); if ($post_id == 0) { // Post not exist for this post name ? Make zero result $query->query_vars['post__in'] = array(0); } else { // Otherwise, filtering result with this ID. $query->query_vars['post__in'] = rpt_get_object_relation($post_id, array()); // TODO: Manage the case when the post__in field is already charged ? } $query->is_home = false; $query->is_archive = true; // TODO: Manage rewrite and title ? } } }
function field($args, $instance) { global $post; extract($args); $entries = is_array($entries) ? $entries['name'] : $entries; $title = apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base); // Get current items for checked datas. $current_items = rpt_get_object_relation($args['post_id'], $instance['posttype']); $current_items = array_map('intval', $current_items); $_args = array('nopaging' => true, 'order' => 'ASC', 'orderby' => 'title', 'post_type' => $instance['posttype'], 'post_status' => 'publish', 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'current_id' => $args['post_id'], 'current_items' => $current_items); // For the same post type, exclude current ! $_args['post__not_in'] = array($args['post_id']); $post_type = get_post_type_object($instance['posttype']); // Default ? if (isset($post_type->_default_query)) { $_args = array_merge($_args, (array) $post_type->_default_query); } $get_posts = new WP_Query(); $posts = $get_posts->query($_args); if (!$get_posts->post_count) { echo '<p>' . __('No items.', 'relation-post-types') . '</p>'; return; } switch ($instance['mode']) { case 'multiple_checkboxes': $walker = new Walker_Field_Relations_Checklist(); $start_lv = '<ul id="' . $instance['posttype'] . 'checklist" class="list:' . $instance['posttype'] . ' categorychecklist form-no-clear">'; $end_lv = '</ul>'; break; case 'simple': $walker = new Walker_Field_RelationsDropdown(); $start_lv = '<select name="' . $this->get_field_name('name') . '" style="width: 47%;">'; $end_lv = '</select>'; break; case 'multiple_select': $walker = new Walker_Field_RelationsDropdown(); $start_lv = '<select name="' . $this->get_field_name('name') . '[]" style="width: 47%;height: auto;" size="10" multiple>'; $end_lv = '</select>'; break; default: return false; break; } echo $before_widget; if ($title) { echo $before_title . $title . $after_title; } ?> <div id="posttype-<?php echo $instance['posttype']; ?> " class="posttypediv"> <div id="<?php echo $instance['posttype']; ?> -all" class="tabs-panel-view-all tabs-panel-active"> <?php echo isset($start_lv) ? $start_lv : ''; $_args['walker'] = $walker; $_args['name'] = $this->get_field_name('name'); $checkbox_items = walk_nav_menu_tree($posts, $instance['depth'], (object) $_args); echo $checkbox_items; echo isset($end_lv) ? $end_lv : ''; ?> </div><!-- /.tabs-panel --> </div> <?php if (isset($instance['description']) && $instance['description'] != '') { echo '<p>' . $instance['description'] . '</p>'; } echo $after_widget; /* $post_type_name = $post_type['args']->name; // Get current items for checked datas. $current_items = rpt_get_object_relation( $object->ID ); $current_items = array_map( 'intval', $current_items ); // Build args for walker $args = array( 'nopaging' => true, 'order' => 'ASC', 'orderby' => 'title', 'post_type' => $post_type_name, 'post_status' => 'publish', 'suppress_filters' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'current_id' => $object->ID, 'current_items' => $current_items ); // For the same post type, exclude current ! if ( $object->post_type == $post_type_name ) $args['post__not_in'] = array($object->ID); // Default ? if ( isset( $post_type['args']->_default_query ) ) $args = array_merge($args, (array) $post_type['args']->_default_query ); $get_posts = new WP_Query; $posts = $get_posts->query( $args ); if ( ! $get_posts->post_count ) { echo '<p>' . __( 'No items.', 'relation-post-types' ) . '</p>'; return; } $walker = new Walker_Relations_Checklist; ?> <div id="posttype-<?php echo $post_type_name; ?>" class="posttypediv"> <div id="<?php echo $post_type_name; ?>-all" class="tabs-panel tabs-panel-view-all tabs-panel-active"> <ul id="<?php echo $post_type_name; ?>checklist" class="list:<?php echo $post_type_name; ?> categorychecklist form-no-clear"> <?php $args['walker'] = $walker; $checkbox_items = walk_nav_menu_tree( $posts, 0, (object) $args ); echo $checkbox_items; ?> </ul> </div><!-- /.tabs-panel --> </div><!-- /.posttypediv --> <input type="hidden" name="post-relation-post-types" value="1" /> <?php */ }
<?php /* Author of Sample : Mateus Reis mateus@laboratorio72.com skype: mateusreis */ $artists_relation = rpt_get_object_relation($id_post, 'artista'); if (count($artists_relation) >= 1) { global $post; $args = array('post_type' => 'artista', 'post_status' => 'publish', 'posts_per_page' => -1, 'showposts' => -1, 'post__in' => $artists_relation, 'orderby' => 'date', 'order' => 'DESC'); $results_artists = query_posts($args); echo '<ul>' . "\n"; foreach ($results_artists as $post) { // stuff echo '<li><a href="' . get_permalink($post) . '">' . get_the_title() . '</a></li>' . "\n"; } echo '</ul>' . "\n"; }