2020.03.02

WordPressの記事公開時にカスタムフィールドの値を更新する方法

こんにちは、webエンジニアのゾノ( @ozonosho )です。

今日のブログではWordPressの記事公開時にカスタムフィールドの値を更新する方法を紹介したいと思います。

たとえば、各記事のView数用のカスタムフィールドを作り、記事を表示するたびにそのカスタムフィールドの値を更新するという作りのサイトは多いと思います。ブロガー向けの有名テーマなどもそういった仕様で作られています。

そういった仕様の場合、記事ページが誰かに閲覧されてはじめてカスタムフィールドの値が生成されるので、誰かに閲覧されるまではカスタムフィールドをkeyにしてget_postsなどの関数を利用しようとしても記事を抽出できません。

僕の運営するサイトでもそういった仕様でview数をカウントしているため、記事公開時にカスタムフィールドの値を更新したいと思って今回の処理を加えました。

WordPressの記事公開時にカスタムフィールドの値を更新する方法

実装は簡単です。下記のコードをfunctions.phpに記述してください。

function new_post_create_cf($new_status, $old_status, $post) {
  if($new_status == 'publish') {
    $key = 'カスタムフィールド名';
    $value = get_post_meta($post->ID, $count_key, true);
    if($value=='') {
        $value = '挿入したい値';
        delete_post_meta($post->ID, $key);
        add_post_meta($post->ID, $key, $value);
    }
  }
}
add_action('transition_post_status', 'new_post_create_cf', 10, 3);

たとえば、僕のサイトの場合は各記事のview数用に「post_views_count」というカスタムフィールドを用意しているので、下記のコードをfunctions.phpに記述しています。

function new_post_create_view($new_status, $old_status, $post) {
  if($new_status == 'publish') {
    $count_key = 'post_views_count';
    $count = get_post_meta($post->ID, $count_key, true);
    if($count=='') {
        $count = 0;
        delete_post_meta($post->ID, $count_key);
        add_post_meta($post->ID, $count_key, $count);
    } else {
      $count++;
      update_post_meta($post->ID, $count_key, $count);
    }
  }
}
add_action('transition_post_status', 'new_post_create_view', 10, 3);

これで管理画面から記事を公開すると同時に「post_views_count」に0がセットされます。
(すでに値がある場合には+1されます)

おわりに

以上、今回の記事ではWordPressの記事公開時にカスタムフィールドの値を更新する方法を紹介させていただきました。

当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。

あなたのサイトに理想の機能を実装!WordPressカスタマイズサービス

本サービスはあなたのWordPressサイトに理想の機能を実装するサービスとなります。 どのような機能・要望でも実現可能です! Wo......

→この記事を読む