Поддержка Проблемы и решения Программно поменять the_excerpt на the_content

  • Задача такая: необходимо сделать плагин для загрузки портфолио, чтобы это выглядело примерно так:
    На данном этапе делаю так:

    <?
             //if button "Publish" is clicked
             if ($published) {
                if (!empty($title) && (!empty($upload['tmp_name']) || !empty($url))) {
    
                   // if file uploaded
                   if ($upload['tmp_name']) {
    
                   // handle uploaded image				   $file=$this->handle_image_upload($upload); 
    
    	       if ($file) {
                      $image_url=$file['url'];
    
    	  	  // create a thumbnail
    		  $resized = image_make_intermediate_size( $file['file'], 150, 150,$crop=true );
                     if ($resized)
     	         {
                        $image_src = $uploads['url'].'/'.$resized['file'];  }
     		 else
     		    $image_src = $image_url;
    
     		 $image_uploaded = true;
     	      } else
     	           $error = __('Please upload a valid image.',$this->plugin_domain);
    
                   } else {//если файл загружен
    
                   	    $image_url = $url;
                   	    $image_src = $url;
                     }
    
                     if (empty($error)) {
    
                        //создаем содержимое поста
                        $content = '<img src="'.$image_url.'">';
    
                       //post information
                       $data = array(
                     	   'post_title' => $wpdb->escape($title),
                     	   'post_content' => $content,
                     	   'post_status' =>  $post_status,
                     	   );
    
                      //insert post
                   	  $published_id = wp_insert_post($data); 
    
                  	//update post - для того чтоб excerpt ссылался на страницу поста
                     $excerpt = '<a href="http://localhost/wp/?p='.$published_id.'"><img src="'.$image_src.'"></a>';
    
                   	$data_update = array(
                     	   'ID' => $published_id,
                     	   'post_excerpt' => $excerpt
                     	    );
                    wp_update_post($data_update);
    
                    // add a custom field
                   	add_post_meta($published_id, "Author", __($description, $this->plugin_domain));
    
                     if ($image_uploaded) {
                        $attachment = array(
                           'post_mime_type' => $file['type'],
                     	'guid' => $image_url,
                     	'post_parent' => $published_id,
                            'post_title' => $wpdb->escape($title),
                            'post_content' => $wpdb->escape($content)
                            );
    
                        $aid = wp_insert_attachment($attachment, $file['file'], $published_id);
    
                        // update metadata
    		    if ( !is_wp_error($aid) ) {
                           wp_update_attachment_metadata($aid, wp_generate_attachment_metadata( $aid, $file['file'] ) );
    		    }
    		}
    
                    // clear all fields
    		$title=''; $url=''; $description='';
    
                 } //end if (!$error)
             } else
                  $error = __('You need to enter a title and add a photo.',$this->plugin_domain);
    }?>

    При этом я создаю отдельный шаблон для конкретной категории типа category-id_category.php, в котором убираю все не нужные теги типа the_title, the_time и т.д. , вместо the_content() прописываю the_excerpt() и вывожу инфу из custom field (у меня в примере оно только одно пока: Author). Просто ведь затем еще придется создавать шаблон и для отдельно поста, чтобы выводить увеличенное изображение и custom field.
    Может быть можно как-то программно подставлять в стандартный шаблон the_excert, вместо the_content, а не создавать отдельные шаблоны? Подскажите, пожалуйста.

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Atrax

    (@atrax)

    Ethical engineer

    Можно, конечно, поставить фильтр на the_content, который обрезает его до the_excerpt, но зачем так извращаться? Это же делается один раз и все…

    а если человек, хочет плагин, который бы добавлял в категорию, выбранную из списка всех категорий в админке, запись , чтобы в итоге это выглядело так : http://www.d-allison.com/category/web-design/.

    Можно, конечно, поставить фильтр на the_content, который обрезает его до the_excerpt, но зачем так извращаться?

    Уже пробовала, но это все равно выглядит немного не так как мне надо.

    Это же делается один раз и все…

    Но тогда идет привязка к id категории, а если чел захочет поменять категорию, придется переименовывать шаблон, а предположим, что он не сечет в устройстве WP.

    Можно ли это сделать более профессионально, чем отдать ему уже имеющийся код и два шаблона: для категории и для одиночного поста.

    Я решила извратиться, но почему-то работает через раз. Выдается ошибка: «Соединение было сброшено». Если закомментировать 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();
    
    }

    Сайт работает локально.

    Atrax

    (@atrax)

    Ethical engineer

    Соединение было сброшено.

    Синий цикл, скорее всего.
    Они друг друга вызывают до бесконечности.
    Надо искать обходной путь.

    Спасибо за ответ, я что-то такое и подозревала. Странно просто , что вчера полдня все работало отлично, а сегодня нет.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Можно попробовать изменить add_special_content():

    function add_special_content() {
    	global $excerpt;
    	echo $excerpt;
    }

    function add_special_content() {
    global $excerpt;
    echo excerpt;
    }

    Так страница грузится, но $excerpt не выводится вообще.

    Но Вы натолкнули меня на мысль написать так:

    function add_special_content() {
        global $post;
        $output = $post->post_excerpt;
        echo $output;
    }

    Так все прекрасно работает. Спасибо Вам большое.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Исправил опечатку в своём фрагменте 🙂 Не хватало знака $.

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «Программно поменять the_excerpt на the_content» закрыта для новых ответов.