从插件内的包含文件加载内容

时间:2012-03-29 作者:DylanJones_md

标题不是最好的,所以请随意更改以使其更清楚。。。

问题:

我试图从插件中加载一个页面,并替换WP发布的任何内容。将其设置为如果它们位于网站的首页,则会在我的插件中显示一个PHP页面:

if(is_front_page()){

    $full_path = WP_PLUGIN_URL.\'/\'.str_replace(basename( FILE),"",plugin_basename(FILE));

    $url = $full_path . "/PLUGINNAME/file.php";

    include($url);

    die();
}
但这不是输出文件。即使我将完整路径放在PHP文件中,它也不会显示它或任何内容。它只会在源代码中呈现这一点:

 <meta name="generator" content="WordPress 3.3.1" />
那之后就没什么了。

我从未能够让include工作,我真的不想使用iFrame解决方案。

想法?:)

谢谢

迪伦

UPDATE

因此,我使用get\\u file\\u contents和hook template\\u redirect来实现这一点。

要在live server上进行一些测试,看看有什么问题!:)

1 个回复
SO网友:Johannes Pille

更好的解决方案可能是按照

/* In your main plugin file */
if ( ! defined( \'YOUR_PLUGIN_ABSPATH\' ) ) {
    define( \'YOUR_PLUGIN_ABSPATH\', dirname( __FILE__ ) );
}

/* In any file of the plugin */
if( is_front_page() ) {
    /* adjust path if file.php is in a subfolder */
    require_once ( YOUR_PLUGIN_ABSPATH . \'/file.php\' );
}
如果仍然需要处理完整路径,则它们位于文件中。php。

Additional Option

此外,使用条件标记可能不是最好的主意(if( is_front_page() )). 或者,您可以让插件生成一个短代码,以输出所需的标记。

这将有两个好处:第一,它很容易放置和移动到您的(首页)中。另一方面,您可以在任何地方使用它,而无需修改代码。

/* In your main plugin file */
if ( ! defined( \'YOUR_PLUGIN_ABSPATH\' ) ) {
    define( \'YOUR_PLUGIN_ABSPATH\', dirname( __FILE__ ) );
}

/* In any file of the plugin */
function your_include( $atts ) {
    /* "path" is a shortcode attribute, you can use it to include several files */
    extract( shortcode_atts(
        array(
            \'path\' => \'file.php\'
        ),
        $atts ) );

    require_once ( YOUR_PLUGIN_ABSPATH . \'/\' . $path );

    /**
    * file.php should be adjusted to save whatever you were echoing in before
    * in a variable (in this example $output), which is returned
    * by the shortcode function
    */

    return $output
}
add_shortcode( \'your-include\', \'your_include\' );

结束