Wordpress 自定义帖子类型 - 相同的帖子名称,不同的帖子类型 [英] Wordpress Custom Post Type - Same Post Name, Different Post Type

查看:37
本文介绍了Wordpress 自定义帖子类型 - 相同的帖子名称,不同的帖子类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 4 种自定义帖子类型:

I have 4 Custom Post Types:

服务常见问题价格之前和之后

Services FAQs Prices Before and After

我希望能够在每种帖子类型中使用相同的帖子名称,例如:

I want to be able to have the same post names within each of these post types, example:

服务
皮肤 (example.com/Services/skin)
奶油(example.com/Services/cream)
正文(example.com/Services/body)

Services
Skin (example.com/Services/skin)
Cream (example.com/Services/cream)
Body (example.com/Services/body)

常见问题
皮肤 (example.com/FAQs/skin)
奶油(example.com/FAQs/cream)
正文(example.com/FAQs/body)

FAQs
Skin (example.com/FAQs/skin)
Cream (example.com/FAQs/cream)
Body (example.com/FAQs/body)

价格
皮肤 (example.com/Prices/skin)
奶油(example.com/Prices/cream)
正文(example.com/Prices/body)

Prices
Skin (example.com/Prices/skin)
Cream (example.com/Prices/cream)
Body (example.com/Prices/body)

之前和之后
皮肤 (example.com/before-and-after/skin)
奶油(example.com/before-and-after/cream)
正文(example.com/before-and-after/body)

Before and After
Skin (example.com/before-and-after/skin)
Cream (example.com/before-and-after/cream)
Body (example.com/before-and-after/body)

我该怎么做?现在,如果我创建一个与当前帖子同名的新帖子,它会在帖子 slug 的末尾添加一个-2"或-3":

How can I do this? Right now if I make a new post with the same name as a current one, it adds a "-2" or "-3" to the end of the posts slug:

糟糕:

example.com/services/body

example.com/services/body

example.com/faqs/body-2

example.com/faqs/body-2

example.com/prices/body-3

example.com/prices/body-3

example.com/before-and-after/body-4

example.com/before-and-after/body-4

请有人帮忙!!!!!!

SOMEONE PLEASE HELP!!!!!

add_action('init', 'create_post_type_html5'); // Add our HTML5 Blank Custom Post Type
function create_post_type_html5()
 {
  register_taxonomy_for_object_type('category', 'html5-blank'); // Register Taxonomies for Category
register_taxonomy_for_object_type('post_tag', 'html5-blank');
register_post_type('html5-blank', // Register Custom Post Type
    array(
    'labels' => array(
        'name' => __('Services', 'html5blank'), // Rename these to suit
        'singular_name' => __('Services', 'html5blank'),
        'add_new' => __('Add New', 'html5blank'),
        'add_new_item' => __('Add New Services', 'html5blank'),
        'edit' => __('Edit', 'html5blank'),
        'edit_item' => __('Edit Services', 'html5blank'),
        'new_item' => __('New Services', 'html5blank'),
        'view' => __('View Services', 'html5blank'),
        'view_item' => __('View Services', 'html5blank'),
        'search_items' => __('Search Services', 'html5blank'),
        'not_found' => __('No Servicess found', 'html5blank'),
        'not_found_in_trash' => __('No Service\'s found in Trash', 'html5blank')
    ),
    'rewrite' => array('slug' => 'service','with_front' => true),
    'public' => true,
    'hierarchical' => true, // Allows your posts to behave like Hierarchy Pages
    'has_archive' => true,
    'supports' => array(
        'title',
        'editor',
        'excerpt',
        'thumbnail'
    ), // Go to Dashboard Custom HTML5 Blank post for supports
    'can_export' => true, // Allows export in Tools > Export
    'taxonomies' => array(
        'post_tag',
        'category'
    ) // Add Category and Post Tags support
));


 }

推荐答案

我编写了一个函数,可以添加到您主题的functions.php 文件中,该文件包含 mboynes 在这张票中编写的补丁:http://core.trac.wordpress.org/ticket/18962#comment:14

I wrote a function that can be added to your theme's functions.php file that includes the patch written by mboynes in this ticket: http://core.trac.wordpress.org/ticket/18962#comment:14

function wp_cpt_unique_post_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
    if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )
        return $slug;

    global $wpdb, $wp_rewrite;

    // store slug made by original function
    $wp_slug = $slug;

    // reset slug to original slug
    $slug = $original_slug;

    $feeds = $wp_rewrite->feeds;
    if ( ! is_array( $feeds ) )
        $feeds = array();

    $hierarchical_post_types = get_post_types( array('hierarchical' => true) );
    if ( 'attachment' == $post_type ) {
        // Attachment slugs must be unique across all types.
        $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d LIMIT 1";
        $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ID ) );

        if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_attachment_slug', false, $slug ) ) {
            $suffix = 2;
            do {
                $alt_post_name = substr ($slug, 0, (200 - ( strlen( $suffix ) + 1 )) ) . "-$suffix";
                $post_name_check = $wpdb->get_var( $wpdb->prepare($check_sql, $alt_post_name, $post_ID ) );
                $suffix++;
            } while ( $post_name_check );
            $slug = $alt_post_name;
        }
    } elseif ( in_array( $post_type, $hierarchical_post_types ) ) {
        if ( 'nav_menu_item' == $post_type )
            return $slug;
        // Page slugs must be unique within their own trees. Pages are in a separate
        // namespace than posts so page slugs are allowed to overlap post slugs.
        $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1";
        $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID, $post_parent ) );

        if ( $post_name_check || in_array( $slug, $feeds ) || preg_match( "@^($wp_rewrite->pagination_base)?\d+$@", $slug ) || apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent ) ) {
            $suffix = 2;
            do {
                $alt_post_name = substr( $slug, 0, (200 - ( strlen( $suffix ) + 1 )) ) . "-$suffix";
                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID, $post_parent ) );
                $suffix++;
            } while ( $post_name_check );
            $slug = $alt_post_name;
        }
    } else {
        // Post slugs must be unique across all posts.
        $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d LIMIT 1";
        $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID ) );

        if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_flat_slug', false, $slug, $post_type ) ) {
            $suffix = 2;
            do {
                $alt_post_name = substr( $slug, 0, (200 - ( strlen( $suffix ) + 1 )) ) . "-$suffix";
                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID ) );
                $suffix++;
            } while ( $post_name_check );
            $slug = $alt_post_name;
        }
    }

    return $slug;
}
add_filter('wp_unique_post_slug', 'wp_cpt_unique_post_slug', 10, 6);

这篇关于Wordpress 自定义帖子类型 - 相同的帖子名称,不同的帖子类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆