Custom Post Type Admin Post Status Not Working - wordpress

For the life of me, I can not figure this out.
I set up a custom post type in WordPress like so:
register_post_type( 'myposttype',
array(
'labels' => array(
'name' => __( 'MyPostTypeName' ),
'singular_name' => __( 'MyPostTypeName' )
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'custom-fields')
)
);
When I first started I added add_filter( 'map_meta_cap', 'my_map_meta_cap', 10, 4 ); with some basic capabilities. I think I may have set that part up wrong, but I quickly got rid of it and returned the post type to normal capabilities.
Now whenever I try to access the custom post type in my admin, I run into some weird problems. Namely, no matter what Post status I click on (Published, Drafts, Private, etc.) I only get published posts. Also sorting the columns and other similar admin functions don't work at all. It's like edit.php is completely broken, but only for this specific custom post type. It works just fine on all other custom post types.
I've tried everything, right down to deleting every mention of the custom post type from the admin panel and then trying to register it again, and nothing works. I really need to keep the slug from the custom post type the same, but I'd be open to registering a new post type, moving posts over and then changing the slug I just can't figure out a good way to do it.
Anyway, I'd appreciate any help in figuring out how to fix the custom post type admin panel.
Thanks

Do you have a "posts_orderby" filter added anywhere?

Related

WordPress archive/taxonomy location

I'm struggling with this, despite being okay at WordPress dev.
I've created a custom post type called links
I've also created a custom taxonomy called link-type
All works fine when using archive.php in the root of the theme.
However I want links to be a child page of resources so:
example.com/links/ would become example.com/resources/links/
And clicking on a taxonomy term link for example downloads would take you to example.com/resources/links/downloads/
I'm aware of has_archive and rewrite and with_front and slug but can't understand how to use these to achieve the aforementioned structure.
As always, expert help is much appreciated.
When you register your post type, just add whatever you want to the slug in the rewrite argument, forward slashes are acceptable in slugs.
$args = array(
'labels' => $labels,
...
'rewrite' => array(
'slug' => 'resources/links',
'with_front' => true
),
);
This will give you https://example.com/resources/links/, even if you have a page already at https://example.com/resources/.
I almost forgot, you'll need to make sure your flush your rewrite rules (this can be done programatically when the CPT is registered, or you can just go to your Settings > Permalinks option page and click Save Changes to accomplish the same thing one time.

Custom Post Types with Parent Pages - best practice

I am working on a site with product categories and individual products organized like this:
product category 1
product
product
product
product category 2
product
etc...
It was suggested to me that the best way to do organize the individual products was to create a custom post type for products. The product categories are currently pages.
So now I am trying to figure out the best way to connect a product custom post type with its particular product category page (so that url structure can be "/product_category/product/").
I am sure there is a smart and efficient way to do this, but I'm not seeing it. I was thinking that I could add categories to the pages and CPT's - but that isn't quite the effect that I want because I don't want them to only be accessible as archive pages. Is that actually a problem?
Sorry that this is such a broad question - I can get it to work but am sure that my first try would not be the best way, so I am just looking for some pointers or examples from people who have done this before to steer me in the right direction.
Thanks in advance, any help appreciated.
You can use Custom Taxonomies.
function product_categories_init() {
register_taxonomy(
'product-category',
'product', // Or 'post', whatever the custom post type is
array(
'label' => __( 'Product Categories' ),
'rewrite' => array( 'slug' => 'product-categories' ),
'hierarchical' => false,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
)
);
}
add_action( 'init', 'product_categories_init' );
This is a simple example. You'll have to check out the options in the reference link. But it is essentially your own kind of category for a post type (or an array of post types).
In the end I did get this right. Part of my problem was due to a misunderstanding about how to use categories in wordpress.
What I ended up doing was use the custom taxonomy as shown by Austin Winstanely's answer, and then refactor my page organization a little bit so that the product category was not a page post type, but a category - displayed using the category template. This makes it very convenient, because individual products in the custom post type can be associated with their product category very easily. When I asked the question I had not understood that categories could have their own template and function as web pages.
Thanks for the help!
-Alyssa

Mixing Wordpress 3.7.1 Page Templates and Custom Post Types

Overview
I have a Custom Post Type called Locations. When the user visits /locations, I would like them to see some general information about all the locations. When the user visits /location/{a-location}, I would like them to see specific information about "a-location". Sounds easy enough.
1st Solution Attempt
I created a Locations page in the Wordpress dashboard to hold the content for the /locations url. I then created an archive-locations.php file and a single-location.php. archive-locations.php pulls info out of the Locations page and it lists all of the custom post type Locations. When the user clicks on a link for a location, the user gets redirected to /locations/{a-location} and single-location.php gets called. This almost does the trick, but it just doesn't feel right and it's creating some other problems.
The Problem
When a user visits /locations I would prefer to be working with a page template for the Locations page (instead of the archive-locations.php page). I'm using the Yoast plugin to specify a custom meta title and description for each page. Since archive-locations.php is being used, all of this meta gets ignored.
2nd Solution Attempt
So I created a page-locations.php template for the Locations page and I was hoping that it would get called instead of the archive-locations.php. Unfortunately, it does not. I then tried removing the archive-locations.php thinking that maybe it was taking precedence. That didn't help either; Wordpress simply renders index.php. If I disable the Custom Post type and visit /locations, then my page template is called correctly. It looks like naming a custom post type the same name as a page causes Wordpress some issues. However, I need to be somewhat similar for the URL structures to work out. /locations needs to pull from a page template; /locations/{a-location} needs to pull from another php pfile.
Question
Is there any way to get page templates and custom post types with similar slugs to work together? If not, I guess my only option is to enhance my header.php and be smarter about determining the title and description when I'm on /locations.
Here's the code that registers my custom post type in case I'm doing something wrong:
$args = array(
'labels' => $labels,
'description' => 'Holds our location specific data',
'public' => true,
'menu_position' => 20,
'supports' => array('title', 'editor', 'thumbnail', 'page-attributes' ),
'hierarchical' => true,
'has_archive' => true,
'rewrite' => array('with_front' => false, 'slug' => 'locations') //remove /news/ from the permalink when displaying a custom post type
);
register_post_type( 'locations', $args );
(I also tried changing has_archive to false, but it didn't help.)
What you are trying to do, I once managed to get done easily. I mean having custom post type and use its slug with cusotm page.
Did you try to flush rewrite rules? (just visit Permalink page and save the rules as they are)
So I created a page-locations.php template for the Locations page and I was hoping that it would get called instead of the archive-locations.php. Unfortunately, it does not. I then tried removing the archive-locations.php thinking that maybe it was taking precedence. That didn't help either; Wordpress simply renders index.php
You do not write, how do you load your page template. Do you rely on automatic WP connection of pageslug and page-pageslug.php or you set page template through Page attributes menu?

Adding custom taxonomy to media gallery in wordpress admin

I have added a custom taxonomy to Media, which is showing up as a text field in the Media admin section. I would like this to be the typical checkbox format as it exists in the custom post type admin page. Is there a way to override this in the functions to make this custom taxonomy show in checkboxes, so the user could easily choose which image belongs to a specific taxonomy entry?
Here is the code I used to bring the taxonomy into the Media Gallery:
register_taxonomy('Categories',array('project', 'slides', 'attachment'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'categories' ),
));
In the first line, by adding 'attachment' to the array, it added the Project Categories field in the Media Gallery. Now I just need to make this a list of checkboxes containing the current taxonomy entries. Any thoughts on how to achieve this?
I found this article, but having never used filters, it was a bit perplexing as to how to make this work for me:
https://wordpress.stackexchange.com/questions/29858/adding-category-tag-taxonomy-support-to-images-media
You are most of the way there. To render a taxonomy category as a special HTML display, like a list of checkboxes, the best method is to use the built-in WordPress Walker class. It is made exactly for this sort of thing.
http://codex.wordpress.org/Function_Reference/Walker_Class
I use this very method to create a new "SLP_Tagalong" walker class that renders a list of my taxonomy categories as a list of checkboxes (I only show text names but it could easily show the marker images) whenever anyone edits a store location.
I have the modified Walker Class I can share if you would like to see it. I'd post here but it is 150 lines. Send me a PM and I'll shoot it back that way.
I am sure the walker class would have worked successfully, but looking at the codex reminded me of string theory and existentialism. The upside is with WP 3.5.1, when you associate a taxonomy to 'attachment' set to Hierarchal, the checkbox appears in the Media Library by default.
YAY!!
This may not answer the question posed thoroughly though so I will leave it open for anyone who wants to stab at this.

Wordpress Sticky Posts with Custom Post Types

So i need the ability to have a featured or "sticky" post in wordpress, and it occurred to me! Why not use the Sticky Posts facility, but after doing a bit of reading it seems that Wordpress decided to not include support for it in latest releases and they don't seem to be pushing any solution for future releases.
Now that leaves me in a predicament i wish to have the ability to have a featured post or custom post without using a category of such.
I've also seen a few people state they have hacked wordpress with possibly a function to add the ability of sticky posts to custom post types, shame they didn't share the source!
How would this be done?
You can do it with a custom field (post_meta) on the custom post type. Then fire a custom query that selects for the meta_value:
$args = array('post_type' => 'my_custom_post_type', 'post_status' => 'publish', 'meta_query' => array('relation' => 'AND', array('key' => 'is_sticky', 'value' => '1', 'compare' => '=', 'type' => 'CHAR')));
$sticky_posts = new WP_Query($args);
Should return an array of published posts of post_type: my_custom_post_type that have the sticky flag set.
Although I haven't tested the above code, I'm doing something similar and it works fine.
You can use this plugin, it has it's own limitations, but works pretty well if you don't need something elaborate.
You can save a custom meta with the name of "sticky" and add it the value "on" when the post is sticky. That can be done with a custom metabox and a checkbox.
Wordpress will automatically add the word "Sticky" on the backend posts listing table
You can retrieve a loop with your sticky custom posts by adding the values 'meta_key' => 'sticky' and 'meta_value' => 'on' to the args of your query
I posted a working solution as of WordPress 4.2 here:
https://wordpress.stackexchange.com/questions/90958/adding-sticky-functionality-to-custom-post-type-archives/185915#185915
Basically, it implies installing a small plugin and add a code snippet.
I have Wordpress 3.2.1, the latest version and I can sticky posts. It works for me on my site.

Resources