Intereting Posts
Multisite, загружайте изображения прямо на Amazon S3 Шаблоны таксономии Навигация и передвижная навигационная панель для materialize.css Как добавить несколько (но конкретных) сообщений в разные области на одной странице? Страница появляется после регистрации из меню Как woo-commerce хранит значение данных продукта в БД? Отобразить текущую позицию позиции в пользовательской таксономии Возвращает счетчик для символов в комментарии и выполняет действие, основанное на длине Не удается увидеть выпадающий ярлык на панели управления сайтом в сети WordPress, почему? Как получить только текущие изображения сообщения Ищете простой плагин для проверки Доступ к функции тега WordPress от модального Могу ли я импортировать сайт (плагины, базу данных, изображения) и т. Д. В существующий многоязычный wordpress? Можно ли загрузить страницу администратора внутри толстого ящика? Несколько эскизов и одна галерея

Переопределение календаря по умолчанию для отображения сообщений из категории

Я пытаюсь изменить календарь WP по умолчанию (get_calendar ()), чтобы он показывал сообщения из определенной категории, а затем использовал это как короткий код.

Вот что я сделал:

Копируется через функцию get_calendar () из ядра (из wp-includes) в файл functions.php моей дочерней темы. Чтобы сделать его «независимым» календарем, я изменил имя функции get_calendar () на osu_get_calendar () и успешно закодировал календарь в свой шаблон с помощью osu_get_calendar ();

Теперь я пытаюсь сделать мои руки более грязными и сделать следующее:

1) Ограничьте сообщения, показанные в календаре, в определенной категории (при сохранении предыдущей и следующей навигации, чтобы посетители могли выполнять поиск по этим сообщениям в месяц)

2) Внесите его в короткий код, чтобы мой клиент мог по существу вставлять календарь с сообщениями из категории, которую они выбирают в нижней части своих сообщений.

Я застрял в 1) на данный момент, поскольку мне кажется, что мне нужно изменить SQL-запросы, чтобы они вытягивали сообщения из определенной категории. Посмотрев на код ниже из функции get_calendar (), как я буду фильтровать сообщения, вытащенные из базы данных, чтобы они были из определенной категории? Есть и другие SQL-запросы, но, надеюсь, кто-то может помочь мне с этим пока:

$previous = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date < '$thisyear-$thismonth-01' AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC LIMIT 1"); $next = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date > '$thisyear-$thismonth-01' AND MONTH( post_date ) != MONTH( '$thisyear-$thismonth-01' ) AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date ASC LIMIT 1"); 

Благодаря,

осу

Solutions Collecting From Web of "Переопределение календаря по умолчанию для отображения сообщений из категории"

Вы начали на правильном пути, но у вас было несколько бит подзаголовка WordPress, которые вам еще нужно было добавить. Подход, который мне нравится использовать, – это инкапсулировать вызов get_calendar() в класс, чтобы мы могли использовать крюк 'query' низкого уровня 'query' но использовать его только для одного вызова.

Поэтому я написал пример, который вы можете занести в файл functions.php вашей темы (или в файл .php для плагина, который вы могли бы написать), используя класс I по имени YourSite_Category_Calendar() , и вот как вы его назвали вместо вашего вызова get_calendar() :

 $cc = new YourSite_Category_Calendar('your-category'); echo $cc->get_calendar(); 

И вот код для класса:

 <?php class YourSite_CategoryCalendar { var $category; var $initial; var $echo; static function on_load() { add_shortcode('category-calendar',array(__CLASS__,'shortcode')); add_action('init',array(__CLASS__,'init')); global $wp_rewrite; $wp_rewrite->add_rule('^events/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/?$', 'index.php?post_type=event&year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&category_name=$matches[4]', 'top'); $wp_rewrite->flush_rules(false); // Remove this after you've got it working } static function shortcode($attributes) { $attributes = wp_parse_args($attributes,array( 'category' => false, )); $cc = new YourSite_CategoryCalendar($attributes['category']); echo $cc->get_calendar(); } static function init() { register_post_type('event',array( 'hierarchical' => true, 'label' => 'Events', 'public' => true, 'show_ui' => true, 'query_var' => 'event', 'rewrite' => array('slug' => 'events'), 'supports' => array('title','editor','custom-fields'), 'taxonomies' => array('category'), )); } function __construct($category,$initial=true,$echo=true) { $this->category = $category; $this->initial = $initial; $this->echo = $echo; } function get_calendar() { add_filter('query',array(&$this,'query')); ob_start(); get_calendar($this->category,$this->initial,$this->echo); $calendar = ob_get_clean(); remove_filter('query',array(&$this,'query')); list($header,$body) = explode('<tbody>',$calendar); $find = '#(href="http://[^/]+)(/[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}/)#'; $replace = '$1/events$2'.$this->category.'/"'; $body = preg_replace($find,$replace,$body); return "{$header}<tbody>{$body}"; } function query($query) { if ($this->category) { global $wpdb; $find = "FROM {$wpdb->posts}\\s+WHERE"; $add =<<<SQL INNER JOIN {$wpdb->term_relationships} calendar_term_relationship ON calendar_term_relationship.object_id={$wpdb->posts}.ID INNER JOIN {$wpdb->term_taxonomy} calendar_term_taxonomy ON calendar_term_taxonomy.term_taxonomy_id=calendar_term_relationship.term_taxonomy_id INNER JOIN {$wpdb->terms} calendar_term ON calendar_term.term_id=calendar_term_taxonomy.term_id WHERE calendar_term_taxonomy.taxonomy='category' AND calendar_term.slug='%s' AND SQL; $replace = "FROM {$wpdb->posts} {$add} "; $query = preg_replace("#{$find}#Us",$replace,$query); $query = preg_replace("#post_type\s*=\s*'post'#","post_type='event'",$query); $query = $wpdb->prepare($query,$this->category); } return $query; } } YourSite_CategoryCalendar::on_load(); 

ОБНОВИТЬ

Основываясь на комментариях, я добавил, что необходимо переписать URL-адреса, а также короткий код, который вы бы назвали следующим образом:

 [category-calendar category="party"]