Quantcast
Channel: WordPress Note
Viewing all 75 articles
Browse latest View live

MW WP Form で日付ピッカーが動かなくなったとき

$
0
0
datepicker

(2016年6月4日、記事内容に修正あり)

仕事でもよく使用させていただいているフォームプラグイン「MW WP Form」があります。
メールフォームのプラグインでは、私のようにプログラムに弱いデザイナーでは、なかなかカスタマイズがしやすいものが見つかりませんでしたが、「MW WP Form」はHTMLで自由にデザインもでき、しかも高機能。ここ数年はこちらのプラグインにすっかり落ち着き、お世話になっております。

ところが、あるサイトのリニューアル制作の際、日付ピッカーが動かなくなっていることに気がつきました。昨日までテストで動作していたのに、おかしいな〜…と、思い、いろいろと原因を探ること1時間…、header.phpに私が記述していた1行を削除すると、直ることに気がつきました。

削除した1行は、以下。

<?php wp_deregister_script('jquery'); ?>

そう、WordPressのjQueryを読み込ませない、という1行でした。

WordPressのjQueryを読み込ませず、バージョン2.1.3を読み込ませていたのですが、これがアダになったようでした。

いろんな問題が生まれますね。。。
誰かのお役に立てればと思い、メモしておきます。

(2016年6月4日追記)

申し訳ございません…。この記事に誤りがございました。

<?php wp_deregister_script('jquery'); ?>

上記コードが原因だったのではなく、<?php wp_head(); ?> の位置が原因でした。。。
jQueryに関する記述は、このタグより後方に書かないとうまく動作しない、ということを最近知りました。(お恥ずかしい…)

今まで <?php wp_head(); ?> は </head> の直前に書いていましたが、それがダメだったのですね。。。

<?php wp_head(); ?>

<?php wp_deregister_script('jquery'); ?>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

上記の順番で書き直しましたら、無事に直りました!


Toolset Types(旧Types):カスタム投稿タイプ、カスタムタクソノミー、カスタムフィールドの管理が行えるプラグイン

$
0
0
icon_tools

昨年、カスタム投稿タイプを24個利用しなければいけない案件があり、数あるプラグインの中からどれを使おうと悩んでいた頃、あまり勉強する時間もなく、一番わかりやすそうだと思って選んだ「Toolset Types」だったのですが、これがとっても便利で助けられました。

※当時は「Types」という名前だったのですが、昨年末あたりの大幅なアップデートで名前が変わったようです。また、当初不具合もあり、アップデートを見合わせていましたが、数回のアップデートで安定してきたようです。

一つのプラグインで、カスタム投稿タイプ、カスタム分類(タクソノミー)、カスタムフィールドの管理がまとめて行え、プラグインの併用をする必要がないので、楽だと思います。
また、管理画面が日本語化されていますので、使いやすいのも良いですね。
ただ、同じような他のプラグインに比べて情報が少ない気がしましたので、久しぶりの更新にあやかって使い方をエントリーしてみます。

Toolset Types(旧Types)

カスタム投稿タイプ、カスタム分類(タクソノミー)、カスタムフィールドの管理が行えるプラグイン。
配布元 : Toolset Types(Ver. 2.1)

インストール

  1. 「ダッシュボード」→「プラグイン」→「新規追加」と進みます。

  2. 検索ボックスに「Toolset Types」を入力して、「プラグインを検索」ボタンをクリック。

  3. ヒットした「Toolset Types」の「今すぐインストール」をクリック。

    01_install

  4. インストールが完了したら、「プラグインを有効化」をクリック。

「Toolset Types」は、たくさん機能がありますので、分けてエントリーしたいと思います。

Toolset Types:使い方【1】カスタム投稿タイプ

$
0
0
icon_post_types

WordPress は、デフォルトで「投稿」と「固定ページ」が用意されていますが、例えば「グルメ」や「お知らせ」など、異なる種類のページを作成したいとき、カスタム投稿タイプを作成します。

サイドバーに「グルメ」や「お知らせ」のメニューが個別で現れるので更新しやすいですし、テンプレートも各カスタム投稿タイプごとに作成できるため、レイアウトやデザインが自由に変えられることもメリットです。

「Toolset Types」では、カスタム投稿タイプが簡単に作成でき、また、カテゴリーやタグの役割をする「カスタムタクソノミー」や、自由な入力欄「カスタムフィールド」も作成できます。
編集画面でも、特定のカスタム投稿タイプに、特定の「カスタムタクソノミー」、「カスタムフィールド」を割り当て、表示させたりできますので、とてもわかりやすいです。

1-1. カスタム投稿タイプの作成

  1. 「Toolset」→「Post Types」と進みます。

    02_post_types_create

  2. 「新規作成」をクリックします。

    03_post_types_create_02

    ※「Toolset」→「Dashboard」→「Add new post type」と進んでも良いです。

  3. ポストタイプ名を入力します。「Name plural」はメニューに表示される名前で、日本語でもOKです。「Name singlar」はカスタム投稿名の英字、「スラグ名」にスラッグを入力します。

    ※「Name plural」と「Name singlar」を同じに設定しようとすると、「Post Typeに同じ複数名と単数名を使用することはお薦めできません。単数名と複数名には違う名前を使用してください。」とアラートが出ます。

    04_post_types_create_03

    「アイコン変更」ボタンをクリックすると、アイコンも変更できます。
    行き届いてますね。

    05_post_types_create_04

  4. 基本的には上記で使うことができます。

詳細設定

  1. バージョンアップしてから追加された欄ですが、使ったことはありません。
    このカスタム投稿が利用するテンプレートファイル名が表示されたりしているような気がします。。。

    06_post_types_create_05

  2. ラベル関連の設定です。

    07_post_types_create_06

  3. 使用するタクソノミーを選択できます。
    ※後に作成するカスタムタクソノミーも、ここに表示されます。

    08_post_types_create_07

  4. 使用するカスタムフィールドのグループを選択できます。
    ※今は表示されていませんが、後に作成するカスタムフィールドのグループが、ここに表示されます。

    09_post_types_create_08

  5. 編集画面で使うものを選択できます。
    ※サムネイルなど使いたい場合はチェックします。

    10_post_types_create_09

  6. オプションです。そのままでも使用できます。
    ※階層など使いたい場合はチェックします。

    11_post_types_create_10

初めて使うとき、下記のサイト様にお世話になりました。ありがとうございます!

参考サイト

WordPress 一番簡単なカスタム投稿の作成と表示方法

1-2. カスタム投稿タイプのテンプレート

準備中。

記事本文やテキストウィジェットでPHPを使うショートコード

$
0
0
shortcode

本文内でPHPを使ったりできるといいな、とずっと昔「Exec-PHP」を紹介したことがありましたが、プラグイン自体も開発は終了しており、セキュリティ的にも良くない、という記事を以前読みました。

その後、プラグインを使わなくとも、そのようなことがショートコードで可能であることを覚えたのですが、とても便利ですので遅ればせながら紹介したいと思います。

比較的よく利用しそうなショートコードを3つご紹介。
本文エリアやテキストウィジェットで利用できます。

  • (1)ホームURLを呼び出す
  • (2)テンプレートURLを呼び出す
  • (3)今日の日付を呼び出す

使い方

functions.php

ショートコードは、functions.php に追加していきます。

/* ホームURLを呼び出すショートコード */
function shortcode_url() {
    return get_bloginfo('url');
}
add_shortcode('url', 'shortcode_url');


/* テンプレートURLを呼び出すショートコード */
function shortcode_templateurl() {
    return get_bloginfo('stylesheet_directory');
}
add_shortcode('template_url', 'shortcode_templateurl');


/* 本日の日付を呼び出すショートコード */
function shortcode_today() {
    return date_i18n("Y年n月j日");
}
add_shortcode('today_date', 'shortcode_today');


/* 利用する場所 */
add_filter('the_content', 'do_shortcode');
add_filter('get_the_content', 'do_shortcode');
add_filter('widget_text', 'do_shortcode');

子テーマでの注意事項

テンプレートURL(テーマフォルダのURL)は、本来

get_bloginfo('template_url');

で呼び出しますが、子テーマを利用する場合、親テーマのディレクトリが呼び出されてしまいますので、

get_bloginfo('stylesheet_directory');

と書きます。こう書くことで、子テーマのディレクトリが呼び出されます。

本文エリアやテキストウィジェットでの書き方

(1)ホームURLを呼び出す例

リンク先に使用。

<a href="[url]">ホーム</a>

※[]は、全角で書いています。

(2)テンプレートURLを呼び出す例

画像表示に使用。

<img src="[template_url]/images/○○○○.jpg">

※[]は、全角で書いています。

(3)今日の日付を呼び出す例

今日の日付を表示。

<p>今日は[today_date]です。</p>

【出力結果】今日は2016年7月17日です。

※[]は、全角で書いています。

iCLUSTA+のDBで文字コードにエラーが出た場合の対処法(※utf8mb4は使用不可)

$
0
0

先日テスト環境からデータベースを本番環境(iCLUSTA+)に移行したところ、

Unknown collation: ‘utf8mb4_unicode_ci’

※サーバのバージョンが低いなどの理由でutf8mb4が使えないということらしいです。

というエラーが出てしまったのですが、以下の記事のおかげで対処できました。
ありがとうございます!

参考サイト

【WordPress】DBの文字コードをのエラーがでたときの対処法メモ – Qiita

phpMyAdminでテーブルの文字コード変換をしたのは初めてでしたので、自分用にもメモ代わりに記事にしておきたいと思います。

※スクリーンショットは、ローカルのMAMPのものです。

1. phpMyAdminにて文字コードを変換し、エクスポート

  1. 「SQL」のタブをクリックし、その下のテキストエリアに、

    ALTER TABLE 【テーブルの名前】 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    と入力し、「実行」ボタンをクリックします。
    (例では、【テーブルの名前】の部分に、wp_commentmetaを入力しました)

    ↓こんな感じ。

    20161123-1

  2. 照合順序が「utf8_general_ci」に変わっていることを確認します。
    この方法で、1つ1つテーブルを変換します。

    20161123-2

  3. 全てのテーブルを変換し終わったら、エクスポートします。

2. エクスポートしたSQLの中身を修正

エクスポートしたSQLをテキストエディタで開いて、「utf8mb4」→「utf8」に置換します。

※サーバー移行の場合は、以下の箇所のURLなども修正します。

(1, 'siteurl', 'http://www.○○○○.com', 'yes'),
(2, 'home', 'http://www.○○○○.com', 'yes'),

3. wp-config.phpを修正

define('DB_CHARSET', 'utf8mb4');
    ↓
define('DB_CHARSET', 'utf8');

URLを変更いたしました

$
0
0

明けましておめでとうございます。
今年はもう少し更新を増やしていけたらと思います。

😀サーバーを引っ越し、独自ドメインにしましたので、URLが変わりました。
SNSボタンの数字はすべて0に戻ってしまいましたが…😅、また一から始めたいと思います。
どうぞよろしくお願いいたします。

ムームードメインで取得したサブドメインのみをwpXサーバーで使う

$
0
0

昨年、wpXサーバーというWordPressに特化した高速サーバーを仕事で使用する機会があり、その軽快さに感動したので、自分でも使ってみることにしました。

他社サーバーでは、負荷がかかり過ぎ、管理画面で記事一覧を表示しようとしても500エラーを返されていたサイトが、普通にしかも何倍も速く表示されるレベル…!😂

ただし、wpXサーバーはWordPress専用のサーバーで、他のCMSは使えないというデメリットがあったので悩んだのですが、他社で取得したサブドメインも使えることがわかり、ひとつのサブドメインで使ってみることにしました。

1. サブドメインでwpXサーバーで使う方法

ムームードメインの「ムームーDNS」を利用すると、同じドメインでありながら、メールはAサーバー、サイトはBサーバーなどと、分けて使うことができるので便利です。ちなみに、私はgmailでドメインのメールアドレスを使えるようにしたかったので、メールは「Google App」を利用しています。

1-1. ムームードメインでサブドメインを作成

  1. サイドバーの「ムームーDNS」に進み、該当のドメインの「変更」ボタンをクリックします。

  2. 「設定2」で、①〜③を設定します。
    私の場合、メールでGoogle Appを利用しているため、上部にはそれらの設定が書いてありますが、その下に追加しました。

    ①「サブドメイン」欄にサブドメインを入力(※○○○.example.comの○○○の部分)
    ②「種別」欄は「A」を選択
    ③「内容」欄はwpXサーバーのIPアドレスを入力

    ※IPアドレスは、wpXサーバーの管理パネルの「サーバー情報」で確認してください。

1-2. wpXサーバーにドメインを追加

  1. wpXサーバーの管理パネルのサイドバーから、「ドメイン追加設定」に進み、「他社管理のドメインを追加する」ボタンをクリックします。

  2. ドメインの所有者を確認できるよう、5つの認証方法が用意されていますが、「Web認証」が一番手軽そうでしたので使いました。
    「Web認証」の項目から、「wpx.html」ファイルをダウンロードし、FTPでドメインの直下にアップロードします。

  3. 「ドメイン名」を入力し、「Web認証」をチェックし、「ドメインの追加(確認)」ボタンをクリック。
    ※たしか、次の画面が確認画面でしたので、もう一回ボタンをクリックして完了。

1-3. wpXサーバーにWordPressを新規インストール

ドメインが追加できれば、あとはWordPressを新規インストールするだけです。

今回、テストがてらサブドメインのみ移行してみた以下のサイトは、見違えるように快適になりました😊 管理画面もサクサク快適です。

私の使っているサーバーはロリポップサーバーなのですが、WordPressを使うにはちょっと貧弱なスペックですので、サブドメインのみ別のサーバーが使えるというのは、とてもうれしいです。(Movable Typeを使っているサイトもあるので)

wpXサーバーで MW WP Form を使用時、確認画面に遷移しないとき

$
0
0

とあるサイトをwpXサーバーに引っ越ししたら、「MW WP Form」で作成したフォームが確認画面に遷移しなくなってしまいました。

でも、それはwpXサーバーのキャッシュ機能がONになっていたからでした。
(MW WP Formの仕様上、キャッシュプラグインを使用すると、このような現象になるとのことです)

キャッシュ機能をOFFにすると、サイト表示のスピードに影響が…という心配も無用でした。
wpX管理パネルで該当ページのみをキャッシュを無効化することができ、無事に直すことができましたので、メモしておきます。

wpXサーバーのキャッシュを無効化する方法

  1. wpX管理パネルにログインし、設定画面の「高速化設定」→「キャッシュ設定」の「設定」ボタンをクリックします。

  2. 「キャッシュ設定」ページの一番下にある「キャッシュ設定の変更」ボタンをクリックします。

  3. 「キャッシュ除外設定」の中の「ファイルパス」の欄に、該当のページのパスを入力します。(複数ある場合は、改行して入力します)

  4. 「キャッシュ設定を変更する(確認)」ボタンをクリックして、完了。

これで、wpXサーバーでも「MW WP Form」が問題なく使えました。


カスタム投稿タイプを表示する(トップページ・サイドバー編)

$
0
0

カスタム投稿タイプを作成し、投稿できるようになっても、いざ表示させようと思ったら、いろんな方法があって、戸惑ってしまいます。

今日は、トップページやサイドバーなどのウィジェットで、特定のカスタム投稿タイプを表示したいときの、ループの書き方を紹介したいと思います。

※固定ページでも使用できます。

サブループ(カスタムループ)で、特定のカスタム投稿タイプを表示する

「gourmet」というカスタム投稿タイプを、トップページやウィジェットなどで表示するという例です。

経験上、メインループに影響を与えないサブループ(カスタムループ)で記述しておくほうが安全ですね。

※以前、メインループの記述方法で書いて、ページネーションでおかしなことになってしまいました…。

また、サブループの記述方法には、「WP_Query()」「get_posts()」がありますが、「WP_Query()」の方がより複雑な処理を行うことができます。

※メインループは、アーカイブページなどでページ送りが必要な時に使います。

1-1. WP_Query()

もっぱら、こちらばかり使用しています。

<?php
$args = array(
  'post_type' => 'gourmet', /* カスタム投稿名が「gourmet」の場合 */
  'posts_per_page' => 5, /* 表示する数 */
); ?>

<?php $my_query = new WP_Query( $args ); ?>

<ul>

<?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>

<!-- ▽ ループ開始 ▽ -->

  <li>
    <h3><?php the_title(); ?></h3>
    <p class="published"><?php the_time( get_option( 'date_format' ) ); ?></p>
  </li>

<!-- △ ループ終了 △ -->

<?php endwhile; ?>

</ul>

<?php wp_reset_postdata(); ?>

※「wp_reset_postdata();」でリセットは必須。

参考サイト

関数リファレンス/WP Query

1-2. get_posts()

私はめったに使わないのですが…。(覚えにくくて苦手なだけです)

<?php
$args = array(
  'post_type' => 'gourmet', /* カスタム投稿名が「gourmet」の場合 */
  'posts_per_page' => 5, /* 表示する数 */
); ?>

  
<?php $my_posts = get_posts( $args ); ?>

<ul>

<?php global $post;
  foreach ( $my_posts as $post ) :
  setup_postdata( $post ); ?>

<!-- ▽ ループ開始 ▽ -->

  <li>
    <h3 class="title"><?php the_title(); ?></h3>
    <p class="published"><?php the_time( get_option( 'date_format' ) ); ?></p>
  </li>

<!-- △ ループ終了 △ -->

<?php endforeach; ?>

</ul>

<?php wp_reset_postdata(); ?>

※「wp_reset_postdata();」でリセットは必須。

参考サイト

テンプレートタグ/get posts

▼ 出力結果

出力結果は、「WP_Query()」も「get_posts()」も同じです。
<ul>
  <li>
    <h3 class="title">記事5</h3>
    <p class="published">2017年2月20日</p>
  </li>

  <!-- 新着5件分をループで表示 -->

  <li>
    <h3 class="title">記事1</h3>
    <p class="published">2017年2月18日</p>
  </li>
</ul>

カスタム投稿タイプを表示する(アーカイブページ編)

$
0
0

カスタム投稿タイプの、アーカイブページの作成方法です。
以下の前提で、話を進めます。

  • カスタム投稿名:gourmet
  • アーカイブテンプレート名:archive-gourmet.php
    ※archive-カスタム投稿タイプ名.php
    ※カスタム投稿タイプ「gourmet」用のテンプレートを作成することで、独自のレイアウトデザインが作成できます。

1. archive-○○○.php

アーカイブテンプレート「archive-gourmet.php」には、メインループを記述します。

「メインループA」も「メインループB」も、同じ意味です。
※「メインループB」は「メインループA」を短くしているだけです。

1-1. メインループA

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

    <!-- ▽ ループ開始 ▽ -->

    <h2><?php the_title(); ?></h2>
    <div class="entry-body">
      <?php the_content(); ?>
    </div>
    
    <!-- △ ループ終了 △ -->

  <?php endwhile; ?>
<?php endif; ?>

1-2. メインループB

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

  <!-- ▽ ループ開始 ▽ -->

  <h2><?php the_title(); ?></h2>
  
  <div class="entry-body">
    <?php the_content(); ?>
  </div>
  
  <!-- △ ループ終了 △ -->

<?php endwhile; endif; ?>

2. pre_get_posts

functions.phpに「pre_get_posts」というアクションフックを書いて、表示を制御します。
1ページの表示件数だけでなく、ソート順を変更したり、カスタムフィールドの内容で並べ替えたり、いろいろできます。

2-1. 1ページの表示件数を指定

1ページに何件の投稿を表示させるかは、WordPressの「設定」→「表示設定」→「1ページに表示する最大投稿数」の数字が反映されますが、「pre_get_posts」で、以下のように記述することで、特定のカスタム投稿のアーカイブページの1ページの表示件数を指定することができます。

例)表示件数を10件

function change_posts_per_page($query) {

  /* 管理画面,メインクエリに干渉しないために必須 */
  if( is_admin() || ! $query->is_main_query() ){
   return;
  }
  
  /* カスタム投稿「gourmet」アーカイブページの表示件数を10件にする */
  if ( $query- > is_post_type_archive( 'gourmet' ) ) {
    $query- > set( 'posts_per_page', '10' ); // 10件
    return;
  }

}

add_action( 'pre_get_posts', 'change_posts_per_page' );

2-2. 1ページの表示件数を指定 & 投稿日の昇順でソート

デフォルトが降順(新しい記事から表示)なので、めったに使わないかも知れませんが…。

例)表示件数を10件 & 投稿日の昇順でソート

function change_posts_per_page($query) {

  /* 管理画面,メインクエリに干渉しないために必須 */
  if( is_admin() || ! $query->is_main_query() ){
   return;
  }
  
  /* カスタム投稿「gourmet」アーカイブページの表示件数を10件、投稿日の昇順でソート */
  if ( $query->is_post_type_archive( 'gourmet' ) ) {
    $query -> set( 'posts_per_page', '10' ); // 10件
    $query -> set('order','ASC'); // 昇順
    $query -> set('orderby', 'date'); // 投稿日
    return;
  }

}

add_action( 'pre_get_posts', 'change_posts_per_page' );

2-3. 特定の日以降の全ての記事を表示

これもちょっとめずらしいかな…。

例)2017年1月1日以降の記事をすべて表示

function change_posts_per_page($query) {

  /* 管理画面,メインクエリに干渉しないために必須 */
  if( is_admin() || ! $query->is_main_query() ){
   return;
  }
  
  /* カスタム投稿「gourmet」アーカイブページを2017年1月1日以降の記事をすべて表示 */
  if ( $query->is_post_type_archive( 'gourmet' ) ) {
    $query -> set( 'posts_per_page', '-1' ); // 全記事
    $query->set( 'date_query',
      array(
          array(
          'after' => 'January 1st, 2017' // 2017年1月1日以降
         )
       )
    );
    return;
  }

}

add_action( 'pre_get_posts', 'change_posts_per_page' );

2-4. 特定のカスタムフィールドに入力がある記事を除外 & 20件表示

これもめずらしいかもですが、最近必要があって調べました。以下の記事を参考にさせていただきました。ありがとうございます。

WordPressで指定したカスタムフィールドが存在しない場合の投稿一覧を取得する方法

例)カスタムフィールド「wpcf-link-url」に入力があるものを除外して20件表示

function change_posts_per_page($query) {

  /* 管理画面,メインクエリに干渉しないために必須 */
  if( is_admin() || ! $query->is_main_query() ){
   return;
  }
  
  /* カスタム投稿「gourmet」アーカイブページをカスタムフィールド「wpcf-link-url」に入力がある記事を除外して20件表示 */
  if ( $query->is_post_type_archive( 'gourmet' ) ) {
    $query -> set( 'posts_per_page', '20' ); // 20件
    $query->set( 'meta_key', 'wpcf-link-url' ); // カスタムフィールド「wpcf-link-url」
    $query->set( 'meta_compare', 'NOT EXISTS' ); // 入力があるものを除外
    return;
  }

}

add_action( 'pre_get_posts', 'change_posts_per_page' );

2-5. 複数のカスタムフィールドのデータでソートし、20件表示

これも必要があって、調べたものです。結構よく使います。
2つのカスタムフィールド入力された数字をもとに、ソートしています。

例)カスタムフィールド「wpcf-total-star」でまずソート、その後カスタムフィールド「wpcf-total-ranking」でソートして、20件表示

function change_posts_per_page($query) {

  /* 管理画面,メインクエリに干渉しないために必須 */
  if( is_admin() || ! $query->is_main_query() ){
   return;
  }
  
  /* カスタム投稿「gourmet」アーカイブページをカスタムフィールド「wpcf-total-star」でまずソート、その後「wpcf-total-ranking」でソートして20件表示 */
  if ( $query->is_post_type_archive( 'gourmet' ) ) {
		$query->set( 'posts_per_page', '20' );

    $query->set( 'orderby',
      array(
        'meta_custom_star' => 'DESC', // 降順
        'meta_custom_ranking' => 'DESC' // 降順
      )
    );
    
    $query->set('meta_query',
      array(
        'meta_custom_star' => array(
          'key' => 'wpcf-total-star', // カスタムフィールド wpcf-total-star でソート
          'orderby' => 'meta_value_num'
        ),
        'meta_custom_ranking' => array(
          'key' => 'wpcf-total-ranking', // カスタムフィールド wpcf-total-ranking でソート
          'orderby' => 'meta_value_num'
        )
      )
    );

    return;
  }

}

add_action( 'pre_get_posts', 'change_posts_per_page' );

こちらの参考サイト様がわかりやすくて、本当にお世話になりました。ありがとうございます。

参考サイト

[Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works

サイト改ざん、スパムメールを大量送信の被害に遭いました

$
0
0

サイトが改ざんされている…?!

(※このサイトのことではありません)

先週の木曜日に「メール送信件数の上限を超過しております」という件名のメールがロリポップから届き、「?」と思い読んでみると…

この度、アカウント【△△△.○○○.jp】のWEBサーバーより、【 1,015 】件のメールが送信されたことを確認いたしました。

禁止事項にある1時間あたりのメール送信件数の上限を超過しておりますので、現在、WEBサーバーからのメール送信を制限しております。

すぐに「改ざんだ!」と思いました。しかし、ロリポップには10個以上のサイトを置いていたので、どのサイトから送信されたかがわからない…。サポートにも問い合わせてみたけど、返信は次の日だろうから意味がない。FTPのパスワードをまず変更して、とりあえず自分でファイルを調べていくことに。

そして、あるサイトの中で、見覚えのない不審なフォルダやファイルを次々と発見。WordPress や Movable Typeのファイルにも、変な呪文のようなスクリプトが埋め込まれておりました。

これが巷でよく聞く「クラッキングツールでサイトが改ざんされて、スパムメールを大量に送信させられてしまう」という被害なんですね。全然他人事ではなかった。。。

作業している間も一時間ごとに「メール送信件数の上限を超過しております」のメールが届き続けるので、とりあえず汚染されたであろう1サイトをまるっと削除し、新しく借りたXサーバーへ移すことにしました。それで半日以上の時間を潰し、一度は解決したように思えました。

3日後に再び、スパムメール大量送信…?!

しかし、日曜日にも再び、大量メールの送信があったとロリポップからメールが。。。
それでロリポップに置いているサイトをXサーバーとwpXサーバーへ全部移行させる決心をしました。(確定申告まだ終わってなかったけど…)

合間に仕事や確定申告をしながら移行作業をしたので、2日もかかってしまったけど、ちょっとスッキリ。ロリポップが最近重かったので、XサーバーやwpXサーバーにして快適になりました。

後日、ロリポップのサポートからのメールによると、複数の海外IPからのアクセスが確認されたとのことでした。(不審なファイルは英語でないものもありました…)
メールの送信元となったページも知らせてくれましたが、メールフォームを設置していたページでしたので、悪用された疑いがあるとも書かれていました。真相はわかりませんけど。。。

しかし、ファイルを削除しても、パスワードを変更しても、再度被害が出るのはやはり怖いですね。サポートの方でも不審なファイルを探してくださったようですが、見つからなかったそうです。

あの手この手のハッカーやクラッカーを相手に、サーバー屋さんも大変ですよね。。。
とりあえず、新しいサーバーでは被害が出ないことを祈るばかりです。

jQuery:トリガーより上部に開くアコーディオン

$
0
0

検索フォームなどで、「もっと詳細な条件を追加する」という下向きの▼が付いたボタンをよく見かけます。
クリックすると、アコーディオンパネル(詳細な条件が追加できる入力欄)が下にびょーんと現れるものです。(トリガーになったボタンは下に下がり、上部に入力欄が現れます)

仕事でそれを作成する機会がありましたので、メモしておこうと思います。
WordPress以外の記事になりますが、WordPressの中で使いましたので…😌

デモ

シンプルなデモページを作成しましたので、動作を確認できます。

DEMO

HTML

<div class="dropdown">が、最初は隠れている部分です。
<div class="triger">が、トリガーになる部分です。

<div class="dropdown">
  
  <ul>
    <li>詳細情報</li>
    <li>詳細情報</li>
    <li>詳細情報</li>
    <li>詳細情報</li>
    <li>詳細情報</li>
  </ul>

</div><!-- .dropdown -->

<div class="triger">
  
  <div class="btn-more">詳細情報</div>

</div><!-- .triger -->

jQurey

<div class="dropdown">は最初は隠しておき、
<div class="btn-more">をクリックすると、
<div class="triger">より前のタグ.prev()
.slideToggle()します。

そして、$(this).toggleClass("close");で、ボタンをクリックするたびに.closeのクラスを追加したり、除去したりします。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

$(function(){
     $(".dropdown").hide();
     $(".btn-more").click(function(){
          $(".triger").prev().slideToggle();
          $(this).toggleClass("close");
     });
});

CSS

.closeが追加された時と除去された時で、WEBフォントを使い、矢印の向きを変えました。

.btn-more {
  width: 200px;
  text-align: center;
  background-color: #f1f1f1;
  padding: 10px 0;
  margin-left: 20px;
  cursor: pointer;
}

.btn-more::before {
  font-family: 'FontAwesome';
  content: "\f078";
  margin-right: 10px;
  color: #999;
}

.btn-more.close::before {
  font-family: 'FontAwesome';
  content: "\f077";
  margin-right: 10px;
  color: #999;
}

.dropdown {
  background-color: #f1f1f1;
  padding: 15px;
}

.dropdown ul { margin-left: 2em;}
.dropdown ul li { list-style-type: disc;}

以下のサイト様を参考にさせていただきました。ありがとうございます。

参考サイト

トリガーの上に展開するアコーディオン

Swipebox:スマホのスワイプ対応!画像拡大表示jQueryプラグインをWordPressで使う

$
0
0

久々にライトボックス(画像拡大表示)プラグインを紹介したいと思います。
スマホやタブレットのスワイプにも対応しており、レスポンシブですので、今どきのライトボックスですね。最近よくお世話になっております。

プラグインといっても、WordPress用プラグインではありませんので、ダウンロードして設置します。基本的には、jsファイルとcssファイルを読み込み、ページの中の<a>タグにclass="swipebox"を追加することで動作するのですが、自動で追加させます。

Swipebox

スマホやタブレットのスワイプにも対応。レスポンシブな画像拡大表示jQueryプラグイン。
配布元 : Swipebox(Ver. 1.4.4)

デモ

シンプルなデモページを作成しましたので、動作を確認できます。

DEMO

使い方

  1. 配布元より、Swipebox(Ver. 1.4.4)をダウンロードします。(swipebox-master.zip)
    ※ページ最下部に「Download」ボタンあり。

  2. 解凍すると「swipebox-master」というフォルダが展開され、中にはたくさんのファイルがありますが、「src」フォルダの中だけを使用します。

    jsファイルとcssファイルは、どちらか一つずつで良いのですが、「jquery.swipebox.min.js」と「swipebox.min.css」の軽い方で良いと思います。
    上記ファイルを自分のテーマフォルダへ設置します。

header.php

header.php の<head>内に、以下のように書いてcssファイルを読み込みます。

<link rel="stylesheet" href="<?php echo esc_url( get_template_directory_uri() ); ?>/css/swipebox.min.css">

footer.php

footer.php の</body>タグの直前に、jQueryファイルとjsファイルを読み込み、jpg・jpeg・png・gifファイルへ<a>タグにclass="swipebox"を追加する記述を書きます。
※jQueryファイルはすでに読み込んであるのであれば、ここで再度読み込みは必要ありません。

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<script type="text/javascript" src="<?php echo esc_url( get_template_directory_uri() ); ?>/js/jquery.swipebox.min.js"></script>

<script>
    jQuery(function() {
        jQuery('a[href$=jpg],a[href$=jpeg],a[href$=png],a[href$=gif]').swipebox();
    });
</script>

以上で完成です!

WP_Queryループで抽出条件を複数指定して表示する

$
0
0

カスタムタクソノミー(カテゴリー・タグ)やカスタムフィールドなど、抽出条件を複数指定して、WP_Queryループで表示させる方法を紹介します。
私は習得するのにちょっと時間がかかってしまいましたが…😅、一度覚えてしまうと、トップーページや固定ページ、サイドバーなどにいろいろ使えて、とにかく便利です!

いくつかサンプルを書いておきますので、どなたかのお役に立てればうれしいです。
※カスタムフィールド名に「wpcf-」が付いているのは、「Toolset Types」を利用しているためです。

サンプル

チェックボックスにチェックの入った記事から並べる。ソート順も複数指定

【条件】

  • カスタム投稿「gourmet」の記事
  • カスタムタクソノミー「area_category」の、ターム「tokyo」に属する記事
  • 10件表示
  • カスタムフィールド「wpcf-gensen」のチェックボックスにチェックの入った記事から順に並べる
  • 新しい記事から順に並べる
<?php
  $args = array(
    'post_type' => 'gourmet', /* カスタム投稿名が「gourmet」 */
    'posts_per_page' => 10, /* 表示する数 */
    'tax_query' => array(
      array(
        'taxonomy' => 'area_category', /* カスタムタクソノミー名が「area_category」 */
        'field' => 'slug',
        'terms' => 'tokyo' /* ターム名が「tokyo」 */
      )
    ),
    'meta_query' => array(
      'relation' => 'AND',
      'meta_gensen' => array(
        'key'     => 'wpcf-gensen', /* カスタムフィールド名が「wpcf-gensen」 */
        'value' => array("1", "0"), /* チェックボックスのON・OFF */
        'type' => 'char'
        )
      ),
    'orderby' => array(
      'meta_gensen' => 'desc', /* チェックボックス「wpcf-gensen」にチェックの入ったものから順に */
      'date' => 'desc' /* 新しい記事から順に */
      ),
    );
?>

複数条件指定、カスタムフィールドの数値で並べ替える

【条件】

  • カスタム投稿「takuhai」の記事
  • カスタムタクソノミー「category_company」の、ターム「company_a」に属する記事
  • 全て表示
  • カスタムフィールド「wpcf-family」 の値が「3」の記事
  • カスタムフィールド「wpcf-monthly」の値が「10000より上」の記事
  • カスタムフィールド「wpcf-monthly」の値の少ないものから順に並べる
<?php
  $args = array(
    'post_type' => 'takuhai', /* カスタム投稿名が「takuhai」 */
    'posts_per_page' => -1, /* 全記事表示 */
    'tax_query' => array(
      array(
        'taxonomy' => 'category_company', /* カスタムタクソノミー名が「category_company」 */
        'field' => 'slug',
        'terms' => 'company_a' /* ターム名が「company_a」 */
      )
    ),
    'meta_query' => array(
      'relation' => 'AND',
      'meta_family' => array(
        'key' => 'wpcf-family', /* カスタムフィールド名が「wpcf-family」 */
        'value' => '3', /* カスタムフィールドの値 */
        'type' => 'numeric',
        'compare' => '=' /* 値一致 */
      ),
      'meta_monthly' => array(
        'key' => 'wpcf-monthly', /* 月額利用額・カスタムフィールド名が「wpcf-monthly」 */
        'value' => '10000', /* カスタムフィールドの値 */
        'type' => 'numeric',
        'compare' => '>' /* 値より上 */
      )
    ),
    'orderby' => array(
      'meta_monthly' => 'asc' /* 月額利用額の少ないもの順 */
    )
  );
?>

Toolset Types:単一カスタムフィールドの繰り返し

$
0
0

繰り返しカスタムフィールドが作成できる無料のプラグインと言えば、「Smart Custom Fields」が有名かなと思いますが、「Toolset Types」でも作成できますので、紹介したいと思います。

繰り返しフィールドは、同じフィールドに複数の値を含めたい場合に便利です。たとえば、複数の電話番号を持つ人がいるとします。繰り返しフィールドを使用すると、1人の人に異なる電話番号を複数追加することができます。

公式サイトのドキュメントから引用しています。(英語だから辛いけど…😓

Repeating Fields

https://wp-types.com/documentation/user-guides/repeating-fields/
「Toolset Types」での繰り返しカスタムフィールドの使い方を説明しているページ。

繰り返し可能なカスタムフィールドの作り方

カスタムフィールドを作成するときに、「シングルまたは繰り返しフィールドですか?」の欄を「このフィールドの複数インスタンスを許可する」にします。

編集画面には、以下のようにフィールドを追加するオレンジのボタンが現れるので、複数入力したい場合はクリックして入力します。

機能としては、以下のことができます。

  • 繰り返すフィールドの順序をドラッグボタンで並べ替えることができます。
  • すでに入力したフィールドを削除することができます。

作成方法は以上です。簡単ですね!

繰り返しカスタムフィールドの表示方法

公式サイトのドキュメントでは、編集画面のコンテンツ(本文)箇所で表示する書き方っぽいですね。私はテンプレート側で使いたいので、そちらの書き方を紹介していければと思います。

要は、"separator" => "</li><li>"というように、項目間のセパレータを利用するだけです。

<ul>タグで表示

<ul>
	<li><?php echo(types_render_field( "tel", array( "separator" => "</li><li>" ) )); ?></li>
</ul>

すると、以下のように出力されます。

  • 0123-45-6789
  • 1234-56-7890

何番目のフィールドかを指定して表示することが可能

また、何番目のフィールドかを指定して表示することも可能です。
例えば、以下のように"index" => "0"とすると、該当の繰り返しフィールドに、たくさん登録されていても、一番目のフィールドを表示します。

ゼロベースの番号付けを使用されているため、最初の要素はindex = "0"、3番目の要素はindex = "2"になることに注意が必要です。

<ul>
  <li><?php echo(types_render_field( "tel", array( "index" => "0" ) )); ?></li>
</ul>

上記の書き方では、1番目のフィールドが表示されます。

  • 0123-45-6789

カスタムフィールドのグループを繰り返したい場合

ここで紹介したのは、1つのカスタムフィールドを繰り返し使いたいときの方法ですが、おそらくフィールドをグループ化して、それらを繰り返していきたい場合の方が多いでしょう。
その方法は、以下の記事をご覧ください。

Toolset Types:カスタムフィールドグループの繰り返しを行う


Toolset Types:カスタムフィールドグループの繰り返し

$
0
0

「Toolset Types」で、カスタムフィールドグループの繰り返しを行うには、まず、親になるカスタム投稿と、子になるカスタム投稿を作成します。そして、子になるカスタム投稿にカスタムフィールドのグループを作成して、これを実現します。

では、公式サイトのドキュメントに合わせて、「家」と「部屋」という例で作成していきましょう。

1. 準備

1-1. カスタム投稿タイプを作成

  1. 「家(house)」と「部屋(room)」の2つのカスタム投稿を作成します。
    以下の例では、部屋の大きさで並べ替えをしています。

    • カスタム投稿「家」を作成

    • カスタム投稿「部屋」を作成

  2. それぞれのカスタム投稿で、親子関係を指定します。

    カスタム投稿「家」の設定では、子(Children Post Types)に「部屋(room)」を指定します。

    カスタム投稿「部屋」の設定では、親(Parent Post Types)に「家(house)」を指定します。

1-2. 子になるカスタム投稿タイプに、繰り返したいカスタムフィールドグループを作成

  1. 繰り返したいカスタムフィールドグループを作成します。
    「部屋の広さ」と「部屋の写真」のフィールドを登録してみました。

  2. カスタムフィールドグループを使用する場所に、子(Children Post Types)になるカスタム投稿「部屋」を指定します。

  3. 以上で、準備完了です。

2. 投稿

  1. カスタム投稿タイプ「家」で、「新規追加」をクリックします。
    「Post繋がり」という欄ができているので、「新規roomを追加」をクリックします。

  2. 必要なだけ、カスタムフィールドのグループが繰り返し作成できます。

    この「Post繋がり」の欄は、ポストリレーションシップセクションというようです。
    柔軟性があり、エントリを並べ替えたり、「編集」ボタンをクリックして詳細モードで編集したり、アイテムを削除したりできます。

    詳細モード

Creating Groups of Repeating Fields

https://wp-types.com/documentation/user-guides/creating-groups-of-repeating-fields-using-fields-tables/
「Toolset Types」でのカスタムフィールドグループの繰り返しを行う方法を説明しているページ。

3. 表示

3-1. 表示A

以下のようなコードで、表示ができました。
子投稿「room」を指定するところが肝です。

Types Fields APIを使う部分でも、"id"=> "$child_post->ID"と指定し、子投稿から引っ張ってくるという記述も必要になります。

<?php 
$child_posts = types_child_posts( "room" );
foreach ($child_posts as $child_post) 
{ ?>

<!-- ▽ ループ開始 ▽ -->

  <div class="room-listing">
    <h5><?php echo $child_post->post_title; ?></h5>
    <p class="room-image"><?php echo types_render_field( "room-image", array( "id"=> "$child_post->ID", "size" => "thumbnail" )); ?></p>
    <p class="room-size"><?php echo types_render_field( "room-size", array( "id"=> "$child_post->ID")); ?>m²</p>
  </div><!-- .room-listing -->

<!-- △ ループ終了 △ -->

<?php } ?>

▼ 出力結果

3-2. 表示B(カスタムフィールドの値で並べ替える)

カスタムフィールドの値で並べ替えることも可能です。

<?php 
  $child_args = array(
  'post_type' => 'room',
  'numberposts' => -1,
  'meta_key' => 'wpcf-room-size',
  'orderby' => 'meta_value',
  'order' => 'ASC',
);
$child_posts = get_posts($child_args); ?>

<?php foreach ( $child_posts as $child_post ) : setup_postdata( $child_post ); ?>
 
<!-- ▽ ループ開始 ▽ -->
 
  <div class="room-listing">
    <h5><?php echo $child_post->post_title; ?></h5>
    <p class="room-image"><?php echo types_render_field( "room-image", array( "id"=> "$child_post->ID", "size" => "thumbnail" )); ?></p>
    <p class="room-size"><?php echo types_render_field( "room-size", array( "id"=> "$child_post->ID")); ?>m²</p>
  </div><!-- .room-listing -->
 
<!-- △ ループ終了 △ -->
 
<?php endforeach; ?>

<?php wp_reset_postdata(); ?>

▼ 出力結果

並べ替えも可能

Displaying child posts

https://wp-types.com/documentation/customizing-sites-using-php/displaying-child-posts/
「Toolset Types」での子投稿を表示する方法を説明しているページ。

単一のカスタムフィールドの繰り返しについては、以下のページをご覧ください。

Toolset Types:単一カスタムフィールドの繰り返し表示

Toolset Types:カスタムフィールド表示方法【6】チェックボックス(Checkbox)

$
0
0

以前、カスタムフィールドで複数選択のチェックボックスの使い方を紹介したことがありましたが、今回は単一のチェックボックスです。

こちらのチェックボックスは、データの真と偽を取得するために使用します。(オン:真、オフ:偽)

Toolset Typesでは、以下のような仕様になっているようです。

  • チェックボックスをオンにすると、値1が返されます。
  • チェックボックスがオフの場合、値は返されません。
  • チェックボックスがチェックされておらず、コントロールに「0をデータベースに保存する」が設定されている場合は、0が返されます。

私は、以下のような方法で、意図通りに表示させています。

  • 「注目記事」「厳選商品」「トップページに表示する」などのチェックボックスを作成する
  • テンプレートに条件(チェックボックスの有無を判別)を指定したループを書く

そんなの、カスタムフィールドを使用しなくてもタグを使えばできる、という意見もありそうですが、編集画面がわかやすくなると思いますので、この方法をよく使っています。

チェックボックス(Checkbox)

例として、トップページに表示させるというチェックボックスを作成し、チェックボックスをオンにした記事のみをトップページに表示させる方法を紹介します。

「トップページに表示させる」というチェックボックスを作成

index.php や front-page.php に、以下のようなPHPを記述

該当カスタムフィールドのデータが、「1」の場合の記事を取得・表示させています。

<?php
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 5, /* 表示する数 */
    'meta_query' => array(
      'meta_recommend' => array(
      'key' => 'wpcf-recommend', /* カスタムフィールド名 */
      'value' => '1',
      'type' => 'numeric',
      'compare' => '='
    ),
  ),
); ?>

<?php $my_query = new WP_Query( $args ); ?>

<ul>

<?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>

<!-- ▽ ループ開始 ▽ -->

  <li>
    <h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
    <p class="published"><?php the_time( get_option( 'date_format' ) ); ?></p>
  </li>

<!-- △ ループ終了 △ -->

<?php endwhile; ?>

</ul>

<?php wp_reset_postdata(); ?>

簡単ですよね。これ、使用頻度が高いです。

また、イベント情報などを掲載する場合は、本日の日付を取得して、本日以降の記事のみを掲載する、などの応用も可能です。

同じチェックボックスでも、複数選択のチェックボックスの使い方の紹介は、以下のページをご覧ください。

Toolset Types:カスタムフィールド表示方法【5】チェックボックス(Checkboxes)

Toolset Types:カスタムフィールド表示方法【7】日付ピッカー(Date)

$
0
0

「Toolset Types」のカスタムフィールドの日付ピッカーの作成・表示方法をご紹介したいと思います。

日付ピッカーを使うメリットとして、入力方法が統一でき、入力してしまえば、後で表示形式も一括で変更できたりします。

また、日付ピッカーで入力したデータは、テキストで出力させる他、カレンダーで表示させることも可能です。

1. 日付ピッカーのカスタムフィールドの作成方法

  1. 「投稿Field Groupの編集」で「新しいフィールドを追加する」ボタンをクリック。

  2. 「日付」のボタンを選ぶ。

  3. 「フィールド名」、「フィールドスラグ」は必須で、あとはデフォルトのままでOK。
    設定できたら「Field Groupを保存する」ボタンをクリック。

  4. これで、このカスタムフィールドグループが有効になっているページの編集画面には、以下のような、日付ピッカーのカスタムフィールドが表示されます。

  5. 時刻も表示したい場合

    「プレースホルダー」の「時間」の項目で、「日付と時刻を入力する」を選択します。

    時刻が入力できるセレクトボックスが表示されます。

    2. 日付ピッカーのカスタムフィールドの表示方法

    2-1. テキストで表示する

    Types Fields APIで、以下のようなコードで表示することができます。

    <?php echo(types_render_field("open-date", array())); ?>

    ▼ 出力結果

    この表示形式は、WordPressの管理画面「設定」→「一般」→「日付のフォーマット」で変更することができます。
    ただ、サイト全体の設定とは変えたい、独自のフォーマットで出力させたい場合、以下のように記述することで可能です。

    <?php echo(types_render_field("open-date", array("format" => "Y年n月d日"))); ?>

    2-2. カレンダーで表示する

    最近まで知らなかったのですが、"style" => "calendar"と設定することで、カレンダーでの表示も可能です。

    <?php echo(types_render_field("open-date", array("style" => "calendar"))); ?>

    ▼ 出力結果

Toolset Types:カスタムフィールド表示方法【8】数字・数値(Number)

$
0
0

「Toolset Types」のカスタムフィールドの数字・数値の作成・表示方法をご紹介したいと思います。
シングルラインとは違い、半角数字以外(全角文字など)を入力すると、エラーを表示し入力できなくなりますので、入力データの形式を統一したいときなど便利です。

1. 数字・数値のカスタムフィールドの作成方法

  1. 「投稿Field Groupの編集」で「新しいフィールドを追加する」ボタンをクリック。

  2. 「Number」のボタンを選ぶ。

  3. 「フィールド名」、「フィールドスラグ」は必須で、あとはデフォルトのままでOK。
    設定できたら「Field Groupを保存する」ボタンをクリック。

  4. これで、このカスタムフィールドグループが有効になっているページの編集画面には、以下のような、数字・数値のカスタムフィールドが表示されます。

半角数字以外(全角文字など)を入力すると、エラーを表示します

数字・数値専用のフィールドになりますので、半角数字以外(全角文字など)を入力すると、エラーを表示し、入力不可になります。

2. 数字・数値のカスタムフィールドの表示方法

2-1. カンマ無し

Types Fields APIで、他のカスタムフィールドと同じように、以下のようなコードで表示することができます。
この場合、カンマは付きません。

<?php echo(types_render_field("price", array())); ?>

▼ 出力結果

2-2. カンマ有り

カンマ付きにしたい場合は、以下のように書きます。

<?php echo number_format((types_render_field("price", array()))); ?>

▼ 出力結果

カスタムフィールドに入力された値を自動計算して平均値を出す

$
0
0

WordPressのカスタムフィールドに入力した値の平均値を表示したい。そんな案件があり、PHPを使って実現したことがありましたので、ご紹介いたします。

同一カテゴリーの特定のカスタムフィールドを計算して、平均値を出すことも可能です。
私はそのPHPを外部ファイル化して、表示させたいページに読み込む使い方をしたりします。
口コミサイトや不動産サイトなど、点数や価格のカスタムフィールドを使う時に使えますね!

特定のカスタムフィールド平均値を計算する

詳しいことは忘れてしまったのですが…😅、いろんなサイトを調べまくり、結果以下のコードで計算できました。

「gourmet」というカスタム投稿の、「gourmet_category」というタクソノミーの、「lunch」というタームに属する記事の、「price」というカスタムフィールドに入力された値の平均値を出しています。

<?php $args = array(
  'post_type' => 'gourmet', /* カスタム投稿名 */
  'tax_query' => array(
    array(
      'taxonomy' => 'gourmet_category', /* タクソノミー名 */
      'field' => 'slug',
      'terms' => array( 'lunch' ), /* タームのスラッグ名 */
    )
  ),
  'posts_per_page' => -1
); ?>

<?php $my_posts = get_posts( $args );
  $n = 0;
  $sum = 0;
  foreach($my_posts as $p) {
    $sum  += get_post_meta($p->ID,'wpcf-price',true);
    $n++;
  }
  if ($n!=0) {
    $heikin_price = $sum / $n;
    echo number_format( $heikin_price );
  }
?>円

※「wpcf-」が付いているのは、「Toolset Types」で作成したカスタムフィールドだからです。

number_format();は、PHPの数値を3桁のカンマ区切りにする関数です。

もっと良い方法があるのかも知れませんが…、こんな感じでもできましたという例でした!

注意点

計算に使用するカスタムフィールドは、数字・数値タイプで作成すると良いです。
(※半角数字でしか計算できません)

Viewing all 75 articles
Browse latest View live