• 解決済 bjifa

    (@bjifa)


    <?php single_month_title(); ?>
    で、月別日別ページのタイトルを表示させたいのですが、12月2009 というなるので、2009年12月と表示させたいので下記のように書きました。

    2010年は正常に表示されるのですが、2009年は「?2009年」というふうに「?」の場所になぜか文字化けした文字が入ってしまいます。

    どうすれば取れますでしょうか?

    <?php $date = single_month_title('',FALSE); echo mbereg_replace('^...','',$date).'年'.mbereg_replace('....$','',$date);?>

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • トピック投稿者 bjifa

    (@bjifa)

    WordPressの「default」のテーマにちょうど、年、月、日別のタイトルの出し方があったので、その部分(以下)を

    <?php if (have_posts()) : ?>
    
    <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?>
    
    <?php /* If this is a category archive */ if (is_category()) { ?>
    <h2 class="pagetitle"><?php printf(__('Archive for the ‘%s’ Category', 'kubrick'), single_cat_title('', false)); ?></h2>
    
    <?php /* If this is a tag archive */ } elseif( is_tag() ) { ?>
    <h2 class="pagetitle"><?php printf(__('Posts Tagged ‘%s’', 'kubrick'), single_tag_title('', false) ); ?></h2>
    
    <?php /* If this is a daily archive */ } elseif (is_day()) { ?>
    <h2 class="pagetitle"><?php printf(_c('Archive for %s|Daily archive page', 'kubrick'), get_the_time(__('F jS, Y', 'kubrick'))); ?></h2>
    
    <?php /* If this is a monthly archive */ } elseif (is_month()) { ?>
    <h2 class="pagetitle"><?php printf(_c('Archive for %s|Monthly archive page', 'kubrick'), get_the_time(__('F, Y', 'kubrick'))); ?></h2>
    
    <?php /* If this is a yearly archive */ } elseif (is_year()) { ?>
    <h2 class="pagetitle"><?php printf(_c('Archive for %s|Yearly archive page', 'kubrick'), get_the_time(__('Y', 'kubrick'))); ?></h2>
    
    <?php /* If this is an author archive */ } elseif (is_author()) { ?>
    <h2 class="pagetitle"><?php _e('Author Archive', 'kubrick'); ?></h2>
    
    <?php /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
    <h2 class="pagetitle"><?php _e('Blog Archives', 'kubrick'); ?></h2>
    <?php } ?>

    を丸ごとコピペしてみたのですが、なぜかsyntax error

    どうしてでしょうか?

    月別アーカイブなら
    echo get_query_var('year').'年'.get_query_var('monthnum').'月';
    で 「2009年12月」のように表示されます。

    ※編集した 〜.php ファイルは「UTF-8」で保存してください。

    トピック投稿者 bjifa

    (@bjifa)

    kzさん、いつもありがとうございます。

    日付のデータが受け取れないようで、「0年0月」
    となってしまいます。

    <?php
    $date = single_month_title('',FALSE);
    echo get_query_var('year',$date).'年'.get_query_var('monthnum',$date).'月';
    ?>

    とか、やってみたのですがやはり駄目でした。

    どのように書けばよろしいですか?

    また、「0年0月0日」はどのように書けばよろしいでしょう?

    single_month_title は使わなくて良いです。
    get_query_var('year',$date) の書き方は誤りです。「,$date」は不要。

    get_query_var('year') で年の値が取得できます。
     ※年別,年月別,年月日別 のアーカイブの場合
    get_query_var('monthnum') で月の値が取得できます。
     ※年月別,年月日別 のアーカイブの場合
    get_query_var('day') で日の値が取得できます。
     ※年月日別 のアーカイブの場合

    というわけで
    <?php echo get_query_var('year').'年'.get_query_var('monthnum').'月'.get_query_var('day').'日'; ?>

    トピック投稿者 bjifa

    (@bjifa)

    やはり日付のデータが受け取れないようで、
    「0年0月0日」というようになってしまいます。
    なぜでしょうか?

    年別,年月別,年月日別 のアーカイブでない、とか。
    そのページのURLは
    http://example.com/2010/01/08
    な感じになってますか?

    または、

    年月日を表示する箇所より前に
    query_posts(), get_posts()
    とかなんとかしてる、とか。

    トピック投稿者 bjifa

    (@bjifa)

    http://example.com/?m=20091224
    となっています。

    条件分岐タグはありますが、

    <?php $newquery = new WP_Query('cat=-5,-6,-7 &order=desc ');
    if ($newquery->have_posts()): ?>
    <?php while ($newquery->have_posts()) : $newquery->the_post(); ?>

    を使っています。

    こちらでは問題なく表示されます。
    提示の部分コードでは問題ないです(直後に endwhile; endif; 追加で検証)。
    そのループ全部のコードはどんなでしょうか。

    header.php の title タグで
    <?php echo get_query_var('year').'年'.get_query_var('monthnum').'月'.get_query_var('day').'日'; ?>;
    としても 0 ですか?

    トピック投稿者 bjifa

    (@bjifa)

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php if(is_month()){
    echo get_query_var('year').'年'.get_query_var('monthnum').'月';
    }else if(is_day()){
    echo get_query_var('year').'年'.get_query_var('monthnum').'月'.get_query_var('day').'日';
    }
    ?><br />
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br />
    <?php the_content(); ?>
    <?php endwhile; endif; ?>

    こんな感じです。

    あと、できればループ外で使いたいのですが。

    月アーカイブのリンクをクリックしたら、月アーカイブページが開いてそのタイトルとして表示させたいのですが。

    そのループでも問題ないです(検証済)。

    header.php の title タグで
    <?php echo get_query_var('year').'年'.get_query_var('monthnum').'月'.get_query_var('day').'日'; ?>;
    をお試しください。

    追記:
    ?m=〜 のパーマリンクだと 0 ですね。調べてみます。

    トピック投稿者 bjifa

    (@bjifa)

    Kzさん、本当にありがとうございます。

    この問題の実際のサイトです。
    カレンダーからのリンクです。

    http://www.sakakiatsushi.com/

    パーマリンクがデフォルトの場合、以下のような感じでOKとなりました。

    <title><?php
    if(is_date()){
    $title = get_the_time('Y').'年';
    if(is_day() || is_month()) $title .= get_the_time('m').'月';
    if(is_day()) $title .= get_the_time('d').'日';
    echo $title;
    }else{
     wp_title();
    }
    ?></title>
    トピック投稿者 bjifa

    (@bjifa)

    kzさん、やはり<title>より上にある、条件分岐タグの影響でした。
    ページの最上部に配置したら大丈夫でした。

    条件分岐タグ

    <?php $newquery = new WP_Query('cat=6 &order=desc & showposts=1');
    if ($newquery->have_posts()): ?>
    <?php while ($newquery->have_posts()) : $newquery->the_post(); ?>

    というのがヘッダーとサイドバーに2箇所ありました。

    以前、条件分岐がうまく行かず質問した際に、下記の表記では駄目で

    <?php query_posts('cat=6 & order=desc & showposts=20'); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    http://ja.forums.wordpress.org/topic/856?replies=3
    こちらで、アドバイスいただき上記のようにしたのですが、

    今回は、どのように書けばよろしいでしょうか?

    豆知識:
    query_posts() は使った後に wp_reset_query() さえすれば
    他に影響を与えず&他もその使用を考慮することなく、どこでも使えるので
    WordPressの深い事情を理解するまでは WP_Query や get_posts より扱い易いです。

    なので、

    <?php query_posts('cat=6 & order=desc & showposts=20'); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php // いろいろ出力 ?>
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>

    <title> より上にこのループを記述することが謎といえば謎なので
    元々何がしたかったか書いていただくと、全体がスッキリするかもです
    (別トピックが良いかも)。

    「表現が適切でない」というアレなツッコミはナシでよろしく > all。

    トピック投稿者 bjifa

    (@bjifa)

    kzさん、できました。
    ありがとうございました。

15件の返信を表示中 - 1 - 15件目 (全15件中)
  • トピック「月別日別ページのタイトルの文字化け」には新たに返信することはできません。