Postmetaテーブル内の0以外の値を持つすべてのメタキーを0の値に更新する必要があります。
私はこれを試してみました..愛はありません(私は理由を理解することはできませんが....):
$status = $wpdb->query("UPDATE {$wpdb->prefix}postmeta SET meta_value=0 WHERE meta_key = _wti_like_count AND meta_value <> '0'");
私はこのコンセプトにいますが、キーリストで "!0"は0ではないと言いますか?
$wpdb->update('wp_postmeta', array('_wti_like_count' => '0'), array('_wti_like_count' => '0'));
どうもありがとうございます。
アップデート:私は$wpdb->query
を以下のように修正しました。
$status = $wpdb->query("UPDATE {$wpdb->prefix}postmeta SET meta_value='0' WHERE meta_key = '_wti_like_count' AND meta_value <> '0'");
しかし、私はまだ$wpdb->update
のWHERE
パラメータにキーペア配列を渡して!=
値を要求する方法があるかどうか知りたいです。
$wpdb
クラスのプロパティ次のようにallデフォルトのWordPressテーブルを使うことができます。
$GLOBALS['wpdb']->postmeta
そのためprefix
などを使う必要はありません。
meta_query
カスタムフィールドパラメータ のドキュメントからわかるように、<>
(つまり「等しくない」)演算子のようなものはありません。 WPの同等の演算子は、!=
(人間の言葉: "not is")またはNOT LIKE
である必要があります。
だから、単に次の行に沿って何かをする:
$query = new WP_Query( array(
'meta_query' => array(
array(
'key' => '_wti_like_count',
'value' => '0',
'compare' => 'NOT LIKE',
# 'type' => 'numeric'
)
)
) );
これは、このメタ値を使ってすべての投稿をクエリします。私が疑問に思うのは、なぜあなたがstring
をinteger
として手に入れたのかということです。私はそれをしないでしょう、特に私がカウンターを使うならばそうしないでください。私がコメントにしたものを見てください:type
、これは後であなたにもっともっと具体的な質問を許すでしょう。
それからそれらを単純にループして値を更新します。
if ( $query->have_posts() )
{
while ( $query->have_posts() )
{
$query->the_post();
# Do debugging, logging or sleep() here to avoid timeouts
update_post_meta( '_wti_like_count', '0', true );
# I still believe it should be an INTeger
update_post_meta( '_wti_like_count', 0, true );
}
}
どこで!=を使用することは可能であるように見えません。これがupdate()
メソッドからの関連コードです。
$where_formats = $where_format = (array) $where_format;
foreach ( (array) array_keys( $where ) as $field ) {
if ( !empty( $where_format ) )
$form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0];
elseif ( isset( $this->field_types[$field] ) )
$form = $this->field_types[$field];
else
$form = '%s';
$wheres[] = "`$field` = {$form}";
}
$wheres[]
行が言っています。これは=
のみが使用されていることを示しています。その配列は後で使用されます。
$sql = "UPDATE `$table` SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres );
あなたの場合、クエリは0
ではない値をチェックせずに動作したかもしれません。結果は同じですが(より多くの行が影響を受けますが)、このメソッドはWHERE句の=
のみに制限されているように見えます。