Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 如何修复';Woocommerce购物车PDF';函数文件将pdf链接移动到签出页面而不是购物车页面_Wordpress_Pdf_Woocommerce - Fatal编程技术网

Wordpress 如何修复';Woocommerce购物车PDF';函数文件将pdf链接移动到签出页面而不是购物车页面

Wordpress 如何修复';Woocommerce购物车PDF';函数文件将pdf链接移动到签出页面而不是购物车页面,wordpress,pdf,woocommerce,Wordpress,Pdf,Woocommerce,我正在为wordpress woocommerce使用一个名为woocommerce Cart PDF()的插件。它生成当前购物车的pdf链接,但位于购物车页面上 我有一个组合购物车和结帐页面,所以链接不会出现在我的网站上。我不知道如何编辑插件文件自己,它出现在我的购物车页面 我在wordpress插件支持论坛上尝试了这个特定的插件,但是没有答案 /** * Generates the PDF for download * * @return void */ function wc_ca

我正在为wordpress woocommerce使用一个名为woocommerce Cart PDF()的插件。它生成当前购物车的pdf链接,但位于购物车页面上

我有一个组合购物车和结帐页面,所以链接不会出现在我的网站上。我不知道如何编辑插件文件自己,它出现在我的购物车页面

我在wordpress插件支持论坛上尝试了这个特定的插件,但是没有答案

/**
 * Generates the PDF for download
 *
 * @return void
 */
function wc_cart_pdf_process_download() {
if( ! function_exists( 'WC' ) ) {
    return;
}

if( ! isset( $_GET['cart-pdf'] ) ) {
    return;
}

if( ! is_cart() || WC()->cart->is_empty() ) {
    return;
}

if( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'cart-pdf' ) ) {
    wc_add_notice( __( 'Invalid nonce. Unable to process PDF for download.', 'wc_cart_pdf' ), 'error' );
    return;
}

$dompdf = new \Dompdf\Dompdf();

$content = $css = '';

$cart_table = wc_locate_template( 'cart-table.php', '/woocommerce/wc-cart-pdf/', __DIR__ . '/templates/' );
$css        = wc_locate_template( 'pdf-styles.php', '/woocommerce/wc-cart-pdf/', __DIR__ . '/templates/' );

do_action( 'wc_cart_pdf_before_process' );

if( file_exists( $cart_table ) ) {
    ob_start();

    include $cart_table;

    $content = ob_get_clean();
}

if( file_exists( $css ) ) {
    ob_start();

    include $css;

    $css = apply_filters( 'woocommerce_email_styles', ob_get_clean() );
}

$dompdf->loadHtml( '<style>' . $css . '</style>' . $content );
$dompdf->setPaper( 'A4', 'portrait' );
$dompdf->render();
$dompdf->stream( 
    apply_filters( 'wc_cart_pdf_filename', 'WC_Cart-' . date( 'Ymd' ) . bin2hex( openssl_random_pseudo_bytes( 5 ) ) ) . '.pdf', 

    /**
     * 'compress' => 1 or 0 - apply content stream compression, this is on (1) by default
     * 'Attachment' => 1 or 0 - if 1, force the browser to open a download dialog, on (1) by default
     */ 
    apply_filters( 'wc_cart_pdf_stream_options', array( 'compress' => 1, 'Attachment' => 1 ) ) 
);

exit;
}
add_action( 'template_redirect', 'wc_cart_pdf_process_download' );


if( ! function_exists( 'wc_cart_pdf_button' ) ) {

/**
 * Renders the download cart as PDF button
 *
 * @return void
 */
function wc_cart_pdf_button() {
    if( ! is_cart() || WC()->cart->is_empty() ) {
        return;
    }

    ?>

    <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'cart-pdf' => '1' ), wc_get_cart_url() ), 'cart-pdf' ) );?>" class="cart-pdf-button button" target="_blank">
        <?php esc_html_e( 'Download Cart as PDF', 'wc-cart-pdf' ); ?>
    </a>

    <?php
}
}
add_action( 'woocommerce_proceed_to_checkout', 'wc_cart_pdf_button',     21 );
/**
*生成PDF供下载
*
*@返回无效
*/
函数wc\u cart\u pdf\u进程\u下载(){
如果(!函数_存在('WC')){
返回;
}
如果(!isset($\u GET['cart-pdf'])){
返回;
}
如果(!is_cart()| | WC()->cart->is_empty()){
返回;
}
如果(!isset($获取[''wpnance'])验证($获取[''wpnance'],'购物车pdf')){
wc_添加_通知(uuu('Invalid nonce.无法处理PDF下载','wc_cart_PDF'),'error');
返回;
}
$dompdf=new\dompdf\dompdf();
$content=$css='';
$cart_table=wc_locate_模板('cart table.php','/woocommerce/wc cart pdf/','uuuu DIR.'/templates/');
$css=wc_locate_模板('pdf styles.php'、'/woocommerce/wc cart pdf/'、'uuuu DIR_uu.'/templates/');
执行操作(“wc\U购物车\U pdf\U流程前”);
如果(文件_存在($cart_table)){
ob_start();
包括$cart_表;
$content=ob_get_clean();
}
如果(文件_存在($css)){
ob_start();
包括$css;
$css=apply_过滤器('woocommerce_email_styles',ob_get_clean());
}
$dompdf->loadHtml('.$css'.$content);
$dompdf->setPaper('A4','肖像');
$dompdf->render();
$dompdf->stream(
应用_过滤器('wc_cart_pdf_filename','wc_cart-'.date('Ymd').bin2hex(openssl_随机_伪_字节(5))。.pdf',
/**
*“压缩”=>1或0-应用内容流压缩,默认情况下此选项为(1)
*“附件”=>1或0-如果为1,则强制浏览器打开下载对话框,默认情况下为(1)
*/ 
应用过滤器('wc\u cart\u pdf\u stream\u options',数组('compress'=>1,'Attachment'=>1))
);
出口
}
添加操作('template_redirect'、'wc_cart_pdf_process_download');
如果(!function_存在('wc_cart_pdf_button')){
/**
*将下载购物车呈现为PDF按钮
*
*@返回无效
*/
功能wc\u cart\u pdf\u按钮(){
如果(!is_cart()| | WC()->cart->is_empty()){
返回;
}
?>

wc\u cart\u pdf\u process\u download()
函数实际上并不相关。注释中说它“生成下载的pdf”。它所做的是在用户访问pdf链接时通过生成请求的pdf文件进行响应。重要的函数是它下面的函数,
wc\u cart\u pdf\u按钮()

现在我们知道了我们感兴趣的功能,下一步是什么?在你的问题中,你建议编辑插件文件,但避免这样做很重要。编辑插件文件是一种可靠的方法,可以确保你所做的更改在下次更新时被覆盖

您有两个选择:

  • 创建一个迷你功能插件
  • 将代码添加到(希望是子)主题的functions.php文件的底部
  • 第一个选项是推荐的方法,但这将使我们远远超出问题的范围。将代码放在子主题的functions.php文件中足以让您启动并运行

    好的,现在我们知道了我们要修改的代码是什么,以及我们要将这些修改存储在哪里。让我们对实际代码进行分解:

    if( ! is_cart() || WC()->cart->is_empty() ) {
        return;
    }
    
    这会检查两件事,我们是否在购物车页面,购物车是否包含项目?如果其中一项为false,我们将提前退出。您在结帐页面,而不是购物车页面,因此即使调用此函数,它也不会通过此条件

    <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'cart-pdf' => '1' ), wc_get_cart_url() ), 'cart-pdf' ) );?>" class="cart-pdf-button button" target="_blank">
        <?php esc_html_e( 'Download Cart as PDF', 'wc-cart-pdf' ); ?>
    </a>
    
    这将执行
    woocommerce\u procedue\u to\u checkout
    钩子上的代码,该钩子在购物车页面上购物车总计后触发。结帐按钮本身也使用相同的操作

    我们需要编写自己的函数,在结帐页面上显示相同的输出。在不知道您希望按钮显示在何处的情况下,我无法建议使用哪个操作。我使用的是
    woocommerce\u checkout\u order\u review
    ,优先级将其置于订单表和付款选项之间。如果需要重新定位,你必须穿过那些钩子,找到合适的地方

    您在问题中提到,这是必要的,因为您将购物车和结帐页面结合在一起。您可能需要一个完全不同的挂钩,同样,仅根据您的问题我无法知道

    以下是最终代码:

    function stackoverflow_wc_checkout_pdf_button() {
        // We're on the checkout page based on the action. 
        // Highly unlikely we need the is_empty() check but it can't hurt if you may find yourself reusing elsewhere.
        if ( WC()->cart->is_empty() ) {
            return;
        } ?>
    
        <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'cart-pdf' => '1' ), wc_get_cart_url() ), 'cart-pdf' ) );?>" class="cart-pdf-button button" target="_blank">
            <?php esc_html_e( 'Download Cart as PDF', 'wc-cart-pdf' ); ?>
        </a>
    
        <?php
    }
    add_action( 'woocommerce_checkout_order_review', 'stackoverflow_wc_checkout_pdf_button', 15 );
    
    函数堆栈溢出\u wc\u签出\u pdf\u按钮(){
    //我们在基于动作的结帐页面上。
    //我们不太可能需要is_empty()检查,但如果您发现自己在其他地方重复使用,这不会有什么坏处。
    如果(WC()->cart->is_empty()){
    返回;
    } ?>
    
    它工作完美,位置正是我所需要的。我确实使用了儿童主题,应该明确我的意思。谢谢你的详细回复,并给我一个学习的机会。
    function stackoverflow_wc_checkout_pdf_button() {
        // We're on the checkout page based on the action. 
        // Highly unlikely we need the is_empty() check but it can't hurt if you may find yourself reusing elsewhere.
        if ( WC()->cart->is_empty() ) {
            return;
        } ?>
    
        <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'cart-pdf' => '1' ), wc_get_cart_url() ), 'cart-pdf' ) );?>" class="cart-pdf-button button" target="_blank">
            <?php esc_html_e( 'Download Cart as PDF', 'wc-cart-pdf' ); ?>
        </a>
    
        <?php
    }
    add_action( 'woocommerce_checkout_order_review', 'stackoverflow_wc_checkout_pdf_button', 15 );