2015-10-06 4 views
1

По многим причинам я был вынужден деактивировать функцию липких сообщений на Wordpress. Тем не менее мне нужна эта функция. Это означает, что мне нужно обходное решение. Мне нужно показать сообщение в верхней части фида, и мне нужно, чтобы он был сделан как можно проще для пользователя, который пишет сообщение.Показать категорию только в том случае, если у нее есть сообщения

Примечания: Я использую Визуальный Composer

Я думал, что обходной путь фота это было бы добавить новый контейнер с помощью визуальной Composer или боковой панели и призывает к категории. Эта новая боковая панель/контейнер будет видна только в том случае, если в этой категории есть какие-либо записи. Я искал дни для функции, запроса, плагина и т. Д. Для этого, но без успеха.

Я нашел Featured Post Widget и Featured Category Widget, но я не думаю, что это то, что мне нужно.

Есть ли у кого-нибудь предложения/советы/решения? Я бы очень признателен за помощь в этом. Заранее спасибо!

ответ

2

Крюк с get_terms покажет терминов/категорию только тогда, когда он имеет сообщение

Добавить этот код в WP ТЕМА functions.php

Eg (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); 
} 
+0

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

+0

@viriato вы попросили «Показать категорию только в том случае, если у нее есть сообщения», и для записи «ingore stick post». Мне нужно это из-за разных факторов, но мы можем начать с того, что мне нужен WP, чтобы игнорировать липкие сообщения. », Если вы хотите чтобы показать липкие сообщения, вы можете изменить этот набор '$ query-> ('ignore_sticky_posts', true),' to this '$ query-> set ('ignore_sticky_posts', false);' – Noman

+0

Извините, возможно, я объяснил себе неправильное путь. Липкие сообщения уже игнорируются из-за многих факторов, поэтому мне нужно обходное решение для этого. Вы хотите, чтобы я объяснил это другим способом? Не стесняйтесь задавать мне вопросы ... – viriato