ワードプレスにて、PHPからワードプレスの投稿の関数を使い自動連続投稿を行なっています。その際のタイトルと完全一致する投稿が過去にあった場合、falseを返す方法を教えてください。

ワードプレスには重複削除用プラグインがありますが、投稿が数万件あるためいつもエラーになり動作しません。
そこで、投稿時にそのタイトルと既存タイトルを照らしあわせ、られればと思います。

具体的な関数名等を教えて頂けますと幸いです。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/09/18 02:31:22
  • 終了:2012/09/23 15:47:51

ベストアンサー

id:rouge_2008 No.2

rouge_2008回答回数593ベストアンサー獲得回数3502012/09/23 02:59:07

ポイント100pt

文字列は''で囲む必要があります。
http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html

$new_Title = "新規投稿する予定のタイトル";
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_title = '$new_Title' LIMIT 1");
if ($wpdb->num_rows > 0) {
    // 同一タイトルがあった場合
} else {
    // 同一タイトルがなかった場合
}


※公開ステータスに限定しないと、下書きなども拾ってしまいますので、指定した方がいいかもしれません。

新しい質問にあったLIKEで部分一致検索をする場合のSQLです。

$new_Title = "新規投稿する予定のタイトル";
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_title LIKE '%$new_Title%' AND $wpdb->posts.post_status = 'publish' LIMIT 5");
if ($wpdb->num_rows > 0) {
    // 同一タイトルがあった場合
} else {
    // 同一タイトルがなかった場合
}


※上記は予定タイトルの前後に違う文字列がある場合にも一致しますので、前が一致する場合、後ろが一致する場合に限定する場合は、それぞれ「$new_Title%」「%$new_Title」に変更する必要があります。
http://dev.mysql.com/doc/refman/5.1/ja/string-comparison-functions.html

※特定の投稿タイプに限定する場合、「AND $wpdb->posts.post_type = 'カスタム投稿タイプなど投稿タイプ名'」を指定します。
※『日本語と英語両方のタイトル』という事ですが、特に何もしなくても日本語・英語関係なく検索可能です。
タイトルが特別な形式で保存されているのでしょうか?

id:rouge_2008

読み込むファイルは、wp-config.phpだけで大丈夫です。
あるいは、studiocherryさんから回答のあったwp-load.phpでもいいです。

2012/09/23 03:17:46

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/09/18 13:34:53

データベース問い合わせ例

$new_Title = "新規投稿する予定のタイトル";
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_title = $new_Title LIMIT 1);
if ($wpdb->num_rows > 0) {
    // 同一タイトルがあった場合
} else {
    // 同一タイトルがなかった場合
}

http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class

id:rouge_2008 No.2

rouge_2008回答回数593ベストアンサー獲得回数3502012/09/23 02:59:07ここでベストアンサー

ポイント100pt

文字列は''で囲む必要があります。
http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html

$new_Title = "新規投稿する予定のタイトル";
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_title = '$new_Title' LIMIT 1");
if ($wpdb->num_rows > 0) {
    // 同一タイトルがあった場合
} else {
    // 同一タイトルがなかった場合
}


※公開ステータスに限定しないと、下書きなども拾ってしまいますので、指定した方がいいかもしれません。

新しい質問にあったLIKEで部分一致検索をする場合のSQLです。

$new_Title = "新規投稿する予定のタイトル";
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_title LIKE '%$new_Title%' AND $wpdb->posts.post_status = 'publish' LIMIT 5");
if ($wpdb->num_rows > 0) {
    // 同一タイトルがあった場合
} else {
    // 同一タイトルがなかった場合
}


※上記は予定タイトルの前後に違う文字列がある場合にも一致しますので、前が一致する場合、後ろが一致する場合に限定する場合は、それぞれ「$new_Title%」「%$new_Title」に変更する必要があります。
http://dev.mysql.com/doc/refman/5.1/ja/string-comparison-functions.html

※特定の投稿タイプに限定する場合、「AND $wpdb->posts.post_type = 'カスタム投稿タイプなど投稿タイプ名'」を指定します。
※『日本語と英語両方のタイトル』という事ですが、特に何もしなくても日本語・英語関係なく検索可能です。
タイトルが特別な形式で保存されているのでしょうか?

id:rouge_2008

読み込むファイルは、wp-config.phpだけで大丈夫です。
あるいは、studiocherryさんから回答のあったwp-load.phpでもいいです。

2012/09/23 03:17:46
  • id:iori753
    ご回答ありがとうございます。
    こちらは同一サーバのオリジナルPHPから使用する場合は、function.phpをインクルードしたら宜しいのでしょうか。

    クラスを使用する方法がありましたら教えて頂けますと幸いです。
  • id:windofjuly
    うぃんど 2012/09/19 21:03:25
    「ワードプレスにて」ではなく「オリジナルPHPから」であるならば、
    下記2つをインクルードする。
    wp-config.php wordpressの環境設定
    wp-includes/wp-db.php データベース接続クラス
  • id:iori753
    ありがとうございます。
    普通に動いてはいるようなのですが、なぜかecho文で重複の有無をif分岐で出力しているのですがどちらも出力されない状況です。
    もう少し調べてみます。
  • id:iori753
    お世話になります。
    やはり重複がチェックできていないようでした。
    like にして $title%にしてもダメでした。
  • id:iori753
    カスタム投稿タイプを使用しているからでしょうか。
    それにしてもpostsテーブルに入っていると思いますし、わからない状況です。
  • id:iori753
    rouge_2008様のお陰で解決できました。カスタム投稿タイプだからかと思いPHPmyadminを開いていろいろなカラム名で試したりなど、時間がかかっていた所だったので大変助かりました。

    本当にありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません