タイトル通り複数のカスタムフィールドの値で投稿をソートする

デジタルドリームワークスからHigaです。

タイトル通り複数のカスタムフィールドの値で投稿をソートする方法について。
良く出てくる案件と思いますので、メモしておきます。

 

1. クエリの書き換え(ソート)について(通常のソート)

WordPressで投稿の並び替えをする際には「orderby」や「order」などクエリのパラメータを指定して変更出来ます。

例:最近の投稿をタイトル順に並べる

[php]
10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ( $postslist as $post ) :
setup_postdata( $post ); ?>





[/php]

※Wordpress Codexより
https://wpdocs.osdn.jp/テンプレートタグ/get_posts

 

2. クエリの書き換え(ソート)について(pre_get_postsについて)

また自分は単純にメインループのクエリをかえる場合は「pre_get_posts」のアクションフックを使用してfunction.phpに記述しちゃいます。
その方がそれぞれのテーマに記述する必要が無く、function.phpの1ファイルで管理出来るので便利です。
こんな感じになります。

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'posts_per_page', 10 );
$query->set( 'order', 'ASC' );
$query->set( 'orderby', 'title' );
}
}
add_action( 'pre_get_posts', 'get_post10by_title' );
?>
[/php]

 

3. クエリの書き換え(ソート)について(1つのカスタムフィールド値でソート)

さて前置きが長くなりました。
今回複数のカスタムフィールドでソートをする場合についてです。
通常1つのカスタムフィールドでソートする場合は、以下のように簡単にできます。
しかしこれでは2つのカスタムフィールドではソート出来ませんでした。

カスタムフィールドKey:「custom_key01」でソート

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'order','ASC' );
$query->set( 'orderby','meta_value_num' );
$query->set( 'meta_key','custom_key01' );
}
}
add_action( 'pre_get_posts', 'get_post_sortby_customkey' );
?>

[/php]

 

4. クエリの書き換え(ソート)について(複数のカスタムフィールド値でソート)

2つのカスタムフィールドでソートする場合は以下のように記述する必要がありました。

カスタムフィールドKey:「custom_key01」、「custom_key02」でソート

[php]
is_home() && $query->is_main_query() ) {
$query->set( 'orderby', array(
'meta_custom_key01' => 'ASC',
'meta_custom_key02' => 'ASC'
)
);
$query->set('meta_query',
array(
'meta_custom_key01' => array(
'key' => 'custom_key01',
'type'=>'DATE' //それぞれに合うタイプを指定
),
'meta_custom_key02' => array(
'key' => 'custom_key02',
'type'=>'TIME' //それぞれに合うタイプを指定
)
)
);
}
}
add_action( 'pre_get_posts', 'get_post_sortby_customkey2' );
?>
[/php]

という感じでキーを「meta_query」でキーを指定してあげると良いようです。
かなり端折ったので例では上手く動作するか不安ですが、考え方が分かればこのような感じで出来ます。

実は別件でtaxonomyでソートも行いたかったのですが、どうしても上手くいかず、時間の都合上断念。
色々と便利なWordpressですので、出来ないことはないはず…
こちらはまた検証してみます。

記事情報の誤りや、別の方法でのやり方などありましたらコメントいただけると嬉しいです!
またtaxonomyでソートについてもコメントいただけると!

EC-CUBE 商品を個別にデザインを変える方法

eccubeEC-CUBE 自分用メモ

EC-CUBEの商品を個別にデザインしたいときありますよね?
その時に簡単に個別でできる方法を記載します。ほとんど何も触る必要は無いです。

商品管理→商品追加から追加ページを開いて、

スクリーンショット-2016-05-25-18.18.15

このフリーエリアをクリックすると開くので

スクリーンショット-2016-05-25-18.18.35

この中にhtmlで画像も全部表示することが出来ます。
ただdetile.twigファイルの中に

{% if Product.freearea %}

{{ include(template_from_string(Product.freearea)) }}

{% endif %}

この表記が無いとフリーエリアが表示されないので注意しましょう!!

wordpress ループ

wordpresslogo-e1367355053944

wordpress ループの自分用メモです。

ワードプレスは簡単なPHPで動的に表示を出す事ができます。

静的なサイトだと一つ一つ自分で記事を記述しないといけませんが、動的にできるワードプレスだと追加した情報を自動で記述してくれるのでお知らせやブログなどを簡単に反映させる事ができます。

<?php if ( have_posts() ) : ?>

<?php while ( have_posts() ) : the_post(); ?>

<?php endwhile; ?>

<?php else : ?>

<?php endif; ?>

この記述がループに必要な記述です。
この間間の中に <?php the_content(); ?>など追加でブログの記事を持ってくる事ができます。

あと

category.php

tag.php
も同じ用に追加でカテゴリー選択したときのページ,タグ選択した時のページを作る事ができます!

あと、、、、

<?php if(is_home()||is_front_page()):?>

もしフロントページかホームページなら起こる事

<php else: ?>

それ以外

<?php endif;?>

これは分岐方法です。サイトを作ってると使う機会が多くなります!

他にも is_page() やis_single() があります。

is_pageは固定ページに使い is_singleは投稿ページに使います。

() この中にページのIDを入れる事によってそのページだけに反映させる事が出来るようになります。

ループと簡単な条件分岐を記述しましたがwordpressをいじる際に必須になるので勉強が必要!
全然わからない事が多いですががんばります!