私はxmlフィードを受け取り、それをwp-cronを使ってWordPressに投稿するプラグインを書いています。
同じ投稿を何度も追加し続けること以外は、すべて手間がかかります。
だから、私はそのタイトルの投稿がすでに存在するかどうかを確認するためのシステムに取り組んでいます。
私はこれを書いたが、それは常に「すでに存在する」を返す
global $wpdb;
$query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_title = %s', $article->heading);
$wpdb->query( $query );
if ( $wpdb->num_rows ) {
error_log('already exists');
} else {
wp_insert_post($post, $wp_error);
}
私はWordPressのデータベース側で作業するのがかなり初めてです、そして助けを求めてグーグルするとき私は$wpdb
を見ました。今、私はこれをどこにも定義していませんが、私が読んでいた場所はそれが建てられたことを示唆しているようでした。
すべて助けて感謝します!
ありがとう
はい $wpdb
は、ページが読み込まれるたびにWordPress Coreに組み込まれて読み込まれます。
あなたのコードに重大な問題は見当たりません。私はいくつかの改善点を提案するつもりです。なぜなら私はうまくいかないかもしれない場所をいくつか見ているからですが、大抵それはうまくいくはずです。そのため、$article->heading
は挿入されたpost_title
と一致しません。そう...
sanitize_title_with_dashes
でタイトルを正規化してみてください。これがWordPressがポストスラッグを作成する方法で、代わりにそのスラッグをチェックします。
global $wpdb;
$query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_name = %s', sanitize_title_with_dashes($article->heading));
$cID = $wpdb->get_var( $query );
ここで、クエリはスラッグまたはパーマリンクの末尾であるpost_name
を探しています。単一の変数を探しているので$wpdb->query
を$wpdb->get_var
に変更しました。これを$cID
に保存します。
あなたの条件付きのより良いチェックを使ってください。
if ( !empty($cID) ) {
しかし、これはまったく正しいアプローチではないかもしれません。 @kaiserによって言及されたXML_RPC APIを調べてください。 ポスト挿入機能があります 。
<?php post_exists( "post_name" ); ?>
https://developer.wordpress.org/reference/functions/post_exists/