Я ищу MySQL Query, который будет искать все сообщения с настраиваемым полем «meta_key_I_want_to_find», а затем, если пользовательское поле обнаружено, добавьте категорию в этот пост. Категория уже создана, поэтому мне просто нужно найти все сообщения с этой Meta_key, а затем добавить к ним категорию.
Я думал о чем-то вроде этого:
<?php $username="MY_MYSQL_USERNAME"; $password="MY_MYSQL_PASSWORD"; $hostname="MY_DATABASE_HOSTNAME"; //Your Database hostname usually $database="MY_DATABASE_NAME"; $my_text = "meta_key_I_want_to_find"; // What I'm searching for $my_category = '8'; // The category to add it to // Connect to MySQL and the database and verify: mysql_connect($hostname,$username,$password) or die(mysql_error()); echo "<p>Connected to MySQL."; mysql_select_db($database) or die(mysql_error()); echo "<br />Connected to " . $database . "</p>"; // Verify what we're looking for, for troubleshooting: echo "<p><b>Looking for " . $my_text . "</b></p>"; // Get the ID field (which is WordPress's post // number) from any posts that have your text: $query = "SELECT ID FROM wp_posts WHERE post_content LIKE '%$my_text%'"; // Take those results and go through them: $result = mysql_query($query) or die(mysql_error()); // While there are results... while($row = mysql_fetch_array($result)) { // Verify what we're doing -- changing post // number such-and-such... $thisPostHasIt = $row['ID']; echo "<p>Row " . $row['ID'] . " contains it, so...<br />"; // In the wp_term_relationships table, // update the category number ("term_taxonomy_id") // with the category number you specified -- but only // in one of the "result" rows. // We look for "object_id" to equal one of those // rows. (The object_id field refers to the WordPress // post number, just as the ID field did. Why two // different names? Who knows?) mysql_query("UPDATE wp_term_relationships SET term_taxonomy_id='$my_category' WHERE object_id = '$thisPostHasIt'"); // And tell us about it: echo "Changing post number " . $thisPostHasIt . " to category number ". $my_category . "</p>"; } echo "<p><b>All done!</b></p>"; //found on http://wordpress.org/support/topic/mysql-query-to-search-posts-and-change-categories ?>
… только вместо того, чтобы искать строку и заменять ее, мне нужно найти все сообщения с определенным мета-ключом, а затем добавить к ним категорию.
Любые предложения очень ценятся!
Я не могу сказать, имеется ли у вас API WordPress. (Этот код запускается из экземпляра WordPress или выполняется внешним скриптом в базе данных WordPress без самозагрузки самого WordPress?)
Если у вас есть WordPress API, легко получить список всех сообщений, имеющих значение postmeta с заданным ключом. Таким образом:
<?php $q = new WP_Query(array( "meta_key" => "meta_key_i_want_to_find" )); while ($q->have_posts()) : $q->the_post(); // Do something here. Eg: $posts[] = get_the_ID(); to collect IDs endwhile; wp_reset_query(); // If you just collected above, now do something with it...
Опять же, если у вас есть доступный вам WordPress API, вы можете добавить категорию в сообщение, используя wp_set_post_terms () .
Если у вас нет доступного вам WordPress API, вы можете получить представление данных, которые вам нужны, используя:
-- Modify to SELECT all and only the fields you intend to use. SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID=wp_postmeta.post_ID WHERE (meta_key='meta_key_i_want_to_find');
Прокрутите по идентификаторам, добавив отношения категорий вручную по мере продвижения.