#未検証
テーマフォルダの functions.php に以下を追加:
function my_posts_join( $join, $query ) {
global $wpdb;
$join .= " INNER JOIN $wpdb->postmeta AS m1 ON m1.post_id = $wpdb->posts.ID AND m1.meta_key = '実施日'";
$join .= " INNER JOIN $wpdb->postmeta AS m2 ON m2.post_id = $wpdb->posts.ID AND m2.meta_key = '実施日1'";
$join .= " INNER JOIN $wpdb->postmeta AS m3 ON m3.post_id = $wpdb->posts.ID AND m3.meta_key = '実施日2'";
return $join;
}
function my_posts_orderby( $orderby, $query ) {
$orderby = 'm1.meta_value ASC, m2.meta_value ASC, m3.meta_value ASC';
return $orderby;
}
home.php で:
<?php
add_filter( 'posts_join', 'my_posts_join', 10, 2 );
add_filter( 'posts_orderby','my_posts_orderby', 10, 2 );
$args = array(
'numberposts' => 15,
'category' => '18,19',
'suppress_filters' => false,
);
$posts = get_posts( $args );
foreach( $posts as $post ) :
setup_postdata( $post );
?>
〜html の出力はお好みで〜
<?php
endforeach;
wp_reset_postdata();
remove_filter( 'posts_join', 'my_posts_join', 10, 2 );
remove_filter( 'posts_orderby','my_posts_orderby', 10, 2 );
?>
な感じでいかがでしょう。
トピック投稿者
ICTBS
(@kaibundou)
kzさん
ご提案ありがとうございました。
上記のコードで試しましたがhtmlが表示されていません。
functions.phpでデータベースを直接触っているのはわかりますが、私の知識では修正できません。
何か修正案でもありましたらよろしくお願いします。
今回のご提案でfunctions.phpは一番最後にコピペで貼り付けました。
home.phpは下記のとおりです。
<?php
add_filter( 'posts_join', 'my_posts_join', 10, 2 );
add_filter( 'posts_orderby','my_posts_orderby', 10, 2 );
$args = array(
'numberposts' => 15,
'category' => '18,19',
'suppress_filters' => false,
);
$posts = get_posts( $args );
foreach( $posts as $post ) :
setup_postdata( $post );
?>
<li>
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a><span class="f09em">…
<?php if (post_custom('実施日')) {
echo post_custom('実施日');
} elseif (post_custom('実施日1')) {
echo post_custom('実施日1');
} elseif (post_custom('実施日2')) {
echo post_custom('実施日2');
} ; ?></span>
<?php the_excerpt(); ?>
</li>
<?php
endforeach;
wp_reset_postdata();
remove_filter( 'posts_join', 'my_posts_join', 10, 2 );
remove_filter( 'posts_orderby','my_posts_orderby', 10, 2 );
?>
<?php $post = $tmp_post; ?>
カスタムフィールドのキー名を’実施日’,’実施日1’などの日本語から
‘date0’, ‘date1’のような英数字に変更すると吉です。。
トピック投稿者
ICTBS
(@kaibundou)
kzさん
早速のご指示ありがとうございました。
カスタムフィールドのキー名を英数字に変更してもhtmlが表示されていません。
よろしくお願いします。
コードは検証しましたので、カスタムフィールドのキー名が英数字なら OK なはずです。
・「テーマフォルダの」functions.php に my_〜 の関数を書いているか
・カテゴリーID 18,19 の記事があるか
など確認してみてください。
Debug Bar, Debug Bar Extender プラグインを入れて、「Queries」から
当該のクエリが以下の「ように」なっているか確認してみてください。
※実施日–>date0, 実施日1–>date1, 実施日2–>date2 に変更しています。
SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta AS m1 ON m1.post_id = wp_posts.ID AND m1.meta_key = 'date0' INNER JOIN wp_postmeta AS m2 ON m2.post_id = wp_posts.ID AND m2.meta_key = 'date1' INNER JOIN wp_postmeta AS m3 ON m3.post_id = wp_posts.ID AND m3.meta_key = 'date2' WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (18,19) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY m1.meta_value ASC, m2.meta_value ASC, m3.meta_value ASC LIMIT 0, 15
トピック投稿者
ICTBS
(@kaibundou)
kzさん
お忙しい中、本当にありがとうございます。
ご指示の通り、カスタムフィールドのkeyを実施日–>date0, 実施日1–>date1, 実施日2–>date2 に変更しました。
fanctions.phpもkeyに合わせて下記のように変更しました。
function my_posts_join( $join, $query ) {
global $wpdb;
$join .= " INNER JOIN $wpdb->postmeta AS m1 ON m1.post_id = $wpdb->posts.ID AND m1.meta_key = 'date0'";
$join .= " INNER JOIN $wpdb->postmeta AS m2 ON m2.post_id = $wpdb->posts.ID AND m2.meta_key = 'date1'";
$join .= " INNER JOIN $wpdb->postmeta AS m3 ON m3.post_id = $wpdb->posts.ID AND m3.meta_key = 'date2'";
return $join;
}
function my_posts_orderby( $orderby, $query ) {
$orderby = 'm1.meta_value ASC, m2.meta_value ASC, m3.meta_value ASC';
return $orderby;
}
そして、home.phpも下記のように変更しました。
<ul class="news-top">
<?php
global $post;
add_filter( 'posts_join', 'my_posts_join', 10, 2 );
add_filter( 'posts_orderby','my_posts_orderby', 10, 2 );
$args = array(
'numberposts' => 15,
'category' => '18,19',
'suppress_filters' => false,
);
$posts = get_posts( $args );
foreach( $posts as $post ) :
setup_postdata( $post );
?>
<li>
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a><span class="f09em">…
<?php if (post_custom('date0')) {
echo post_custom('date0');
} elseif (post_custom('date1')) {
echo post_custom('date1');
} elseif (post_custom('date2')) {
echo post_custom('date2');
} ; ?></span>
<?php the_excerpt(); ?>
</li>
<?php
endforeach;
wp_reset_postdata();
remove_filter( 'posts_join', 'my_posts_join', 10, 2 );
remove_filter( 'posts_orderby','my_posts_orderby', 10, 2 );
?>
</ul>
Debug Bar,Debug Bar Extenderのプラグインを入れて確認したところ、Queriesにご指摘の記述がありました。
あとはどのようにすればいいのでしょうか?
$posts = get_posts( $args );
の後に
var_dump( $posts );
を入れてみて
Homeページに array(0) { }
と表示されるなら、該当する記事がないということです。
いやいやちゃんと記事ありますし、ということならココではこれ以上はムズイので
wpxtreme.jp から直接お問い合わせください。
>all 結果はこちらで報告しますー
トピック投稿者
ICTBS
(@kaibundou)
kz様
いつも本当にありがとうございます。
記事はちゃんとあります、並べ替えの方法で悩んでおりました。
上記のサイトで問い合わせてみます。
ありがとうございました。
しかし、kz様のご指示のようにvar_dump( $posts );を追加したらarray(0) { }が表示されています。
カテゴリ18,19には記事があるのに、どうしたものでしょう(^_^;)