How to list posts of Parent with Depth = 1
-
Nice plugin!
We have this installed, using a few different post types. We have custom post types set up, with Hierarchy turned on. (Essentially, this allows us to move a giant number of pages out of the “Pages” section for easier CMS – ex. “Departments” for a county website with 30+ departments, each having their own subpages).
We need to be able to display a list of posts (title, permalink) of a given post type, with parent, ordered alphabetically, depth = 1.
In other words, we need to do exactly this, but for Custom Post Types:
wp_list_pages ('child_of=15&depth=1&sort_column=post_title&sort_order=asc');
Custom Post Types won’t work with the wp_list_pages … and we have tried a number of plugins to display posts of a certain type – but cannot get them to work with the hierarchical structure (depth=1).
Suggestions would be greatly appreciated!
-
I don’t know how php skilled you are, so let me know if you need some more help with this.
I have this custom function for you, and it creates a new WP_Query and returns that object. Rename the function to whatever you need.
function jessi_custom_query( $args = '' ) { $query_args = wp_parse_args( $args, array() ); $query = new WP_Query( $query_args ); return $query; }
You can pass in similar arguments like you can with wp_list_pages, but they will need to match the arguments for the WP_Query class. http://codex.wordpress.org/Class_Reference/WP_Query
So, for example, we have the code below. Fill in the fields as necessary.
$foobar = jessi_custom_query( 'post_type=departments&post_parent=15&orderby=title&order=ASC' );
$foobar will be the WP_Query object, and you’ll need to loop over it in a way similar to the examples in the WP_Query codex page.
Thank you for your reply! I was stuck for a bit but got this to work!
Here’s my code – hopefully it helps someone else 🙂
In functions.php I added:
function dept_query( $args = '' ) { $query_args = wp_parse_args( $args, array() ); $query = new WP_Query( $query_args ); return $query; }
And then in my template file I’ve added:
<?php // the query $listdepartments = dept_query( 'post_type=departments&post_parent=14&orderby=title&order=ASC&depth=1&posts_per_page=-1' ); // The Loop if ( $listdepartments->have_posts() ) { echo '<ul>'; while ( $listdepartments->have_posts() ) { $listdepartments->the_post(); echo '<li><a href="'; the_permalink(); echo '">'; the_title(); echo '</a></li>'; } echo '</ul>'; } else { _e( 'Sorry, no posts matched your criteria.' ); } /* Restore original Post Data */ wp_reset_postdata(); ?>
Thank you so much. I really appreciate your help!
Thank you so much. I really appreciate your help!
Welcome.
Hi Michael and Jessi,
By finding this great post I came close to the solution, but not yet completely.
I have an archive page that lists only the parent posts. I created the custom post type with your plugin custom post type UI. As my site works on headway them and I control my css and visual styling from there, is there anything you can suggest?
FredW, what’s the actual issue you’re running into? You never specify that part.
I am not that experienced with developing websites, so I try my best to explain this well:
http://fourhourbody.nl/kennisbank/ this is my custom post type archive page
it currently lists both parent and child pages, and I only want this archive page to display parent pages.
As I understand it, the listing of the posts here is generated by some code like wp_list_pages ( something )
Now my problem is, I don’t know how to adapt the existing list as such that the layout (including the custom bullet points) do not change, but only that the parent pages are listed. As I am using Headway themes to create my website, I assume that the function.php is ‘generated’ by Headway, and I think I have to create a child theme and then add or eliminate some code to make this adaption? I rather solve this within Headway without changing code or creating a child theme. Is this possible?
Hopefully I expressed this clear enough:)
The code snippets above that I typed up just mimic how wp_list_pages accepts query arguments.
What you need is to set your query arguments to only query for top level posts by setting
post_parent
to 0http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters
I definitely recommend a child theme when possible, but you could create your own little plugin as well as necessary.
Can you tell me where exactly I can set the query argument to only query for top level posts? I have to say I do not know which file in Filezilla contains the code that generates the custom post type archive page?
The template file is probably generated by Headway Theme as Headway is a ‘drag and drop’ theme with an interface. I have very limited coding skills.
An alternative solution which I tried is that I actually got the menu to work by inserting a ‘custom code block’ within Headway containing the following code
<h1> Kennisbank</h1><p></p> <?php $args = array( 'depth'=> 1, 'post_type'=>'kennisbank', 'title_li'=> __('Kennisbank') ); wp_list_pages( $args ); ?>
However, this results in a list without styling and where it is not ‘visually integrated’ with the other pages of my website. I looked on ‘styling wp_list_pages’ with css, but I don’t have any clue.
Any input from your side would be great. Thanks a lot for your posting:)
PS. This is the link to my custom post type archive page: http://bit.ly/1wG3IQs
You can see from the child article pages of my custom post type ‘kennisbank’ how the page shoud visually look.
The link I provided in my last reply is for when interacting with arguments for a new WP_Query instance directly, instead of with trying to use wp_list_pages.
It’d be one of the parts passed in to the code in this reply example https://wordpress.org/support/topic/how-to-list-posts-of-parent-with-depth-1?replies=10#post-5873879
You would then loop over the resulting variable you assign as if it were “The Loop”, and could control the markup/output as much as you wanted.
- The topic ‘How to list posts of Parent with Depth = 1’ is closed to new replies.