2016-08-02 62 views
1

所以我想在我的WordPress帖子上有一个按钮,将帖子转换为PDF。我发现domPDF,但我不知道如何使用WordPress实现它?如何使用domPDF和WordPress

我知道使用插件会更容易,但是我想在没有插件的情况下使用插件。

有人可以向我解释我可以如何实现这个? 谢谢

+0

你想要在管理区域或前端使用此功能吗? –

+0

@MatteoEnna forntend,所以任何人都可以下载该文章作为PDF – Kierenblade

回答

1

复制主题中的dompdf目录。

在主题目录插入function.php

:文件中

function me_post_pdf(){ 
    if (isset($_POST['me_post_pdf'])){ 
     include 'dompdf-master/autoload.inc.php'; 
     global $wp; 
     $current_url = home_url(add_query_arg(array(),$wp->request)); 

     $html = file_get_contents($current_url); 

     $options = new Options(); 
     $options->set('A4','potrait'); 
     $options->set('enable_css_float',true); 
     $options->set('isHtml5ParserEnabled', true); 

     $dompdf = new DOMPDF($options); 
     $dompdf->load_html($html); 

     $dompdf->render(); 

     $dompdf->stream('title.pdf'); 
    } 
} 

add_action('init', 'me_post_pdf'); 

single.php中添加:

<form> 
    <input type="submit" value="click me"> 
    <input type="hidden" name="me_post_pdf" value="submitted"> 
</form> 

它可以在主题的基部稍cambire安装

+0

优秀的解释!谢谢。只是一个简单的问题,我需要包含哪个domPDF文件? autoload.inc.php?因为当我点击帖子上的按钮没有任何反应 – Kierenblade

+0

autoload.inc.php :) –

+0

只要确保也设置你的表单方法发布,因为它是默认“获得” –

4

你的问题是非常开放的。通常堆栈溢出是针对非常具体的事情提出问题,例如:“为什么这段代码不能按预期工作?”或“在[在此处插入编程语言名称]”执行XYZ任务时应使用哪个函数。

话虽如此 - 我们都偶尔需要一点kickstart,当涉及到搞清楚过程。所以 - 我会尽我所能回答你的问题;而不是太具体(毕竟,我不是在这里为你做你的任务;))。

你真的需要编码吗?:如果你正在寻找一个WordPress的博客转换为PDF,你可能会重新发明轮子。这里有两个插件,我发现在谷歌搜索的顶部(我从来没有使用过,并没有充分阅读他们的文档):

他们可能会做正是你所需要的,而不必深入编码你自己的东西。

“我刚才说我不想用插件”:好的,没问题。但是,如果情况确实如此,我警告你谨慎行事。 WordPress使用插件来扩展它的功能有很多很好的理由。

可以通过你的主题的functions.php文件添加额外的功能,或创建一个子主题,并加入您改动那里;但是,这对于您希望添加的功能类型有许多缺点。

一般来说,如果你想大幅改变某些东西(是的,在这种情况下 - 你是;你正在添加一些全新的,WordPress本来不是最初设计的) - 那么你应该把它变成一个插入。

另一方面,如果您的更改很小,并且只更改了默认配置(即更改循环中帖子的默认排序顺序),那么可以将它添加到主题的functions.php文件中。

要添加到此 - 如果您要更改某个主题的具体内容,您还可以将其添加到您的主题的functions.php。除了 - 如果你没有自己写主题,你应该使用插件或创建一个儿童主题。

好的 - 谢谢你的抬头。现在给我答案。 无论您选择哪种方式(编写插件,创建儿童主题或修改主题) - 实现您所需内容的核心步骤都差不多。

假设你已经熟悉了DOMPDF的文档,你就会知道,这是很简单的把它生成PDF文档:

// EXAMPLE TAKEN FROM https://github.com/dompdf/dompdf 
// reference the Dompdf namespace 
use Dompdf\Dompdf; 

// instantiate and use the dompdf class 
$dompdf = new Dompdf(); 
$dompdf->loadHtml('hello world'); 

// (Optional) Setup the paper size and orientation 
$dompdf->setPaper('A4', 'landscape'); 

// Render the HTML as PDF 
$dompdf->render(); 

// Output the generated PDF to Browser 
$dompdf->stream(); 

的一段代码,说$dompdf->loadHtml('hello world');是你要去哪里来想要注入您的HTML标记。

在这个阶段最简单的选择是构建一个模板传递给DomPDF的loadHtml函数。该模板将包含帖子的标题和内容。

您编写的代码将从您希望转换的帖子的实例中执行(如果这对您没有意义 - 我建议看看WordPress Codex)。下面是你可以考虑做东西的例子:

// DomPDF will have already been initialised at this point in the code. 

// Create a function that DomPDF can reference, for ease. 
function grabPost() { 

// Hook into loop (don't just copy and paste this. Read the codex!) 
global $post; 

// Creating a really simple template to pass to DomPDF 
$title = '<h1>'.$post->post_title.'</h1>'; 
$content = '<article>'.$post->post_content.'</article>'; 

$passing = $title.$content; 

return $passing; 
} 

// Pass our generated template into DomPDF 
$dompdf->loadHtml(grabPost()); 

// Rendering PDF and outputting to browser happens below this line 

如果你已经通过了这一切阅读,现在想想“我真糊涂”,我建议花一些时间对你的了解刷牙WordPress是如何构建的。花点时间和实验。

我希望这有助于:)

+0

谢谢亚历克斯,非常有用的信息,将肯定刷我的WordPress的知识:) – Kierenblade

+0

不客气:) –