Intereting Posts
Темы-детские темы Вывод wp_link_pages в качестве исходного URL-адреса Показать глобальное сообщение в профилях пользователя только с администратором Поле ввода в WordPress Backend Объединение этих запросов? (Такой же таксономический термин + та же категория, что и должность) WordPress в подкаталоге Laravel – WordPress довольно постоянная ссылка на внутреннюю страницу показывает laravel WP_enqueue_script () всегда загружает их в wp_footer ()? Настройка «идентификаторов пользователей» и добавление панели «пользователь» в области администратора Shold Я вручную добавил 'cap' для роли администратора? Как я могу комбинировать запросы meta_query? Как вызвать персонализированный пост с помощью get_posts () вместо query_posts ()? Получить идентификатор категории внутри шаблона категории Analog category_and (WP) в sql-запросе Получение ссылок в нескольких категориях (пересечение) Поля пользовательских тем в меню настроек – применяются фильтры к одному из этих полей? Пользовательская таксономия – настраиваемая сортировка столбца

Как добавить chunk из php, html и sql-кода в переменную append to $ content

Я создаю плагин (мой первый), который позволяет администратору сайта отображать наиболее используемые теги объявлений за последние X дней. Этот плагин представляет собой эволюцию вопроса о разработке WP здесь. Отобразите список наиболее используемых тегов за последние 30 дней .

Простите меня за то, что я не знаю правильного жаргона.

У меня большая часть работы с завершением работы с меню администратора и т. Д., Единственное, что я оставил, – это фактически отобразить результаты.

Следующий фрагмент кода работает, когда я бросаю его в файл single.php.

<div class="recent-popular-tags"> <h3><?php echo $rpt_options['heading_tags']; ?></h3> <?php $wpdb->show_errors(); ?> <?php global $rpt_options; $rpt_days = $rpt_options['number_days']; global $wpdb; $rpt_term_ids = $wpdb->get_col(" SELECT term_id FROM $wpdb->term_taxonomy INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id=$wpdb->term_relationships.term_taxonomy_id INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id WHERE DATE_SUB(CURDATE(), INTERVAL $rpt_days DAY) <= $wpdb->posts.post_date"); if(count($rpt_term_ids) > 0){ $rpt_tags = get_tags(array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $rpt_options['number_tags'], 'include' => $rpt_term_ids, )); foreach ( (array) $rpt_tags as $rpt_tag ) { echo '<span class="rpt-link"><a href="' . get_tag_link ($rpt_tag->term_id) . '" rel="tag">' . $rpt_tag->name . '</a></span>'; } } ?> 

http://i.imgur.com/UzzXPFk.png

Я зациклился на преобразовании этого кода в переменную для добавления в $content .

Прямо сейчас у меня есть очень number_tags функция отображения, чтобы проверить, что в параметрах number_tags и number_tags будут отображаться значения, введенные на страницу настроек. Они делают.

 function rpt_display_content ($content){ global $rpt_options; if(is_single()){ $rpt_display = '<p>' . $rpt_options['rpt_tags_days'] . $rpt_options['rpt_tags_number'] . '</p>'; $content .= $rpt_display; } return $content; } add_filter('the_content', 'rpt_display_content'); 

Вы, кажется, очень близки к тому, чтобы все это разобралось. Если вы завершаете свои запросы в функции и разделяете логику и презентацию:

 <?php function wpse_158425_get_terms(){ global $wpdb, $rpt_options; $wpdb->show_errors(); $rpt_days = $rpt_options['number_days']; $rpt_term_ids = $wpdb->get_col(" SELECT term_id FROM $wpdb->term_taxonomy INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id WHERE DATE_SUB(CURDATE(), INTERVAL $rpt_days DAY) <= $wpdb->posts.post_date "); if(count($rpt_term_ids) > 0){ $rpt_tags = get_tags(array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $rpt_options['number_tags'], 'include' => $rpt_term_ids, )); } else { $rpt_tags = FALSE; } return $rpt_tags; } function wpse_158425_display_terms(){ global $rpt_options; $tags = wpse_158425_get_terms(); $recentTags = '<div class="recent-popular-tags">'; $recentTags .= '<h3>'.$rpt_options['heading_tags'].'</h3>'; if($tags != FALSE){ foreach($tags as $tag){ $recentTags .= '<span class="rpt-link"><a href="' . get_tag_link ($rpt_tag->term_id) . '" rel="tag">' . $rpt_tag->name . '</a></span>'; } } else { $recentTags .= 'There are no popular tags right now.'; } $recentTags .= '</div><!--.recent-popular-tags-->'; return $recentTags; } function rpt_display_content ($content){ if(is_single()){ $rpt_display = wpse_158425_display_terms(); $content .= $rpt_display; } return $content; } add_filter('the_content', 'rpt_display_content'); ?> 

Вы можете еще больше упростить это, сделав wpse_158245_get_terms() принимать переменные и передавать параметры таким образом и устанавливать переменные по умолчанию.

У меня не было возможности запустить это, вы можете столкнуться с некоторыми ошибками объектов / массивов, но вам должно быть хорошо идти.

Это то, что я придумал, и работает точно так, как ожидалось. Будучи новичком, это лучшее решение, чем решение, размещенное Арисом Блевинсом ? Если нет, то почему?

Честно говоря, я не знаю.

 <?php /***** Display Functions *******/ function rpt_display_content ($content){ global $rpt_options; if(is_single()){ ob_start(); ?> <div class="recent-popular-tags"> <h3><?php echo $rpt_options['heading_tags']; ?></h3> <?php $rpt_days = $rpt_options['number_days']; global $wpdb; $rpt_term_ids = $wpdb->get_col(" SELECT term_id FROM $wpdb->term_taxonomy INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id=$wpdb->term_relationships.term_taxonomy_id INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id WHERE DATE_SUB(CURDATE(), INTERVAL $rpt_days DAY) <= $wpdb->posts.post_date"); if(count($rpt_term_ids) > 0){ $rpt_tags = get_tags(array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $rpt_options['number_tags'], 'include' => $rpt_term_ids, )); foreach ( (array) $rpt_tags as $rpt_tag ) { echo '<span class="rpt-link"><a href="' . get_tag_link ($rpt_tag->term_id) . '" rel="tag">' . $rpt_tag->name . '</a></span>'; } } ?> </div> <?php $content .= ob_get_clean(); } return $content; } add_filter('the_content', 'rpt_display_content'); ?>