Intereting Posts
WordPress внедряет вставленный AJAX контент Сортировка времени с помощью meta_key с использованием временной отметки UNIX из-за различий по времени Кнопка TinyMCE для вставки нескольких строк текста? Как показать количество сообщений в таксономии с расширенными настраиваемыми полями? Какая связь определяет, какие изображения появляются в 'uploaded to post' в диалоговом окне редактирования / добавления сообщений Как удалить сломанную тему из WordPress Admin (без FTP или Cpanel) расширенное настраиваемое поле Показать поле на специальной странице категории Проблема с использованием .htaccess для перенаправления feedburner feed получить файл резервной копии из базы данных wordpress за x дней apply_filters в контент, но игнорировать короткие коды $ wpdb-> base_prefix не получает родительский префикс сайта в многопользовательском режиме Показать 10 новых сообщений для каждого значения пользовательской таксономии Какой мини-фильтр используется для использования ядра WP? Как проверить, активна ли тема? Как управлять параметрами шрифта заголовка, расположенными в редакторе wysiwyg для сообщений и страниц

MySQL Query, который ищет сообщение с настраиваемым полем, затем изменяет категорию

Я ищу 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'); 

Прокрутите по идентификаторам, добавив отношения категорий вручную по мере продвижения.