几乎每个我为了向Wordpress添加php页面而遇到的指南都涉及在主题级别添加它。例如How to add a PHP page to WordPress?。我想通过插件向多个站点添加一个新的面向公众的页面。我不想将其添加到几十个主题中。如果我可以在插件级别添加它,它将适用于所有网站。
我有这个工作,但我需要一些方法将其注入主题。为了获得侧边栏和内容而无需为每个主题添加自定义css。
我开始添加重写规则
RewriteRule ^mypage /wp-content/plugins/myplugin/mypage.php [QSA,L]
然后page.php包含
require_once('../../../wp-blog-header.php');
get_header();
//custom php content
//get_sidebar(); // how to get this working.
get_footer();
这也有效,但我遇到的问题是侧边栏。有些主题没有它们,有些则没有。并非所有的侧边栏都是30%等。我不知道如何在这里构建div结构以使其工作。一些主题是100%的页面宽度,但是当在其他固定宽度的主题上查看时,这看起来很丑陋。我已经能够做出一些妥协,但我能够做到这一点。
总之,我的主要问题是。是否可以调用将html注入主题页面的方法。例如generate_page($ HTML);.然后,此方法将转到主题的page.php,并将$ html注入主题的内容区域。
编辑 为了动态地将内容注入未知主题,我做了以下
global $post;
$post->post_content = "TEST PAGE content";
$post->post_title = "Page Title";
$post->post_name = "test-page";
include get_template_directory()."/page.php";
这适用于某些主题,而不适用于其他主题。一些主题将显示这篇文章很好,但其他(默认的wordpres二十五主题)正在显示此帖子,然后在数据库之后的所有其他帖子。我不知道它在哪里或为什么拉动所有这些帖子,但如果我能让它停止它看起来这将是一个有效的解决方案。
答案 0 :(得分:0)
然后你可以尝试在特定情况下加载特定的模板页面。
function load_my_template( $template )
{
if( is_page() )
$template = plugin_dir_path(__FILE__) . "dir_to/my_template.php";
return $template;
}
或更改加载页面上使用的内容
function load_my_content( $content )
{
global $post;
$id = $post->ID;
if( is_page() )
{
ob_start();
include plugin_dir_path(__FILE__) . "dir_to/my_template.php";
$content = ob_get_clean();
}
return $content;
}
在你的__construct()
中add_filter('template_include', array($this,'load_my_template') );
add_filter("the_content", array($this,"load_my_content" ) );
add_filter("get_the_content", array($this,"load_my_content" ) );
希望对你有所帮助。
告诉我它是否与您的问题不符。