人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ワードプレスにて、PHPからワードプレスの投稿の関数を使い自動連続投稿を行なっています。その際のタイトルと完全一致する投稿が過去にあった場合、falseを返す方法を教えてください。
ワードプレスには重複削除用プラグインがありますが、投稿が数万件あるためいつもエラーになり動作しません。
そこで、投稿時にそのタイトルと既存タイトルを照らしあわせ、られればと思います。

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


●質問者: maintour15
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど
●0ポイント

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

$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


2 ● rouge_2008
●100ポイント ベストアンサー

文字列は''で囲む必要があります。
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 = 'カスタム投稿タイプなど投稿タイプ名'」を指定します。
※『日本語と英語両方のタイトル』という事ですが、特に何もしなくても日本語・英語関係なく検索可能です。
タイトルが特別な形式で保存されているのでしょうか?


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ