web-dev-qa-db-ja.com

役職の投稿が既に存在するかどうかを確認

私は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を見ました。今、私はこれをどこにも定義していませんが、私が読んでいた場所はそれが建てられたことを示唆しているようでした。

すべて助けて感謝します!

ありがとう

5
rogy

はい $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を調べてください。 ポスト挿入機能があります

2
s_ha_dum
0
Altef four