2016-12-19 23 views
2

私はタクソノミーproduct-typeのカスタムポストタイプ(製品)を持っています。
http://www.naturesbioscience.com/product-type/immune-support-supplements/
私は、これはのようにしたい:
http://www.naturesbioscience.com/immune-support-supplements/カスタム投稿タイプのURLからタクソノミースラッグを削除するには?

私は"rewrite" => array('slug' => '/ ', 'with_front' => falseregister_taxonomy機能を使用していると私はのようなURLを持って:このような私のURLのひとつ
http://www.naturesbioscience.com/immune-support-supplements/
しかし、私他のページに404が見つかりませんでした。

誰でも手伝ってもらえますか?

答えて

1

あなたはカスタムタクソノミをポストスラッグに書き換えるのを忘れたと思います。
これをあなたのregister_post_typeに書いてください。

'rewrite' => array('slug' => 'product-type') 

今、あなたはあなたが教えてくれているので、WordPressのページまたはポストとそれに一致するようにしようとしますので、今、カスタムポストタイプのスラッグを削除したとして、あなたのカスタム製品

/** 
* Remove the slug from published post permalinks. 
*/ 
function custom_remove_cpt_slug($post_link, $post, $leavename) 
{ 
    if ('product-type' != $post->post_type || 'publish' != $post->post_status) 
    { 
     return $post_link; 
    } 
    $post_link = str_replace('/' . $post->post_type . '/', '/', $post_link); 

    return $post_link; 
} 

add_filter('post_type_link', 'custom_remove_cpt_slug', 10, 3); 

からproduct-typeスラグを削除する必要がありますあなたのカスタム投稿タイプのURLもチェックするWP。だから、そのためにこれを使用します。

function custom_parse_request_tricksy($query) 
{ 
    // Only noop the main query 
    if (!$query->is_main_query()) 
     return; 

    // Only noop our very specific rewrite rule match 
    if (2 != count($query->query) || !isset($query->query['page'])) 
    { 
     return; 
    } 

    // 'name' will be set if post permalinks are just post_name, otherwise the page rule will match 
    if (!empty($query->query['name'])) 
    { 
     $query->set('post_type', array('post', 'product-type', 'page')); 
    } 
} 

add_action('pre_get_posts', 'custom_parse_request_tricksy'); 

参考:Remove The Slugs from Custom Post Type URL

ホープ、このことができます!

+0

私の単一の製品URLはhttp://www.naturesbioscience.com/product/vascuvite/で、製品カテゴリurlはhttp://www.naturesbioscience.com/です。製品タイプ/免疫支援補助剤/。私は、製品カテゴリのURLから製品タイプ(タクソノミ)を削除する必要があります。 – InsightCoders

0
add_filter('post_type_link', 'change_product_request', 10, 3); 

function change_product_request($post_link, $post, $leavename) { 

     if ('product' != $post->post_type || 'publish' != $post->post_status) { 
      return $post_link; 
     } 

     $post_link = str_replace("/{$post->post_type}/" , '/', $post_link); 

     return $post_link; 
} 

WordPressは投稿とページがこのように動作することを許可するので、404ページが表示されます。

add_action('pre_get_posts', 'product_permalink'); 

function product_permalink($query) { 

    if (! $query->is_main_query()) { 
      return; 
     } 
     if (2 != count($query->query) || ! isset($query->query['page'])) { 
      return; 
     } 

     if (! empty($query->query['pagename'])) { // name has been updated to pagename so $query->query['pagename'] 

      global $wpdb; 
      $pt = $wpdb->get_var(
       "SELECT post_type FROM `{$wpdb->posts}` " . 
       "WHERE post_name = '{$query->query['pagename']}'" 
      ); 
      $query->set('post_type', $pt); 
     } 

     return $query; 
} 
関連する問題