你能在一个定制的POST类型中添加一个短代码,获取POST_TITLE、POST_CONTENT等,然后将其传递给插件函数吗?

时间:2020-08-26 作者:PepeLePew

帮助无法解决此问题。

我构建了一个基于this tutorial 这使用户能够使用FPDF将自定义帖子类型的帖子导出到格式化的PDF中。

目前,PDF导出工作正常,但当前帖子没有传递给插件函数。一个按钮通过自定义快捷码添加到帖子中。单击按钮时,它应该会自动获取当前查看的帖子并生成内容的PDF。我可以在函数中输入一个特定的帖子ID,它会按预期导出该特定帖子。如果我只使用没有参数的get\\u post,它会导出ID=1的已被丢弃的post的PDF,而不管shortcode按钮位于哪个post中。

仅供参考,这些帖子是通过AJAX加载的,所以问题是否与此有关?

我做错了什么?!有没有更好的方法?我感谢你的帮助!

lsmg-pdf.php

<?php
/*
* Plugin Name: [redacted]
* Description: A plugin created to apply PDF export functionality to documents.
* Version: 1.0
* Author: [redacted]
*/

if ( ! defined( \'ABSPATH\' ) ) {
exit;
}

include( \'lsmg-pdf-helper-functions.php\');

$pdf = new PDF_HTML();

if( isset($_POST[\'generate_posts_pdf\'])){
output_pdf();
}

function output_pdf() {

$post = get_post();

    global $pdf;
    $title_line_height = 10;
    $content_line_height = 8;


        $pdf->AddFont( \'Lato\', \'\', \'Lato-Regular.php\' );
        $pdf->AddFont( \'Lato\', \'B\', \'Lato-Bold.php\' );
        $pdf->AddFont( \'Lato\', \'I\', \'Lato-Italic.php\' );
        $pdf->SetMargins(12.7, 12.7);
        $pdf->SetDrawColor(36,161,89);

        $pdf->AddPage();
        $pdf->SetFont( \'Lato\', \'B\', 24 );
        $pdf->SetTextColor(4,23,51);
        $pdf->Write($title_line_height, $post->post_title);

        $pdf->SetLineWidth(1);
        $pdf->Line(14, 27, 40, 27);

        // Add a line break
        $pdf->Ln(14);

        // Image
        $page_width = $pdf->GetPageWidth() - 20;
        $max_image_width = $page_width;

        $image = get_the_post_thumbnail_url( $post->ID );
        if( ! empty( $image ) ) {
            $pdf->Image( $image, null, null, 100 );
        }
        
        // Post Content
        $pdf->Ln(10);
        $pdf->SetFont( \'Lato\', \'\', 10 );
        $pdf->SetTextColor(38,59,71);
        $pdf->WriteHTML($post->post_content);

$pdf->Output(\'D\',\'lsmg-guideline-doc.pdf\');
exit;
}

function lsmg_pdf() {
?>
<div class="wrap">
<form method="post" id="as-fdpf-form">
    <button class="custom-botton" type="submit" name="generate_posts_pdf" value="generate">Download PDF</button>
</form>
</div>
<?php
}

function register_shortcodes(){
add_shortcode(\'fpdf-doc\', \'lsmg_pdf\');
}

add_action( \'init\', \'register_shortcodes\');

1 个回复
SO网友:Unbywyd

1.)首先,在创建短代码时,必须return 数据not print.

2)是的,您必须明确指定帖子id,在快捷码的按钮或表单中打印id,您还可以使用快捷码属性为特定帖子生成按钮(参见示例)

您的短代码应如下所示:

function lsmg_pdf($args) {
    global $post;
    $attrs = shortcode_atts([
        \'pid\' => $post -> ID
    ], $args);

    return "<div class=\'wrap\'>
        <form method=\'post\' data-pid=\'".$attrs[\'pid\']."\' id=\'as-fdpf-form\'>
            <button class=\'custom-botton\' type=\'submit\' name=\'generate_posts_pdf\' value=\'generate\'>Download PDF</button>
        </form>
    </div>";
}
全球使用:(当前职位)

[fpdf-doc]
具体职位:

[fpdf-doc pid=1]
Also 您需要更改ajax函数并从data-pid 每次按下按钮后都会向服务器添加标签

$(\'.custom-botton\').on(\'click\', function(e) {
    e.preventDefault();
    let POST_ID = $(this).parents(\'[data-pid]\').data(\'pid\');

    $.post(ajax_url, {
        action: \'generate_posts_pdf\',
        pid: POST_ID
    });
});
并在服务器上的get\\u post函数中使用它

add_action(\'wp_ajax_generate_posts_pdf\', \'output_pdf\');
add_action(\'wp_ajax_nopriv_generate_posts_pdf\',\'output_pdf\');

function output_pdf() {
   $post = get_post($_POST[\'pid\']);
...

相关推荐

index.php shows up in url

我在ubuntu上的apache2上运行了两个网站,网站根位于/var/www/site1/html和/var/www/site2/html。它们的url结构如下:示例。com/索引。php/%年%/%月%/%日%/%postname%/当我在wordpress设置中更改它时,除了frontpage之外,我到处都会看到apache2 404页面,而不是wordpress 404模板。wp admin仍然有效,因为在其url中没有索引。php。mod\\u rewrite已启用,我编辑了。htaccess文