うーん、ちょっと文章だけでは難しいですね。。。
参考元のスレッドみたいに、パーマリンクをいったんデフォルトにもどしてみたりしても同じでしょうか?
また、試しに別のカスタム投稿タイプ[ccc]、single-ccc.php、archive-ccc.phpを作ってみた時はどうでしょう??
気になるのは
single-aaa.phpが読み込まれずindex.phpが読み込まれてしまいます。
single-aaa.phpが読めなければ、次に読まれるのはsingle.phpのはずなんですが
お使いのテーマにsingle.phpってありますか?
ないならともかく、single.phpがあるのにindex.phpが適用されるとなるとリライトルールでなにか変な設定になってるかもしれません。ちょっと確認してみてください。
たとえば固定ページとか投稿とかでaaaというスラッグのものを作ってて、パーマリンク設定次第でバッティングしてるとかということはありえるかもしれません。
ご返信ありがとうございます。
参考元を見た際にパーマリンクをデフォルトに戻してみたりしましたがダメでした。
また、カスタム投稿タイプも[aaa],[bbb],[ccc],[ddd]があるのですが[aaa]のみsingle-aaa.phpが読み込まれない状況です。
single.phpに関してもsingle-aaa.phpと同様の内容のものを作成しておいたのですがindex.phpが適用されているようです。ちなみにtaxonomy-aaa.phpは適用されています。
固定ページ、投稿でもaaaというスラッグは使っておりません。
パーマリンクはカスタム構造を使用していて
/%category%/%post_id% を指定していて
http://example.com/aaa/1.html というアドレスにはなっています。
404.phpを作成してみてページをみた場合index.phpと404.phpどちらが読み込まれますか?
404が読み込まれる場合はパーマリンクが間違っているか、後怪しいとしたら
register post typeの設定が怪しい可能性があります。
404.phpを作成してみたところ404.phpが読み込まれました。
ということはパーマリンクが間違っているということでしょうか…。
<?php while ( have_posts() ) : the_post(); ?>
<a href="<?php echo get_permalink($post); ?>"><?php the_title(); ?></a>
<?php endwhile; ?>
現在このような形で取得を行っています。
これと全く同じ処理を行っているsingle-bbb.phpは正常に機能しています。
register post typeに関しては以下の様な設定になっています。
カスタム投稿タイプ[aaa]
register_post_type(
'aaa',
array(
'label' => 'AAA',
'hierarchical' => false,
'public' => true,
'query_var' => false,
'menu_position' => 5,
'has_archive' => true,
'supports' => array('title','editor','author')
)
);
カスタム投稿タイプ[bbb]
register_post_type(
'bbb',
array(
'label' => 'BBB',
'hierarchical' => false,
'public' => true,
'query_var' => false,
'menu_position' => 5,
'has_archive' => true,
'supports' => array('title','editor','author')
)
);
get_permalink($post)はet_permalink($post->ID)だと思いますけどget_permalink($post)でもパーマリンク拾ってきたっけ?
get_permalinkで取得できるURLは投稿画面から表示されるパーマリンクと同じでしょうか?
また、/%category%/%post_id% というパーマリンク指定では
http://example.com/aaa/1.html というアドレスにならないと思うのですが何かプラグインを使ってリライトルールを変更していますか?
get_permalinkで取得できるURLは投稿画面で表示されているパーマリンクと同一です。
試しに、get_permalink($post->ID)でも試したところ結果は変わらずでした…。
パーマリンク指定ではfunction.phpにて以下のリライトルールを使用しています。
add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
global $wp_rewrite;
$queryarg = 'post_type=aaa&p=';
$wp_rewrite->add_rewrite_tag('%aaa_id%', '([^/]+)',$queryarg);
$wp_rewrite->add_permastruct('aaa', '/aaa/%aaa_id%.html', false);
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) )
return $post;
$newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
$newlink = str_replace('%'.$post->post_type.'_id%', $post->ID, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
ちょっと顔を出さない間にgogowebさんの的確なフォロー感謝です。
パーマリンク指定ではfunction.phpにて以下のリライトルールを使用しています。
犯人はこいつですね。ばっちり’aaa’だけに作用する記述…
(こういう特殊な処理を先に教えていただけると!)
元ネタはこれでしょうか。
http://webpaprika.com/387.html
カスタム投稿タイプのパーマリンクでpost_idを使いたい場合ですが、
各種同様のネタを扱っている日本語のブログの中で、以下の記事が一番細かなところまで説明してくれている印象でした。
http://yurubu.org/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%9D%E3%82%B9%E3%83%88%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E6%8A%95%E7%A8%BFid%E3%81%AB%E3%81%99%E3%82%8B/
ココでのポイントは ‘rewrite’ オプションですかね。
with_front を false にしないと、先のパーマリンク設定の影響を受けて /blog/news となってしまいます
この辺りのケアが不足していて404になっているのかなと。
ちなみに、k_arunoさんが貼ってくださったfunction.phpの記述を自分の環境でも適用したら、404.phpが適用されました。
その後、上記記事の通りにwith_frontをfalseにしたら、リライトルールの書き換えはうまくいきました。(パーマリンクを空更新するかflush_rewrite_rulesを実行するのをおわすれなく)
mypacecreator様、gogoweb様
無事解決することができました!
おっしゃる通りfunction.phpのリライトルールが原因でした…。
よく見直していたつもりでしたが一箇所’aaa’→’aaa ‘と半角スペースが入っていました。
こんな初歩的なケアレスミスで振り回してしまい申し訳ありませんでした。
元ネタはズバリです!