web-dev-qa-db-ja.com

カスタム投稿タイプの動的分類法を使用したカスタムパーマリンク - 機能するが、他のパーマリンクを解除する

動的分類法を使用した私のカスタムパーマリンクは、私のカスタム投稿タイプに対して機能しています。しかし、それは私の他のすべてのパーマリンクを壊します。コンテンツ領域に404エラーが表示されます(ヘッダーとサイドバーは表示されたままです)。

カスタム投稿タイプの動的パーマリンクを作成するには、次のコードを使用しました。

/*Adds Custom Permalinks for Course Segments*/
function custom_post_link($post_link, $id = 0)
{
  $post = get_post($id);

  if(!is_object($post) || $post->post_type != 'course-segment')
  {
    return $post_link;
  }
  $course = 'course-segment';

  if($terms = wp_get_object_terms($post->ID, 'course'))
  {
    $course = $terms[0]->slug;
  }
  return str_replace('%course%', $course, $post_link);

  return $post_link;
}

add_filter('post_type_link', 'custom_post_link', 1, 3);

私はまた私のcreate_post_type()関数に以下を追加しました:

'rewrite' => array('slug' => '%course%')

https://stackoverflow.com/questions/7723457/wordpress-custom-type-permalink-containing-taxonomy-slug :.

次の2行のコードをコメントアウトするだけで、以前のパーマリンクは機能しますが、もちろん私の動的パーマリンクは機能しません。

//add_filter('post_type_link', 'custom_post_link', 1, 3);


//'rewrite' => array('slug' => '%course%')

Settingsでは、私のパーマリンクは%postname%に設定されています。

通常のパーマリンクと動的カスタム投稿タイプのパーマリンクの両方を機能させる方法についての考えや洞察は、最も感謝されるでしょう。 -マーク

2
Mark Rummel

あなたがWordPress 3.0.1以降を実行しているなら、私はあなたの問題が 'post_type_link'フィルタ宣言と関数引数にあると信じます。

'post_type_link'フィルタが適用されると、次の4つの引数を渡します。

apply_filters('post_type_link', $post_link, $post, $leavename, $sample);

しかし、あなたの関数は$ post_linkと$ idを受け入れます。

以下の調整を試してください。

function custom_post_link( $post_link, $post ) {

    if ( $post->post_type != 'course-segment')
        return $post_link;

    $course = 'course-segment';
    if( $terms = wp_get_object_terms( $post->ID, 'course' ) )
        $course = $terms[0]->slug;

    return str_replace( '%course%', $course, $post_link );

}
add_filter( 'post_type_link', 'custom_post_link', 1, 2 );
2
Rachel Carden

レイチェルは正しいです。問題はフィルタではありません。それを完全に削除しても、カスタム投稿タイプのスラッグとして%taxonomy%(パーセント記号付き)があるため、問題は依然として発生します。

私はタグなし(パーセント記号なし)を使ってみましたが、それ以外はすべてうまくいきますが、それから分類法で完全に置き換えることはできません - つまり、同じフィルタでは捕捉されません。

だから交換はどういうわけか私には理解できない他のことが起こっています。

私はCPTにパーマリンクの分類と他の投稿/ページを同時に表示させることはできません。どちらかです。

Wpがpage/subpageの前にtaxo/postnameを探すことや、404を返す前に両方を試していないことと関係があると思いますが、私にとっては高度すぎるものです。

この部分は動作します(投稿のみ)

global $wp_rewrite;
$wp_rewrite->extra_permastructs['listing'][0] = "%listing_type%/%postname%";
    add_rewrite_rule("([^/]+)/([^/]+)/?$", 'index.php?post_type=listing&listing_type=$matches[1]&name=$matches[2]', 'bottom');
    add_rewrite_rule("([^/]+)/([^/]+)/?$", 'index.php?post_type=listing&listing_type=$matches[1]&page=$matches[2]', 'bottom');

上記のコード(CPT定義関数内)は投稿のみを修正しましたが、ページ(2番目のadd_rewrite_rule行が意図していたもの)はまだ壊れています。

私の詳細はこちら.

パーマリンクの動的分類法により、他のすべての投稿が見つかりませんでしたか? 残念ながら、この質問を以前に見つけたことがないか、投稿したことがありません。

任意のアイデアが高く評価されます

0
sergio