Ответы в темах

Просмотр 15 ответов — с 31 по 45 (всего 52)
  • Может, я глупость спрашиваю, тогда извините.
    Но все-таки может мне кто-нибудь ответит правильно ли таким образом менять шаблон, или может быть есть более разумный способ???

    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

    спасибо.

Просмотр 15 ответов — с 31 по 45 (всего 52)