• 解決済 optimasu

    (@optimasu)


    よろしくお願いいたします。
    wordpressで法人サイトを制作している者です。
    ちょっと複雑でうまくご説明できるか不安なのですが、よろしくお願いたします。

    現在トップページのサイドバーに新着情報を載せるためカスタムフィールドで新着情報を入力する設定にしています。
    入力項目は
    ・タイトル(title)
    ・本文1(editer1)
    ・本文2(editer2)
    ・URL(siteurl)*記事のリンク先URLです。
    の4項目です。
    新着情報のカテゴリーは「new」で、新着情報自体は「サイトURL/new/20150501」などのパーマリンク設定にしていまが、新着情報の1件表示画面は作成していません。

    今回ご質問したいのは検索結果画面でヒットしたタイトルのURLが、新着情報の場合のみ”siteurl”に飛ばしたいということです。というのも、新着情報がヒットした場合に、存在しない「サイトURL/new/20150501」等ががリンク先として設定されてしまうからです。

    現在search.phpに以下の条件分岐を設定していますが、条件分岐できていません。

    <?php if(have_posts()): ?>
    	<?php while(have_posts()): the_post(); ?>
    	<?php if(in_category('new')): ?>
    		<h2 class="fs15 fmm pt15"><?php echo post_custom('siteurl'); ?>"><?php the_title(); ?></a></h2>
    	<?php else: ?>
    		<h2 class="fs15 fmm pt15"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    	<?php endif; ?>
    		<?php the_excerpt(); ?>
    	<?php endwhile; ?>
    <?php else : ?>
    	<p class="fs12">検索条件にヒットした記事がありませんでした。</p>
    <?php endif; ?>

    内容がうまく説明できたか不安ですが、条件分岐がうまくいかない原因など分かりましたらご教示のほどよろしくお願いいたします。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • 現在search.phpに以下の条件分岐を設定していますが、条件分岐できていません。

    if-else の分岐で、必ず else の方が実行されてしまうということですか。それとも(有り得ないと思いますが)カテゴリー new の記事がまったく表示されない?

    トピック投稿者 optimasu

    (@optimasu)

    gbism様

    ご連絡ありがとうございます。
    現状は、「必ずelseの方が実行されてしまう」です。
    また、カテゴリーnewの記事も検索結果に表示されてはおります。
    さらに悪いのは、検索結果に表示される新着情報(カテゴリーnewの記事)をクリックすると500エラーとなってしまう点です。以前は「見つかりません。」でしたが、今日ためしたところ500エラーが表示されました。
    最悪の場合は、検索結果からカテゴリーnewの記事は除外する処置をした方がよいのかとも思っておりますが、そちらの方法も合わせてご教示願えれば幸いです。

    よろしくお願いいたします。

    トピック投稿者 optimasu

    (@optimasu)

    すみません。
    最初の質問で記載したPHPコードに記載漏れがありました。

    <?php if(have_posts()): ?>
    	<?php while(have_posts()): the_post(); ?>
    	<?php if(in_category('new')): ?>
    		<h2 class="fs15 fmm pt15"><a href="<?php echo post_custom('siteurl'); ?>"><?php the_title(); ?></a></h2>
    	<?php else: ?>
    		<h2 class="fs15 fmm pt15"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    	<?php endif; ?>
    		<?php the_excerpt(); ?>
    	<?php endwhile; ?>
    <?php else : ?>
    	<p class="fs12">検索条件にヒットした記事がありませんでした。</p>
    <?php endif; ?>

    <?php echo post_custom(‘siteurl’); ?>のところに<a href=”が抜けていました。
    すみません。

    まだ原因を絞り込めませんが、示して頂いたループのコード自体はおかしくないと思います。ですので、500エラーということから考えられることを挙げてみます。

    • パーマリンク設定の影響
    • テーマまたはプラグインのphpコード誤り
    • サーバーの負荷(データベースを含む)が高過ぎる
    • サーバーまたはphpのメモリが足りない

    最悪の場合は、検索結果からカテゴリーnewの記事は除外する処置をした方がよいのかとも思っておりますが、そちらの方法も合わせてご教示願えれば幸いです。

    アクションフックpre_get_postsを使うと良いと思います。このフォーラムで同様のQ&Aが見られるので、pre_get_postsで検索してみてください。または下記リンク先をどうぞ。
    query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】

    トピック投稿者 optimasu

    (@optimasu)

    gblsmさん。
    ご返信ありがとうございます。

    現在使用しているサーバーは、一度データベースの容量オーバーでデータベースエラーとなり、現在は容量を拡張して使用しておりますが、まだ突然画面が500エラーで閲覧できなくなるなど、若干不安定な状態ではあります。
    パーマリンクは、
    サイトURL//%category%/%postname%/ です。

    また、検索結果ら特定のカテゴリーを除外する方法、ご指摘いただいたタグで検索してみます。

    検索結果から除外した場合は、それとしてご報告させていただきますが、できれば受験分岐を実現させたいと考えております。
    よろしくお願いいたします。

    optimasuさん、ループのコード自体は正しく見えますので、そのコードに先立つ処理の方に何か原因が潜んでいるように思います。そこで、以下をお試しください。

    • プラグインをすべて停止して同じ操作を行う。
    • できれば一度、Twenty Fifteen 等の標準テーマに変更して、search.phpはデフォルトのまま、カテゴリーがnewの投稿を検索する。その投稿が検索されることと、検索結果から単一投稿の表示へ移れることを確認。
    トピック投稿者 optimasu

    (@optimasu)

    gblsmさん。
    ご返信ありがとうございます。

    現在、正式にリニューアルオープンした状態で使用しておりますので、ご指摘いただいた作業ができるか、クライアントやサーバー管理会社とも相談してみないと、すぐには実行できませんが、テーマを切り替えてみる方法は実サイトに影響がなければ、深夜帯にでも試してみたいと思います。
    よろしくお願いいたします。

    トピック投稿者 optimasu

    (@optimasu)

    gbismさん。

    とりあえずの処理(500エラーを出さない処置)として、新着情報関連の記事を検索結果から除外いたしました。
    除外した方法は、ご指摘いただいた方法ではなくfunction.phpの以下の1行

    'public' => true,

    'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => true,
            'show_in_nav_menus' => true,

    に変更することで実現できました。

    ただ、応急処置ですので条件分岐ができる方法は引き続き模索したいと思っております。

    その変更で検索から除外したということは、カスタム投稿タイプなんですね。new はカテゴリーのスラッグ(タクソノミー category のターム new)だと理解していますが、もしかしてカスタム投稿タイプの名前またはスラッグが new ですか?

    トピック投稿者 optimasu

    (@optimasu)

    gbismさん。
    ご返信ありがとうございます。

    現在function.phpには、以下のように設定しています。

    register_post_type(
    	'new',
    	array(
    		'label' => '最新情報・お知らせ',
    		'show_ui' => true,
    		'publicly_queryable' => true,
    		'exclude_from_search' => true,
    		'show_in_nav_menus' => true,
    		'has_archive' => true,
    		'supports' => array(
    			'title',
    			'editor',
    			'custom-fields'
    	)
    	)
    );

    また、投稿のカテゴリーでも新着情報(スラッグnew)を設定し、新着情報の作成画面でカテゴリーnewが選べるようになっております。

    カスタム投稿タイプ用のパーマリンクは特別に設定していますか(例えば Custom Post Type Permalinks 等で)。思いつきですが、もしかすると、カスタム投稿タイプのスラッグ new とカテゴリーのスラッグ new が重複しているので 500 エラーが出ているのかも。

    トピック投稿者 optimasu

    (@optimasu)

    gblsmさん。
    ご返信ありがとうございます。

    カスタム投稿タイプ用のパーマリンクは特に設定していません。
    ただ、ご指摘いただいてスラッグが重複していることが原因かと思い始めています。

    連休などを利用して投稿のカテゴリーで設定しているnewの方を外して試してみたいと思います。
    進展がありましたらまた報告させていただきます。

    少し引っかかった点をバラバラと挙げるだけになりますが

    • パーマリンクを「 サイトURL/%category%/%postname%/ 」に設定してあって、カテゴリーを何も付けていないカスタム投稿タイプ new の投稿を表示させると、どんなパーマリンクになるか。(普通の投稿は、カテゴリー無しで投稿すると「未分類」というカテゴリーが自動的に付きますよね。)
    • コードが見えていない部分なので大丈夫だと思いますが、カスタム投稿タイプ new にカテゴリー new を付けられるように設定したのは、別に関数 register_taxonomy_for_object_type() を呼び出してあるか、それとも何かプラグインを使っているか。register_post_type() の呼び出しに taxonomies 引数が含まれていないので。
    トピック投稿者 optimasu

    (@optimasu)

    gblsmさん。
    連休を挟みご返事が遅れました。

    あれから調べていたのですが、条件分岐の条件をカテゴリーのスラッグにしておりましたが、これを投稿タイプの名前にすることで無事解決いたしました。

    <?php if((get_post_type()=='new')): ?>
    		<h2 class="fs15 fmm pt15"><a href="<?php echo post_custom('siteurl'); ?>"><?php the_title(); ?></a></h2>
    	<?php else: ?>
    		<h2 class="fs15 fmm pt15"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    	<?php endif; ?>

    上記が解決したコードです。<?php if((get_post_type()==’new’)): ?>でよかったんですね。かなり遠回りをしてしまいましたが、とても勉強になりました。
    根気よくお付き合いしていただき、ありがとうございました。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • トピック「検索結果の条件分岐ができない」には新たに返信することはできません。