• Resolved salocined

    (@salocined)


    I successfully get the connected articles on a normal loop.
    On some page, I have a an option to select the first letter to be able to drill down article via this alphabetical letter (A,B,C etc..)
    so in my wp_query, i do
    'query' => $wp_query) ;
    or
    'query' => $wp_query,'startswith'=>$theletter) ;

    When using first query, I get all the connected.
    If i start to drill down, ie Selecting A, then only the first record get the connection displayed.

    So if in first query i had 3 results with 3 connection each, in my second it will return the 3 results but only with the connections of the first one.

    This is the code I use now to get connected
    p2p_type( 'posts_to_destinations','posts_to_posts' )->each_connected( $wp_query, array(), 'articles' );

    This is the previous code I used

    remove_filter( 'posts_where', 'startswithaction' );
     $the_query = null;
     $the_query = new WP_Query( array(
     'suppress_filters' => false,
     'post_type' => array( 'post', 'destination'),
     'connected' => $post->ID
    ) );

    http://wordpress.org/extend/plugins/posts-to-posts/

Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Author scribu

    (@scribu)

    p2p_type( 'posts_to_destinations', 'posts_to_posts' )

    The second parameter is ignored. You can query multiple connection types simultaneously only by using WP_Query.

    Thread Starter salocined

    (@salocined)

    ok, so I changed it to
    p2p_type('posts_to_destinations' )->each_connected( $wp_query, array(), 'articles' );
    and it still works on the first listing, but then when I drill down via a letter, not all connection are found.

    this is my wp_query

    if( !empty($theletter) ) {
    $args = array( 'post_type' => 'destination','paged' => $paged,  'posts_per_page' => $listitems ,'order' => 'ASC', 'orderby' => 'title', 'query' => $wp_query,'startswith'=>$theletter) ;
    }else{
    $args = array( 'post_type' => 'destination','paged' => $paged,'posts_per_page' => $listitems ,'order' => 'ASC', 'orderby' => 'title', 'query' => $wp_query) ;
     }

    the second one works, but when $theletter is in action, only the first item (if there is any connection) will pick up its connection, none other down the list…

    Thread Starter salocined

    (@salocined)

    In the same type of problem, on a different page, I display the connected page depending on a selection from a select (id)

    so I have

    $selected = $_GET["optid"];
    $args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
    		'taxonomy' => 'authortype',
              	'field' => 'slug',
              	'terms' => 'logs'
              )
             ),
                        'paged' => $paged,
                        'posts_per_page' => $listitems ,
                        'order' => 'DESC',
                        'orderby' => 'title',
                        'query' => $wp_query,
                        'connected_type' => 'posts_to_posts',
                        'connected_items' => $selected
                        ) ;

    not returning ANY connection via the $selected chosen

    Plugin Author scribu

    (@scribu)

    You have to keep in mind that I don’t know all the details of your setup. For example, I have no idea what 'query' => $wp_query does.

    Like I said in the email, you’ll need to give me some steps to reproduce. For example:

    1) Use this code to register these post types and these connection types.
    2) Use this code to handle ‘startswith’.
    3) Run this query with this kind of post id.

    etc.

    Note that you’ll probably want to use https://gist.github.com/ for this, since it will likely be a lot of code.

    Thread Starter salocined

    (@salocined)

    Ok, here we go again,
    I have created a Gist with my CPT and the code used to run the listing.
    See https://gist.github.com/2281398

    The Query works, but when a letter is selected, ie from the alphabet, only the first item in the list will have its connection displayed, ie the icon.

    To clarify.
    Normal query
    – Item 1 – Icon connection display
    – Item 2 – Icon connection display
    – Item 3
    – Item 4 – Icon connection display

    Start with query
    – Item 1 – Icon connection display
    – Item 2
    – Item 3
    – Item 4

    In my previous code, to get connected, I used
    `global $post;
    remove_filter( ‘posts_where’, ‘startswithaction’ );
    $the_query = null;
    $the_query = new WP_Query( array(
    ‘suppress_filters’ => false,
    ‘post_type’ => array( ‘post’, ‘destination’),
    ‘connected’ => $post->ID
    ) ); `

    hope you can help/

    Plugin Author scribu

    (@scribu)

    So, you’re saying that $wp_query returns the exact same posts in both cases, but that in the second case, each_connected() doesn’t work properly.

    You still haven’t added the code that handles ‘startswith’, i.e. startswithaction().

    Thread Starter salocined

    (@salocined)

    yes $wp_query returns the exact same posts.
    and yes in second case doesn’t work properly

    add_action( 'posts_where', 'startswithaction' );
    function startswithaction( $sql ){
        global $wpdb;
        $startswith = get_query_var( 'startswith' );
    
        if( $startswith ){
            $sql .= $wpdb->prepare( " AND $wpdb->posts.post_title LIKE %s ", $startswith.'%' );
        }
    
        return $sql;
    }
    Plugin Author scribu

    (@scribu)

    Oh, I know what’s going on. The ‘startswithaction’ is applied to the WP_Query call from each_connected() too, since you’re using get_query_var().

    Correct code:

    add_action( 'posts_where', 'startswithaction', 10, 2 );
    function startswithaction( $sql, $wp_query ){
        global $wpdb;
        $startswith = $wp_query->get( 'startswith' );
    
        if( $startswith ){
            $sql .= $wpdb->prepare( " AND $wpdb->posts.post_title LIKE %s ", $startswith.'%' );
        }
    
        return $sql;
    }

    Told you it wasn’t a bug in P2P. 😉

    Thread Starter salocined

    (@salocined)

    yeap that fixed it nicely…
    thx very much again

    BELIEVE in the P2P

    😉

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘[Plugin: Posts 2 Posts] Startswith in WP_Query’ is closed to new replies.