ACF Гибкие поля содержимого в PDF с использованием FPDF - PullRequest
0 голосов
/ 08 апреля 2020

Я создаю функцию, позволяющую пользователю создавать PDF-версию страницы с пользовательским типом записи. Страница построена с использованием полей ACF Flexible Content, и я использую FPDF для создания PDF.

У меня есть PDF-файлы, генерирующие и отображающие контент из WordPress, такой как заголовок и рекомендуемое изображение et c. Поля ACF с одним значением или массивом отображаются нормально. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как получить различные параметры поля, которые пользователь использовал в параметрах гибкого макета?

Я не уверен, что возможно создать PDF-файл из гибкого опции. Если кто-нибудь знает, как этого добиться или у него есть предложение попробовать, он будет очень признателен:)

Функция, которая захватывает файлы, содержащие различные варианты гибкой компоновки

<?php
function get_acf_flex_modules( $fieldGroups, $page = NULL ) {

global $post;

$id = ( is_home() ? get_option('page_for_posts') : $post->ID );
$id = ( $page ? $page : $id);

/* Path to modules */
$path = 'partials/'; 
$error = 'partials/flex--error';

/* Build ACF flexible content loop */
if ( have_rows($fieldGroups, $id) ):

  while ( have_rows($fieldGroups, $id) ) : the_row($fieldGroups, $id);

    /* Create module paths */
    $module_path = $path . 'flex--' . get_row_layout();
    $check_file = __DIR__ . '/../' . $module_path . '.php';

    /* If exists, display module */
    if( file_exists($check_file) ): 
      get_template_part($module_path); 
    else:
      get_template_part($error); 
    endif;

  endwhile;

endif;

}

Функция создания PDF с использованием FPDF

<?php
/**
 * Library Card PDF
 * Print current Library detail page
 */
require_once("../../../../wp-load.php"); 
require( dirname( __FILE__ ) . '/fpdf.php');

// Get the current ID for the page to be converted to PDF
$postid = $_GET['post_id'];
$title = html_entity_decode( utf8_decode( get_the_title ($postid) ) );

class PDF extends FPDF {

    // Page Header
    function Header() {
    $this->Image(get_template_directory_uri()  . '/_src/images/eq_pdf_logo.png',80,6,50);
    $this->Ln(40);
    }

    // Page Footer
    function Footer() {
        $this->SetMargins (50, 0, 50);
        $this->SetY(-30);
        $this->SetTextColor(142, 142, 154);
    $this->Cell(0, 30, 'Copyright Equilibrium Asset Management', 0, 0, 'C');
  }

  // Page Body
  function libraryDetails() {

    $postid = $_GET['post_id'];
    $title = html_entity_decode( utf8_decode( get_the_title ($postid) ) );
    $heroImage = get_the_post_thumbnail_url($postid);
    $author_id = get_post_field ('post_author', $postid);
    $author = get_the_author_meta('nickname' , $author_id); 
    $date = get_the_date('M d, Y', $postid);

    if ($heroImage) {
      $this->SetX (0);
      $this->SetY (20);
      $this->Image($heroImage, 10 , null, 190, null ); // ACF Hero
    }

    $this->SetX (20);
    $this->SetX (10);
    $this->Ln();
    $this->SetFont('Arial','',20);
        $this->SetTextColor(48, 48, 48);
    $this->Write(15, $title);

    if ($author) {
      $this->Ln(12);
      $this->SetFont('Arial','',12);
            $this->SetTextColor(0, 0, 0);
            $this->Write(5, 'Posted on ' . $date . ' by ' . $author);
    }

  }

  // Grab all data to display
    function PrintLibraryDetails($file) {
        $this->AddPage();
        $this->libraryDetails($file);
  }


}

$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->SetAutoPageBreak(true, 40);
$pdf->SetFont('Arial','',12);

// Page
$pdf->SetTitle ($title);
$pdf->PrintLibraryDetails(1);

// Output
$pdf->Output();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...