Intereting Posts
База данных пользователей WordPress Получение имени пользователя в get_user_meta Как получить информацию о типе сообщения? Предоставление посетителям доступа к странице с защитой паролем через внешний скрипт Запросить множественную таксономию, основанную на другой таксономии Могу ли я создавать интерфейсные страницы профиля для редактирования с помощью WordPress? Как мне это сделать? Как решить ограничение памяти Woocommerce Получать данные из пользовательского типа сообщений в другой настраиваемый тип сообщения? активировать пользовательские виджеты боковой панели Как добавить re-captcha в поиск WordPress? как сделать персонализированные сообщения липкими? Вставка изображений удаляет атрибут класса Перемещение wordpress multi в другой домен и vhost – невозможно войти в систему и проблемы с меню Удалить все атрибуты заголовка ссылки Как добавить изображение поверх логотипа заголовка в тему для детей?

orderby = meta_value_num создает дубликаты сообщений

Мне нравится мой facebook, который хранится в настраиваемом поле с именем fb_likes. мой почтовый порядок wordpress сортируется по этому полю, например.

'meta_key' => 'fb_likes', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'ignore_sticky_posts' => 1, 'posts_per_page' => $wp_query->get('posts_per_page'), 'paged' => $paged 

На первый взгляд это работает нормально, но если вы щелкнете по страницам, вы заметите, что некоторые сообщения отображаются два (или даже три) раза, даже если они находятся в базе данных только один раз. Также почтовый заказ испорчен и, кажется, меняется сам по себе.

Когда я использую meta_value вместо meta_value_num, он отлично работает, но тогда есть проблема, что он сортируется вот так -> 9,5,4,39,38,37,26 – вы получаете эту идею. Поэтому мне нужно, чтобы meta_value_num работал по назначению.

В чем может быть проблема?

EDIT: я использую следующий код, чтобы написать facebook нравится meta_value fb_likes. Если бы я мог как-то написать мета значение, подобное «001», а не «1». Тогда я мог бы легко использовать orderby = meta_value и даже не нуждался бы в meta_value_num.

Есть ли способ написать в базу данных, как это? 1 нравится -> 001, 21 нравится -> 021

 { if($post->post_type == 'draft') continue; $fb = json_decode(file_get_contents('http://graph.facebook.com/?id='.get_permalink($post->ID))); if( !isset( $fb->likes) && isset($fb->shares) ) { $fb->likes = $fb->shares; } //$fb->likes = isset($fb->likes) ? $fb->likes : 0; $this->log("post_id: ({$post->ID}) \npermalink: ".get_permalink($post->ID) . "\nfb_likes:". $fb->likes . "\n"); update_post_meta($post->ID, 'fb_likes', (int)$fb->likes); } 

Solutions Collecting From Web of "orderby = meta_value_num создает дубликаты сообщений"

Что касается редактирования (ведущих нулей):

 /* will print "001" */ echo sprintf( "%03d", 1 ); /* will print "00097" */ echo sprintf( "%05d", 97 ); 

Что касается основной проблемы:

Очевидно, я считаю ваше описание проблемы, но если 'orderby' => 'meta_value' не создает повторяющихся результатов, ни одно изменение в 'orderby' => 'meta_value_num' .
Если это единственное изменение, которое вы делаете, оно должно только изменить порядок …

Я исправил это сейчас – я просто написал в поле meta_value с уже прикрепленными ведущими нулями и использовал обычную команду orderby = meta_value. Итак, теперь у меня есть подобные уже с ведущими нулями в моей базе данных.

 $myfblikes = sprintf("%04s", (int)$fb->likes); update_post_meta($post->ID, 'fb_likes', $myfblikes); 

Спасибо за помощь. Я полностью понимаю, что он также должен работать с meta_value_num, потому что эта команда действительно должна только изменять порядок сообщений. Но почему-то это не так – поэтому должна быть проблема с моим meta_value_num. Я даже не знаю, как выпустить raw sql, потому что это первый раз, когда я работал с php / mysql;)

В любом случае, я рад, что получил работу.