对于一个有很多源代码的博客,我如何避免代码重复?

时间:2013-10-13 作者:Nathan VanHoudnos

我正在写一篇关于使用R语言做一些应用统计的教程。一个例子是:

http://mcmcinirt.stat.cmu.edu/archives/223

我希望从Web服务器上的本地文件加载所有源代码块。这样,我就可以使用git将它们与实际用于开发示例的文件同步。

目前,我在我的机器上编写代码,生成图表/检查它是否工作,然后将最终代码复制到博客的文本中。这会导致重复问题。

有没有可能避免这种代码重复?(或者是我建议的方式,或者是更友好的方式?)

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我不会为此使用媒体上传程序,因为您想“使用git将它们与我实际使用的文件同步”。没有直接的方法可以同步通过上传器上传的文件,或者更新/替换这些文件。这方面的核心功能相当有限。不管怎样,你都需要进入服务器来更新文件,如果你的站点存储在年/月文件夹中,仅仅查找文件将很麻烦。

我会跳过这一麻烦,为R文件创建一个目录,并用一个短代码加载它们:

function srcfile_shortcode($atts=\'\',$content=\'\') {
  $uploads = wp_upload_dir();
  $file = $uploads[\'basedir\'].\'/rfiles/\'.$atts[\'file\'].\'.r\';
  if (is_readable($file)) {
    $file = file_get_contents($file);
    return \'<pre>\'.$file.\'</pre>\';
  } else {
    return \'Can not read file: \'.$file;
  }
}
add_shortcode(\'srcfile\',\'srcfile_shortcode\');
应该从中加载文件wp-content/uploads/rfiles 名称与file shortcode属性[srcfile file="abc" /] 将加载wp-content/uploads/rfiles/abc.r.

您可以随时更新目录—FTP或Git。

SO网友:fuxia

使用内置工具:媒体库。要做到这一点,有两个步骤:

允许上载txt 文件,以启用上载

1。允许txt 文件上传非常简单:过滤器upload_mimes 并将您的类型添加到现有列表中。

add_filter( \'upload_mimes\', \'extend_upload_mimes_for_txt\' );

function extend_upload_mimes_for_txt( $mime_types = array() )
{
    $mime_types[\'txt\']  = \'text/plain\';
    $mime_types[\'r\']    = \'text/plain\';
    return $mime_types;
}

2。更改的输出r 文件

假设您上传r 具有扩展名的文件.r. 滤器media_send_to_editor, 检查扩展,包括完整的内容并创建适当的标记。

add_filter( \'media_send_to_editor\', \'embed_r_txt_files\', 10, 3 );

function embed_r_txt_files( $html, $id, $attachment )
{
    if ( \'r\' !== pathinfo( $attachment[\'url\'], PATHINFO_EXTENSION ) )
        return $html;

    $content = file_get_contents( get_attached_file( $attachment[\'id\'] ) );

    return \'<pre class="language-r"><code>\' 
        . esc_html( $content ) 
        . \'</code></pre>\';
}
我想你已经调整了细节,但这应该是一个开始。

结束

相关推荐

包含‘wp-includes’类的最佳实践是什么

我有一个类“wp\\u php\\u flickr”,它将在我正在编写的插件中使用wordpress核心类“wp\\u HTTP”if( !class_exists( \'WP_Http\' ) ) { require_once( WP_INSTALL_DIR.\'\\wp-includes\\class-http.php\'); } class wp_php_flickr { ... } 在测试过程中,我注意到我需要包含越来越多的核心类