Как исключить указанные записи (посты) из вывода на главной странице
Поискал готовые, но они то с чрезмерным функционалом, то делают это массово.
Хочется с индивидуальным подходом, чтобы при публикации/редактировании поставил галочку "Не выводить на главной странице" и всё.
По аналогии, можно также указать записи именно которые нужно выводить где-то, в данном случае на главной. Для этого можно «прилеплять записи», но мне нужно альтернативное решение...
Держи код плагина, можно сунуть в functions.php темы...
<?php /* Plugin Name: Exclude Posts Front Page Description: Позволяет исключить вывод помеченных постов с главной страницы сайта. Пометка ставиться при публикации/редактировании поста. Author: Campusboy Author URI: http://wp-plus.ru/ Version: 2.2 */ // если для главной не установлена отдельная страница // или она есть и есть страница блога, тогда функционал переходит на страницу блога... if( ! get_option('page_on_front') || get_option('page_for_posts') ){ // чекбокс для исключения add_action('post_submitbox_misc_actions', 'epfp_fields_box_func'); // включаем обновление полей при сохранении add_action('save_post', 'epfp_fields_update', 0); // Исключает вывод постов из списка "помеченных" add_action('pre_get_posts', 'epfp_exclude_posts'); ## Выводит виджет с настройками при публикации/редактировании поста function epfp_fields_box_func( $post ){ if( $post->post_type !== 'post' ) return; $exclude = get_post_meta( $post->ID, 'epfp_exclude_post', 1); echo ' <div class="misc-pub-section"> <input type="hidden" name="epfp[epfp_exclude_post]" value="" /> <label><input type="checkbox" name="epfp[epfp_exclude_post]" value="1" '. checked( 1, $exclude, 0 ) .' /> не показывать пост на главной?</label> </div> '; } ## Сохранение данных виджет function epfp_fields_update( $post_id ){ if( !isset($_POST['epfp']) || ! is_admin() || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-post_'. $post_id ) ) return false; // базовая проверка не пройдена if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return false; // автосохранение if ( ! current_user_can('edit_post', $post_id) ) return false; // юзер не имеет право редактировать запись // Все ОК! Теперь, нужно сохранить/удалить данные $epfp = array_map('trim', $_POST['epfp']); foreach( $epfp as $key => $value ){ if( empty($value) ){ delete_post_meta( $post_id, $key ); // удаляем поле если значение пустое continue; } update_post_meta( $post_id, $key, $value ); // add_post_meta() работает автоматически } return $post_id; } ## Исключает вывод постов из списка "помеченных" function epfp_exclude_posts( $query ) { if( $query->is_page ) return; // когда для главной установлена страница... if( ! $query->is_main_query() ) return; // не главный запрос if( ! $query->is_home && ! $query->is_front_page() ) return; // не страницы постов $query->set( 'meta_query', array([ 'key'=>'epfp_exclude_post', 'compare'=>'NOT EXISTS' ]) ); } }В результате получим такую галку в блоке публикации поста:
Если галка стоит, то указанный пост будет исключен из записей на главной странице сайта.
Если для главной страницы сайта установлена отдельная страница и есть еще отдельная страница для постов блога, то функционал переходит на страницу с постами блога.
Спасибо, то что нужно!
Очень нужная функция. Но видимо с новыми версиями Вордпресс она не работает. Возможно ли обновить его под новые версии Вордпресс?
Должна работать, принципиально в ВП ничего не изменилось в этом плане.
Все работает! Использовал 28.12.2022