Bagira
Ответы в темах
-
Может, я глупость спрашиваю, тогда извините.
Но все-таки может мне кто-нибудь ответит правильно ли таким образом менять шаблон, или может быть есть более разумный способ???function add_special_content() {
global $excerpt;
echo excerpt;
}Так страница грузится, но $excerpt не выводится вообще.
Но Вы натолкнули меня на мысль написать так:
function add_special_content() { global $post; $output = $post->post_excerpt; echo $output; }
Так все прекрасно работает. Спасибо Вам большое.
Спасибо за ответ, я что-то такое и подозревала. Странно просто , что вчера полдня все работало отлично, а сегодня нет.
Я решила извратиться, но почему-то работает через раз. Выдается ошибка: «Соединение было сброшено». Если закомментировать the_excerpt(), то страница грузится. Если после этого расскомментировать — грузится один раз как надо, а потом опять «Соединение было сброшено». И глухо.
Можно ли так писать:
... //excerpt определяется выше и равен следующему $excerpt = '<a href="http://localhost/wp/?p='.$published_id.'"><img src="'.$image_src.'"></a>'; ...... //add excerpt instead of the_content add_action('wp', 'content_single_page'); function content_single_page() { if (is_category('1')) { add_filter('the_content', 'add_special_content'); } } function add_special_content() { the_excerpt(); }
Сайт работает локально.
а если человек, хочет плагин, который бы добавлял в категорию, выбранную из списка всех категорий в админке, запись , чтобы в итоге это выглядело так : http://www.d-allison.com/category/web-design/.
Можно, конечно, поставить фильтр на the_content, который обрезает его до the_excerpt, но зачем так извращаться?
Уже пробовала, но это все равно выглядит немного не так как мне надо.
Это же делается один раз и все…
Но тогда идет привязка к id категории, а если чел захочет поменять категорию, придется переименовывать шаблон, а предположим, что он не сечет в устройстве WP.
Можно ли это сделать более профессионально, чем отдать ему уже имеющийся код и два шаблона: для категории и для одиночного поста.
Все решилось созданием нового объекта $post в цикле:
function add_special_posts($posts) {
global $wpdb;$mytable_table_name = $wpdb->prefix . «mytable»;
if (is_category(‘Specific’))
{
$sql_select = «SELECT * FROM » . $mytable_table_name;$result = $wpdb->get_results($sql_select, ARRAY_A);
$posts = array();
foreach ($result as $mytable_value)
{
$post = new stdClass();
$post->post_content = $mytable_value[‘full_description’];
$posts[] = $post;
}
}
return $posts;
}add_filter(‘the_posts’, ‘add_special_posts’);
Спасибо огромное Atrax и SergeyBiryukov. Вы мне очень помогли.
Вот что получается:
array(9) {
[0]=> object(stdClass)#108 (9) {
[«ID»]=> string(2) «49»
[«post_author»]=> string(1) «1»
[«post_date»]=> string(19) «2009-11-24 14:11:14»
[«post_type»]=> string(4) «post»
[«post_title»]=> string(11) «portfolio 6»
[«post_content»]=> string(28) «full description portfolio 6» [«post_status»]=> string(7) «publish»
[«comment_status»]=> string(4) «open»
[«ping_status»]=> string(4) «open»
}
[1]=> object(stdClass)#108 (9) {
[«ID»]=> string(2) «49»
[«post_author»]=> string(1) «1»
[«post_date»]=> string(19) «2009-11-24 14:11:14»
[«post_type»]=> string(4) «post»
[«post_title»]=> string(11) «portfolio 6»
[«post_content»]=> string(28) «full description portfolio 6» [«post_status»]=> string(7) «publish»
[«comment_status»]=> string(4) «open»
[«ping_status»]=> string(4) «open»
}
….
[8]=> object(stdClass)#108 (9) {
[«ID»]=> string(2) «49»
[«post_author»]=> string(1) «1»
[«post_date»]=> string(19) «2009-11-24 14:11:14»
[«post_type»]=> string(4) «post»
[«post_title»]=> string(11) «portfolio 6»
[«post_content»]=> string(28) «full description portfolio 6» [«post_status»]=> string(7) «publish»
[«comment_status»]=> string(4) «open»
[«ping_status»]=> string(4) «open»
}
}Последняя запись клонированная 9 раз.
Я использую фильтр the_posts: вот место его применения, то, куда мой массив передается в query.php:
function &get_posts() {
global $wpdb, $user_ID;
…………………..
if ( !$q[‘suppress_filters’] )
$this->posts = apply_filters(‘the_posts’, $this->posts);update_post_caches($this->posts);
$this->post_count = count($this->posts);
if ($this->post_count > 0) {
$this->post = $this->posts[0];
}
return $this->posts;
}Все говорит о том, что глобальный $post это ссылка. Вы его обновляете и вставляете в массив, потом снова обновляете и вставляете в массив. Вы меняете и вставляете 10 ссылок на один объект и получаете 10 копий последнего состояния объекта.
Я ошиблась с выводом $posts. Скорее всего Вы правы, но я не совсем понимаю, на что ссылается глобальный $post.
Прочитала в документации следуюющее:have_posts() и the_post() являются удобными обертками вокруг глобального объекта $wp_query, в котором происходят все эти действия. $wp_query вызывается в заголовке блога и аргументы запроса передаются к нему через GET и PATH_INFO. Приняв аргументы, $wp_query, строит и выполняет запрос к базе данных, а результаты запроса возвращает в виде массива записей. Этот массив записывается в объект и также возвращается назад в заголовок блога, где он заполняется в глобальный массив $posts (для обратной совместимости со старыми версиями циклов).
Глобальный $post — это ссылка на одну запись из $posts или нет, и где это можно найти в коде WP? Не могли бы Вы объяснить про $post, пожалуйста.
Почему тогда, когда я вывожу массив $posts — он содержит все записи из моей таблицы, а не последнюю, клонированную 10 раз.
function add_special_posts($posts) { global $wpdb; $mytable_table_name = $wpdb->prefix . "mytable"; if (is_category('Specific')) { $sql_select = "SELECT * FROM " . $mytable_table_name; $result = $wpdb->get_results($sql_select, ARRAY_A); foreach ($result as $mytable_value) { $post->post_content = $mytable_value['full_description']; $posts[] = $post; } } return $posts; } add_filter('the_posts', 'add_special_posts');
Удалось решить проблему таким вот способом. Возник другой вопрос, почему то выводится 10 раз содержимое последней записи из таблицы. А должен выводить 10 разных. При этом массив $posts содержит все записи таблицы.
Спасибо, да это работает если переопределить все стандартные поля $post: $post->ID, $post->post_author, $post->post_date и т.д.
Но что касается отображения в конкретной категории: то такая запись в основном файле плагина не работает (сама функция add_special_posts — в файле класса):
if (is_category('Specific')){ add_filter('the_posts', array(&pointer_to_class,'add_special_posts'); }
Выдается ошибка: Trying to get property of non-object in D:\localhost\wp\wp-includes\query.php on line 191. Это ссылка на функцию is_catуgory(), получается я обращаюсь к свойству сущности, которая не является объектом?
Ничего не получается. the_posts применяется к результатам запроса к БД, а для posts_join, posts_where — необходима ссылка для подключения к wp_posts. Выходит, если есть собственная таблица, то она должна быть обязательно как-то привязана к wp_posts? Или можно как-то перехватить именно сам момент извлечения данных. Неужели ни у кого не бывает случая, что данные нужно хранить в отдельной таблице, не связанной с wp_posts?
Насколько поняла для использования posts_join, posts_where — необходима связь с таблицей wp_posts, а у меня ее нет. Попробую разобраться с the_posts.
На сколько поняла для использования posts_join, posts_where — ytj,[jlbvf cdzpm c nf,kbwt
спасибо.