質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

1回答

2181閲覧

[Wordpress]csvで登録した投稿のカテゴリーを、指定日時に変更する方法

rela

総合スコア8

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2016/07/01 08:00

編集2022/01/12 10:55

###前提・実現したいこと
Wordpressを利用した情報集約サイトを作成しています。現在、フォームの情報をまとめたcsvを利用した記事の一括登録機能を作成しています。その中で以下の機能の2番がうまく実現せずに困っています。

  1. Really Simple CSV Importerとカスタムフィールドテンプレートを利用して、csvで記事をまとめてインポートし、カスタムフィールドに値を入れる

http://notnil-creative.com/blog/archives/3465

  1. カスタムフィールドの iscsvに値があるか(csvでは"1"を入れています)を判定させ、csvでインポートしている場合は同じくカスタムフィールドの pub_endに記入された日時になったらカテゴリーを pastに変更する

###発生している問題・エラーメッセージ
1の部分は成功しています。
2について、$termにカテゴリーの値が入っている所までは確認できたのですが、該当する記事を取得することができていないと考えています。
その後の処理が正しいかもまだ検証できていません。

原因、もしくは目的の別達成方法などわかる方がいましたら、ご教授いただけると幸いです。

###試したこと
この記事を参考に、該当するpostの取得には va-simple-expiresを参考に組み立てています。[「利用させていただいています。」からご指摘により変更]

term_exists()が動いているかはDebug Bar Consoleを利用して確認しました。

pub_endには"2016/6/6"のような値を保存しています。

###該当のソースコード

dr-simple-category-changer.php

php

1<?php 2if ( !function_exists( 'dr_simple_category_changer_setup' ) ) : 3 function dr_simple_category_changer_setup() { 4 if ( !class_exists( 'DR_SIMPLE_CATEGORY_CHANGER_SETUP' ) ) { 5 class DR_SIMPLE_CATEGORY_CHANGER_SETUP extends _DR_SIMPLE_CATEGORY_CHANGER { 6 protected function __construct() { 7 parent::__construct(); 8 } 9 } 10 } 11 12 $dr_simple_category_changer = DR_SIMPLE_CATEGORY_CHANGER_SETUP::instance(); 13 } 14endif; // dr_simple_category_changer_setup 15add_action( 'plugins_loaded', 'dr_simple_category_changer_setup' ); 16

** 以下は同一ファイル内class _DR_SIMPLE_CATEGORY_CHANGER 内になります**

php

1protected function __construct() { 2 add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) ); 3 add_action( 'init', array( &$this, 'simple_category_changer' ) ); 4}

php

1 2function simple_category_changer() { 3 global $wpdb; 4 5 $result = $wpdb->get_results( $wpdb->prepare(" 6 SELECT postmetadate.post_id 7 FROM $wpdb->postmeta AS postmetadate, $wpdb->postmeta AS postmetadoit, $wpdb->posts AS posts 8 WHERE postmetadoit.meta_key = 'iscsv' 9 AND postmetadoit.meta_value = '1' 10 AND postmetadate.meta_key = 'pub_end' 11 AND postmetadate.meta_value <= %s 12 AND postmetadate.post_id = postmetadoit.post_id 13 AND postmetadate.post_id = posts.ID 14 AND posts.post_status = 'publish' 15 ", current_time("mysql") ) ); 16 17 18 $term = term_exists('past', 'category'); 19 20 21 if ( ! empty( $result ) && !empty($term )) : 22 $update_post = array(); 23 foreach ( $result as $cur_post ) : 24 remove_action( 'simple_category_changer','save_post' ); 25 wp_set_post_status($cur_post->post_id, $term->$term_id, 'category', false); 26 add_action( 'simple_category_changer','save_post' ); 27 endforeach; 28 endif; 29 30}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/07/01 18:16

「va-simple-expiresを利用」と書いてありますが、提示されたコードではSQLで取得されています。アクション「simple_category_changer」と機能の関係性も上記コードではわかりません。また、このコードはどのタイミングで動かすコードなのでしょうか。
rela

2016/07/02 02:41

@kei334 さん 拙い質問にご指摘ありがとうございます。postの取得について、正しくは「va-simple-expiresにありましたSQLを参考にして、取得」という意味になります。 アクションに関連していそうな部分を追記いたしました。全て同一ファイルとなります。コードを動かすタイミングとしては'init'時にsimple_category_changer()が動くと私は考えていました。もし違っていましたご教授いただけると幸いです。
guest

回答1

0

全体像が少し見通せていないため、気づいた所を指摘させてもらいます。

  1. 'init'時に起動する場合全ページ全アクセスで+1回以上のDBアクセスが起る

wp-cron などで定期実行するほうが負荷は少ないと思います。
0. simple_category_changer フィルタの使い方が間違っている
自身の作られたフィルタ(apply_filters()で自分で登録した物)だとした場合、foreach の前に remove_action、後に add_action すべき。
0. 自身の作られたフィルタで無い場合は、「simple_category_changer」と「save_post」が逆では。
ただ、提示されている関数も simple_category_changer なので、そもそも名前が重複している可能性が。
0. プラグインの作法とは違う書き方をされている
dr-simple-category-changer.php がプラグインと作られているとしたら add_action( 'plugins_loaded', 'dr_simple_category_changer_setup' ); とは書かないと思います。
プラグインとして設定されていれば、コードが呼ばれるタイミングで初期化してしまえば多くの場合問題ないはずです。

【WordPressのプラグインを開発しよう(初級編) | webOpixel】
http://www.webopixel.net/wordpress/631.html

PHP

1class ShowText { 2 function __construct() { 3 } 4} 5$stext = new ShowText;

【本気で作りたい人向け、WordPressプラグインの作成方法 | OXY NOTES】
http://oxynotes.com/?p=9321

【WordPressプラグイン開発のバイブルを読むと何ができるようになるか。 | WP-D】
https://wp-d.org/2014/07/23/5948/
この本はお勧めです。


【wp-cron で定期実行 | dogmap.jp】
https://dogmap.jp/2008/12/25/wp-cron/

【WordPressで擬似cronを使ってバッチ処理を定期実行させる方法 | コワーキングスペース7F】
http://office7f.com/2015/02/05/wordpress-wp-cron/


また、$wpdb->get_results でSQLを渡すほうが高速&柔軟なことも多いですが、WP_Queryを使った呼び出しでほどほどに絞り込めます。例えば「pastカテゴリではなくiscsvが1でpub_endが現在の日付をより過去の記事」みたいな指定も出来ると思います。当然、現在のSQLが問題なく呼び出せているのであればもちろんそのまま使われたら良いです。

【get_postsで、複数のカスタムフィールドをキーにして検索・取得する方法 | sand a lot Web & Music Create [札幌]】
http://www.sandalot.com/get_postsで、複数のカスタムフィールドをキーにして検/

【[WordPress] カスタムフィールドで絞り込んで一覧表示する | IT女子のお気に入りフォルダ】
http://sachips.byeto.jp/wordpress/wp-customfield-wpquery.html

【ちょいちょい忘れる『WP_Query』の使い方 | 予習と復習】
http://notebook.yamamotohiroyuki.com/wordpress/2012/08/15/ちょいちょい忘れる『wp_query』の使い方/


あまり回答になっていませんが、何かの参考になれば幸いです。

投稿2016/07/02 16:00

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問