web-dev-qa-db-ja.com

デフォルトのカスタム投稿タイプのURLを表示または非表示にしますか。

いくつかのカスタム投稿タイプがあり、そのデフォルトURLを完全に非表示にしたり、拒否したりします。だから、たとえば、私はorganizationと呼ばれるカスタム投稿タイプを持っています、そして書き直さないでurlはこのように見えます:

http://example.com/?organization=my-org-name

分類タグとカスタム投稿タイプを組み合わせた、かなり複雑で実用的な書き換え構造を用意しているので、ユーザーは次のようなURLを使用できます。

http://example.com/AL/organization/my-org-name
http://example.com/CA/organization/my-org-name

問題の投稿にアクセスするなど。すべてうまくいきます。デフォルトのURLにアクセスしたときに何も表示されたくないのです。私はXMLサイトマップの生成がどういうわけかデフォルトを採用していることに気付いたとき、私はこれについて心配し始めました。私はそれがなくなっていってほしいのですが、私の書き換え構造の外では決して見つけられませんでした。

更新:

私はちょうどこれを加えてこれを考え出したと思います:

  ,'publicly_queryable' => false

私の登録投稿タイプコードに。これはそれらのページが少なくともロードされるのを防ぎますが、XMLサイトマップに現れる恐ろしいURLを解決するために何もしません。

アップデート2:

これらのデフォルトURLを他のものに書き換える必要がないかどうか疑問に思い始めていますが、それはURLをチェックし、ルックアップを行い、その後最初の可能な分類タグのみを返すことを意味します。

1
Stephen

さて、私はついにそれを考え出しました。同じアイテムに複数のロケーションタグがある場合は妥協しなければなりませんでしたが、それがどのように機能するかについては非常に満足しています。

最初に、私は以下のようにパーマリンク構造を変更しなければなりませんでした(ありがとうMilo):

function get_real_link_please( $url, $post ) {
    if ( $post->post_type == 'organization' ){
    $loc_list = wp_get_post_terms($post->ID, 'my_locations');
    $location = $loc_list[0]->slug; //get first item in case there is more than one
    return home_url( $location . '/organization/' . $post->post_name, $url );
    }
    return $url;
}
add_filter( 'post_type_link', 'get_real_link_please', 10, 2 );

そして、私は私の書き換え規則がそれを説明していることを確認しなければなりませんでした:

add_action( 'init', 'cpt_rewrite_link' );

function cpt_rewrite_link(){
       add_rewrite_rule( '([^/]+)/([^/]*)/([^/]*)/', 'index.php?my_locations=$matches[1]&post_type=$matches[2]&name=$matches[3]', 'top' );

}

そして最後に(非常に重要です)、私のcptが実際に公に問い合わせ可能であることを確認しなければなりませんでした。

  ,'publicly_queryable' => true

私が幸せになる唯一のことは、私が複数の場所に複数のパーマリンクを持つ方法を見つけることができた場合ですが、他のリンクはうまくいくので、最初の場所を「公式」のものにするのは良いことです。これが他の誰かに役立つことを願って、それは熊だった。

0
Stephen