По многим различным причинам я был вынужден отключить функцию прикрепленных записей в WordPress. Все еще мне нужна эта функция. Это означает, что мне нужен обходной путь. Мне нужно показать сообщение в верхней части канала, и мне нужно, чтобы оно было сделано как можно проще для пользователя, который пишет сообщение.
ПРИМЕЧАНИЕ. Я использую Visual Composer.
Я подумал, что обходным путем для этого может быть добавление нового контейнера через Visual Composer или боковую панель и вызов категории. Эта новая боковая панель / контейнер будет видна только при наличии постов в этой категории. Я искал функцию, запрос, плагин и т. Д., Чтобы сделать это, но безуспешно.
я нашел Избранные виджеты постов а также Избранный виджет категории но я не думаю, что они — то, что мне нужно.
Крюк с get_terms
будет отображать термины / категория только когда у него есть посты
Добавьте этот код в тему WP functions.php
Например (domain.com/wp-content/themes/yourThemeName/functions.php)
add_filter('get_terms', 'get_terms_filter', 10, 3);
function get_terms_filter( $terms, $taxonomies, $args )
{
global $wpdb;
$taxonomy = $taxonomies[0];
if ( ! is_array($terms) && count($terms) < 1 )
return $terms;
$filtered_terms = array();
foreach ( $terms as $term )
{
$result = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts p JOIN $wpdb->term_relationships rl ON p.ID = rl.object_id WHERE rl.term_taxonomy_id = $term->term_id AND p.post_status = 'publish' LIMIT 1");
if ( intval($result) > 0 )
$filtered_terms[] = $term;
}
return $filtered_terms;
}
Для игнорирования липких сообщений на наборе веб-интерфейса ignore_sticky_posts
в true
в основном запросе
add_action('pre_get_posts', '_ignore_sticky');
function _ignore_sticky($query)
{
// Only for Front end
if (!is_admin() && $query->is_main_query())
$query->set('ignore_sticky_posts', true);
}
Других решений пока нет …