###前提と目的
プラグイン「smart custom field」でカスタムフィールドを作りました。
tag_single
というフィールド名のチェックボックスです。
このチェックボックスをタグのように扱い、同じチェックがある記事を関連記事として表示させたいです。
###やってみたこと
次のコードを書いてみたのですが、なぜか「同じチェックの記事」でなく、全ての記事がなんでもかんでも表示されてしまう状況です。
どのように修正したらいいでしょうか?
php
1<!--ここがあやしい--> 2<?php 3$hastag = get_post_meta( $post->ID, 'tag_single', true ); 4if( !empty( $hastag ) ) { 5 $tags = SCF::get( 'tag_single' ); 6 foreach( $tags as $tag ) { 7 $tagkwds[] = $tag->post_name; 8 } 9} ?> 10 11<!--以下からは大丈夫なはず--> 12<?php 13$myposts = get_posts( array( 14 'post_type' => 'post', 15 'posts_per_page' => '8', 16 'post__not_in' => array( $post->ID ), 17 'category__in' => $catkwds, 18 'orderby' => 'rand' 19) ); ?> 20 21<?php if( $myposts ): ?> 22 23<section class="related-section"> 24 <div id="content-wrap"> 25 <div class="content"> 26 <?php foreach($myposts as $post): 27 setup_postdata($post); ?> 28 29 <?php get_template_part( 'template-parts/list', 'single' ); ?> 30 31 <?php endforeach; ?> 32 </div> 33 </div> 34</section> 35 36<?php wp_reset_postdata(); ?> 37 38<?php endif; ?>
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/14 07:48
2018/05/14 07:56
退会済みユーザー
2018/05/14 08:13
2018/05/14 08:27
退会済みユーザー
2018/05/14 08:35
退会済みユーザー
2018/05/14 08:36
2018/05/14 08:47
回答1件
0
ベストアンサー
以下からも全然大丈夫じゃない
SCFのことはよく知らんがsmart custom fieldなんて名前なんだから
SCF::get()が返しているのはpost_metaの値だろう
使うのはcategory__inじゃなくmeta_query
なんか色々ごっちゃになってそうなのでついでにこれも貼っときます
WPデータベース構造
カスタムフィールドはwp_postmetaテーブルに
tagやcategoryはwp_termsに入ってます
入ってるとこから違います
追記
SCFのことよく知らないので、一つ確認したいことがあります
php
1$hastag = get_post_meta( $post->ID, 'tag_single', true );
複数にチェックを入れた場合にこの$hastagはもしかしてarrayですか?
それともチェックした項目のうちどれかひとつの値でしょうか?
var_dumpしてみてください
複数の値をシリアライズして一つのフィールドに入れるタイプのやつだと
検索はかなりしんどいので確認でした
さて
php
1$hastag = get_post_meta( $post->ID, 'tag_single', true ); 2if( !empty( $hastag ) ) { 3 $tags = SCF::get( 'tag_single' ); 4 foreach( $tags as $tag ) { 5 $tagkwds[] = $tag->post_name; 6 } 7}
ここら辺まるっと要りません
「同じカスタムフィールドの値」を持ってるものを検索したいんだから
値をそのまま取り出して検索に使えばいいだけです
php
1$tags = get_post_meta( $post->ID, 'tag_single');
これでmeta_queryのvalueに使う値は取れました
あとはこれを使ってget_postsすればいいだけです
投稿2018/05/14 07:35
編集2018/05/14 08:41総合スコア7802
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/14 08:31
退会済みユーザー
2018/05/14 09:21 編集
退会済みユーザー
2018/05/14 09:20 編集
退会済みユーザー
2018/05/14 09:28 編集
退会済みユーザー
2018/05/14 09:21 編集
退会済みユーザー
2018/05/14 09:30
2018/05/14 09:31
2018/05/14 09:34
退会済みユーザー
2018/05/14 11:23
2018/05/14 11:27
退会済みユーザー
2018/05/14 11:42 編集
2018/05/14 11:45
退会済みユーザー
2018/05/14 11:51
2018/05/14 13:45
退会済みユーザー
2018/05/14 14:03
2018/05/14 14:24
退会済みユーザー
2018/05/14 14:29
2018/05/14 14:56
退会済みユーザー
2018/05/14 15:04 編集
2018/05/14 15:26
2018/05/14 15:51
退会済みユーザー
2018/05/14 16:30 編集
2018/05/14 16:56
退会済みユーザー
2018/05/14 17:08
退会済みユーザー
2018/05/14 17:59 編集
退会済みユーザー
2018/05/14 18:40
2018/05/15 00:31
退会済みユーザー
2018/05/15 01:11
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。