我想用其他文件中的代码替换主WP循环,例如:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'tpl/content', 'single' ); ?>
<?php endwhile;
endif;?>
像Woocommerce中的东西 - 我想要替换网站的“内容”,网站的页眉和页脚应该看起来像一个主题。 我曾尝试使用“template_include”和“single_template”,但这些方法正在取代整个页面。
我的主要目标是使用我的插件替换“内容”,无论WP使用什么主题。
答案 0 :(得分:1)
我的主要目标是使用我的插件替换“内容”,无论WP使用什么主题。
如果你想改变wordpress页面的“内容”,你应该考虑
the_content
或register_activation_hook
的函数,该函数会创建一个新页面,并将插件的短代码预先加载到其中。我很确定这就是WooCommerce所做的。the_content
!<?php
// one/of/your/plugin/files.php
function marcin_plugin_content($content) {
/**
* Some check to establish that the request is for
* a page that your plugin is responsible for altering.
*/
if (true === is_page('marcin_plugin_page')) {
$new_content = 'whatever it is you do to create your plugin\'s content, do it here!';
return $new_content;
}
// we don't want to alter content on regular posts/pages
return $content;
}
add_filter('the_content', 'marcin_plugin_content');
https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content
<?php
// one/of/your/plugin/files.php
function marcin_plugin_shortcode($atts)
{
// Borrowed from https://codex.wordpress.org/Shortcode_API
$a = shortcode_atts(
[
'foo' => 'something',
'bar' => 'something else',
],
$atts
);
// Do whatever you do here to generate your plugin's output...
$output = 'Foo: "'.$a['foo'].'", Bar: "'.$a['bar'].'"';
return $output;
}
add_shortcode('marcin', 'marcin_plugin_shortcode');
然后,您的用户将负责将[marcin]
短代码放入页面或帖子中以呈现插件的“内容”。
如果您想自动为用户创建页面,可以尝试:
<?php
// path/to/your/plugin/files.php
function marcin_on_activate() {
// Maybe do a check that this doesn't exist already to avoid duplicates.. this is just an example!!
$data = [
'post_title' => 'Plugin Page',
'post_content' => '[]',
'post_status' => 'publish',
];
// Insert the post into the database.
wp_insert_post($data);
}
register_activation_hook(__FILE__, 'marcin_on_activate');
如果您还没有,我建议您阅读WP codex的Plugin API页面!此外,您知道在哪里可以挂钩或过滤:
还有一些参考文献:
修改:OP写道:
我的不好:“内容” - 我指的是我的CPT的所有字段:例如:标题,描述,作者,创建日期,价格......房间数量等等。
在这种情况下,您需要执行模板覆盖,然后do as WooCommerce does,并在模板中包含对get_header()
和get_footer()
的调用。那些功能
在您当前主题的目录中包含... [页眉/页脚] .php模板文件 。