我知道这听起来很复杂,所以请耐心听我说。
我正在尝试根据当前帖子/页面中的短代码(如果有)添加某些自定义css样式。
function load_shortcode_styles($posts){
//function to check short codes here
//regex to get id from shortcode(e.g [item id=""] )
//get custom post meta from the id that has my custom css
add_action(\'wp_head\', create_function(\'\', \'echo "\\n<!-- my style -->\\n<style>\' . $custom_css . \'</style>\\n";\') );
}
add_filter(\'the_posts\', \'load_shortcode_styles\' );
打开帖子页面后,源代码显示我的风格被打印了两次,如下所示:
<!-- my style -->
<style>
</style>
<!-- my style -->
<style>
</style>
出于测试目的,我使用了一个硬编码函数来回显某个字符串,它工作得很好。
e、 g.:
function test_print(){
echo "\\n<!-- my style -->\\n<style>foo bar</style>\\n";
}
并用这个替换上面的行动钩
add_action(\'wp_head\', \'test_print\' );
不知何故,这将打印出来,这是正确的!
<!-- my style -->
<style>
foo bar
</style>
有人知道这个问题吗?我如何解决这个问题?
最合适的回答,由SO网友:Tom J Nowell 整理而成
我只能假设页面上有多个查询或这篇文章的实例,但它暴露了逻辑中的一个缺陷,即您没有检查是否已经添加了样式。通常会使用wp\\u enqueue\\u脚本来解决这个问题,但无论出于何种原因,您可能无法做到这一点。
因此,您需要先进行检查。我想提出以下建议:
全局$we\\u found\\u短代码$we\\u found\\u shortcode=false;
function load_shortcode_styles($posts){
//function to check short codes here
// if found
$we_found_shortcode = true;
}
function header_check(){
global $we_found_shortcode;
if($we_found_shortcode == true){
//regex to get id from shortcode(e.g [item id=""] )
//get custom post meta from the id that has my custom css
echo "\\n<!-- my style -->\\n<style>\' . $custom_css . \'</style>\\n";
}
}
add_filter(\'the_posts\', \'load_shortcode_styles\' );
add_filter(\'wp_head\', \'header_check\' );