Я создаю функцию, позволяющую пользователю создавать 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();