WordPress.org

Ready to get started?Download WordPress

Forums

[resolved] Navigation between custom post types (11 posts)

  1. tradiart
    Member
    Posted 3 years ago #

    Hello,

    I need to navigate between custom post types, only into a custom taxonomy.

    When I try to use...

    previous_post_link( '%link', '<span class="meta-nav">' . _x( ' ‹ ', 'Previous post link', 'twentyten' ) . '</span> %title', TRUE );

    The line doesn't appear. This line of code is taken from TwentyTen and I have added the TRUE parameter in order to only navigate between the same custom taxonomy.

    Any idea of how can this be done?

    Thank you very much!

  2. iwanttobelieve
    Member
    Posted 3 years ago #

    I have to second this, I can't make this to work either. When I turn on the debug, there's an SQL error reported by WordPress made by those two functions. The feed does not list items having custom post type either...

  3. iwanttobelieve
    Member
    Posted 3 years ago #

    I think I have found the solution, it looks like WordPress developers didn't add a custom post type check to get_adjacent_post. We might get around using filter fortunately. If anyone's interested I will post the filter.

  4. tradiart
    Member
    Posted 3 years ago #

    Thank you very much for your answer.

    Will be nice to know the solution, as I suppose that navigate between custom post types will be useful when using WordPress as CMS.

    iwanttobelieve, your help is really appreciated in advance. Thank you!

  5. iwanttobelieve
    Member
    Posted 3 years ago #

    First of all, in order to make this work, you must hack into the core file wp-includes/link-template.php. Find $posts_in_ex_cats_sql = "AND tt.taxonomy = 'category'"; and change it to: $posts_in_ex_cats_sql = ''; It's not that we can't create a filter, it's just too troublesome to do so, trust me. Also, this filter is designed for ppl who don't have excluded_categories, if you have, tell me and I will provide another filter.

    Okay, we need 1 filter, assuming that you have already been familiar with creating plugin, I will just post the filter, ok?

    function get_custom_adjacent_post_join($join, $in_same_cat)
    		{
    			global $post, $wpdb;
    
    			// we don't process empty post and default post types
    			if (empty($post) || in_array($post->post_type, array('post', 'page', 'attachment', 'revision', 'nav_menu_item')))
    				return $join;
    
    			// here we specify custom post types and their corresponding taxonomies
    			$taxonomies = array(
    				'your_custom_post_type'	=> 'your_taxonomy'
    			);
    
    			$current_taxonomy = $taxonomies[$post->post_type];
    
    			if ($in_same_cat) {
    			$join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";
    
    			if ( $in_same_cat ) {
    				$cat_array = wp_get_object_terms($post->ID, $current_taxonomy, array('fields' => 'ids'));
    				$join .= " AND tt.taxonomy = '$current_taxonomy' AND tt.term_id IN (" . implode(',', $cat_array) . ")";
    			}
    			}
    			return $join;
    		}

    In somewhere of your plugin, type:
    add_filter('get_previous_post_join', 'get_custom_adjacent_post_join', 10, 2);
    add_filter('get_next_post_join', 'get_custom_adjacent_post_join', 10, 2);

    Please note this line:
    $taxonomies = array('your_custom_post_type' => 'your_taxonomy');

    If you would like a movie post type and a Director as taxonomy, you would change it to:
    $taxonomies = array('movie' => 'director');
    In case you need to add more, simply add another item for that array.

    Hope that will help!

  6. tradiart
    Member
    Posted 3 years ago #

    iwanttobelieve thank you very much for your assistance.

    Is possible to define this function in functions.php file? I'm not really used to create plugins for WP and the process confuses me a little.

    Also, will be fine to insert this code:

    add_filter('get_previous_post_join', 'get_custom_adjacent_post_join', 10, 2);
    add_filter('get_next_post_join', 'get_custom_adjacent_post_join', 10, 2);

    in the template?

    Thank you!

  7. iwanttobelieve
    Member
    Posted 3 years ago #

    It actually depends on your installation, however that should be fine in most cases. You can either put them both in functions.php or filter in functions.php and add_filter in template, it will work :).

  8. tradiart
    Member
    Posted 3 years ago #

    I hope to get this work one day :-D

    Thank you very much for your assistance.

  9. tradiart
    Member
    Posted 3 years ago #

    I have been able to solve this using the Ambrosite Next/Previous Post Link Plus.

    Thank you for your assistance.

  10. henryleo
    Member
    Posted 3 years ago #

    @iwanttobelieve:
    I have tried using your filter and am getting the following error...

    implode() [function.implode]: Invalid arguments passed in /home/blah/blah/blah/myurl/functions.php

    its this line that seems to be the issue:
    $join .= " AND tt.taxonomy = '$current_taxonomy' AND tt.term_id IN (" . implode(',', $cat_array) . ")";

    I noticed that @tradiart solved his initial problem using the Ambrosite Next/Previous Post Link Plus plug-in, but that is also cause me problems. So could you please advise me as to what I might need to change in order to get this to work. thank you in advance!

  11. ambrosite
    Member
    Posted 3 years ago #

    I have updated my plugin to work with custom taxonomies. Details on the fix are posted in this thread:

    http://wordpress.org/support/topic/plugin-ambrosite-nextprevious-post-link-plus-seeking-beta-testers

Topic Closed

This topic has been closed to new replies.

About this Topic