将文件放入路径后,立即复制

After placing the file in the path, copy it immediately

提问人:Benjamin 提问时间:11/9/2023 更新时间:11/9/2023 访问量:50

问:

我使用以下代码将所需的文件从上传文件夹复制到 WordPress 语言文件夹: (我知道只有文件应该位于语言文件夹中,这只是一个示例。.po and .mo

function PDF_Files() {
    
    $upload = wp_upload_dir();
    $upload_dir = $upload['basedir'];
    
  $uploadLanUser_directory= $upload_dir .'/test-for-pdf';
  $wordPress_directory = WP_CONTENT_DIR . '/languages/themes';

  if ( !is_dir( $wordPress_directory ) ) {
    wp_mkdir_p( $wordPress_directory );
  }

  foreach ( glob( $uploadLanUser_directory . '/*.pdf', GLOB_BRACE ) as $file ) {
    $destination_file = $wordPress_directory . '/' . basename( $file );
    if ( !file_exists( $destination_file ) ) {
      copy( $file, $destination_file );
    }
  }
}
add_action( 'after_switch_theme', 'PDF_Files' );

此代码正常工作,并在启动模板后将我的 PDF 文件复制到指定路径。

我的问题就在这里。我必须重新启动模板才能复制文件。

您知道如何编辑代码,以便在将 PDF 文件放置在 WordPress 上传文件夹中时,立即将所需文件复制到指定路径,而无需重新启动模板吗?

php wordpress

评论

1赞 CBroe 11/9/2023
使它立即发生,您需要一些连接到文件系统的机制,该机制允许您在目录内容更改时触发脚本。更实用的解决方案是触发上述代码,通过cron作业定期读取和复制文件。

答:

2赞 Oshrib 11/9/2023 #1

目前,您的函数PDF_Files挂接到after_switch_theme操作,这就是为什么它仅在主题被激活或切换时运行的原因。要在上传 PDF 文件时自动复制它们,您需要挂接到在上传过程中触发的操作。

WordPress 提供add_attachment操作,该操作在上传附件(如 PDF)时触发。通过将函数挂接到此操作,可以自动执行复制过程。以下是修改函数的方法:

更改挂钩:使用add_attachment操作在上传新文件时触发函数。 检查文件类型:由于这将触发所有上传,因此您应该在继续之前检查上传的文件是否为 PDF。 下面是函数的更新版本:

function auto_copy_pdf_files( $post_ID ) {
    if ( wp_attachment_is( 'pdf', $post_ID ) ) {
        $upload = wp_upload_dir();
        $upload_dir = $upload['basedir'];

        $uploadLanUser_directory = $upload_dir . '/test-for-pdf';
        $wordPress_directory = WP_CONTENT_DIR . '/languages/themes';

        if ( !is_dir( $wordPress_directory ) ) {
            wp_mkdir_p( $wordPress_directory );
        }

        $file = get_attached_file( $post_ID );
        if ( file_exists( $file ) ) {
            $destination_file = $wordPress_directory . '/' . basename( $file );
            if ( !file_exists( $destination_file ) ) {
                copy( $file, $destination_file );
            }
        }
    }
}
add_action( 'add_attachment', 'auto_copy_pdf_files' );

这是正在发生的事情:

上传文件时会触发函数auto_copy_pdf_files。 它首先检查上传的文件是否为 PDF。 如果是,它将继续将文件复制到所需的目录,就像您的原始函数一样。 通过此修改,您的 PDF 应该在上传时自动复制,无需重新启动主题。这应该使您的工作流程更顺畅、更高效!

评论

1赞 Benjamin 11/10/2023
对于我迟到的回复,我深表歉意。我检查了你的答案,效果很好。感谢您的建议和您编写的非常好的代码。