サポート » テーマ » カスタムポストタイプ間の情報取得

  • 解決済 fst usr

    (@rtrkwkm)


    カスタムポストタイプを用いて、別のカスタムポストタイプ内の情報を取得してくる際、
    稀にPHPの処理ができず?htmlとしての出力がその処理部分で止まる現象になやんでおります。

    実際のソースが以下の物です。

    <div class="item">
            <?php
    			$item = post_custom('itemname');
    			$loop = new WP_Query(
    				array(
    					'post_type' => 'itemlist',
    				'posts_per_page' => -1,
    					'paged' => $paged,
    					)
    				);
    			while ( $loop->have_posts() ) : $loop->the_post();
    			//if(strpos($item,the_title('','',false)) !== false){
    			if($item == the_title('','',false)){
    				$item2 = wp_get_attachment_url(get_post_meta($post->ID, 'image', true), 'full');
    				$url = get_permalink();
    			}
    			endwhile;
    			echo "<a href=\"$url\"><img src=\"$item2\" alt=\"$item\" /></a>";
    		?>
            <?php wp_reset_postdata(); ?>
    
            </div>

    こちらのソースがカスタムポストタイプ「person」を出力するページの一部です。

    カスタムフィールド「item」に入力された内容と一致するものをカスタムポストタイプ「itemlist」タイプ内より探してパーマリンクやタイトルを取得する、という流れです。

    itemlistに登録されたポストタイプ数が多いのか、サーバーの処理の問題かもしれないのですが、itemlistの件数を確実に動作する件数まで落とすのは難しく、上記ソースの改善や別の取得方法にて解決できれば、と思っております。

    みなさまよろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター jim912

    (@jim912)

    動作する場合と動作しない場合があるのであれば、PHPのメモリ割り当て上限を超えている可能性が高いと思われます。

    原因がメモリかどうかは、

    • エラーログを見る
    • エラーメッセージを表示してみる

    などにて、 PHP Fatal error: Allowed memory size of nnnn といったメッセージがあるかどうかで判定できます。

    メモリ不足となっている場合の対策は、メモリ上限を上げるのが最も簡単な方法です。
    コードで改善を図るのであれば、WP_Queryを用いず、該当する記事のIDのみをSQLを用いて取得し、ループの中で、get_postして記事のオブジェクトを得る方法もありますが、こちらは、データベースやSQL文を理解していることが必要となります。

    こんにちは

    echo "<a href=\"$url\"><img src=\"$item2\" alt=\"$item\" /></a>";

    if文の内側じゃありませんか?

    トピック投稿者 fst usr

    (@rtrkwkm)

    >jim912様
    >nobita様

    投稿ありがとうございました!
    以降、ソースの書き換えなどやってみましたが、
    どうしても上手くいかず、最終的にPHPの割当メモリを増やす事で、
    正常に動作いたしました。

    ご助言ありがとうございました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタムポストタイプ間の情報取得」には新たに返信することはできません。