2016-01-11 3 views
0

Я пытаюсь изменить post ids, чтобы быть инкрементальным, игнорируя сообщения, которые имеют настраиваемое поле под названием «foldout». Я не могу заставить его работать, и я не получаю никаких ошибок php. У меня есть это в конце моего файла functions.phpИзменить идентификатор сообщения, чтобы быть инкрементным, игнорируя сообщения с настраиваемым полем

function updateNumbers() { 
/* numbering the published posts: preparation: create an array with the ID in sequence of publication date,/
/save the number in custom field 'incr_number' of post with ID/
/to show in post (within the loop) use <?php echo get_post_meta($post->ID,'incr_number',true); ?> 
/alchymyth 2010 */ 
global $wpdb; 
$querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.post_status = 'publish' AND wposts.post_type = 'post' AND wpostmeta.meta_key != 'foldout' "; 
$pageposts = $wpdb->get_results($querystr, OBJECT); 
$counts = 5 ; 
if ($pageposts): 
foreach ($pageposts as $post): 
setup_postdata($post); 
$counts++; 
add_post_meta($post->ID, 'incr_number', $counts, true); 
update_post_meta($post->ID, 'incr_number', $counts); 
endforeach; 
endif; 
} 
add_action ('publish_post', 'updateNumbers'); 
add_action ('deleted_post', 'updateNumbers'); 
add_action ('edit_post', 'updateNumbers'); 

Я сузил проблему вниз к строке запроса, упомянутой здесь: https://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query#Query_based_on_Custom_Field_and_Category

я могу получить эту работу:

$querystr = "SELECT $wpdb->posts.* 
       FROM $wpdb->posts 
       WHERE $wpdb->posts.post_status = 'publish' 
       AND $wpdb->posts.post_type = 'post' "; 

, но не это:

$querystr = "SELECT wposts.* 
       FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
       WHERE wposts.ID = wpostmeta.post_id 
       AND wpostmeta.meta_key != 'foldout' 
       AND wposts.post_type = 'post' "; 

Что я изменил от Пример «Запрос на основе пользовательского поля и сортировка по значению».

ответ

1

Это, казалось, сделало трюк, нашел аналогичный ответ на googling больше.

$querystr = " 
    SELECT ID, post_title, post_content FROM $wpdb->posts 
    WHERE not exists (SELECT * FROM $wpdb->postmeta WHERE ($wpdb->postmeta.post_id = $wpdb->posts.ID) AND meta_key = 'foldout') 
    AND (post_status = 'publish') 
    AND (post_type = 'post') 
"; 

 Смежные вопросы

  • Нет связанных вопросов^_^