不使用wp_head将内容放入header.php

时间:2016-02-25 作者:Zach Smith

我正在构建一个插件。我必须在标题中输出某些内容。主题的php文件取决于我是否要编写。然而,我还没有达到这一点。我只是为了将函数推入页眉而学习的。php我必须使用wp_head. 不幸的是,当我这样做的时候,我得到了WordPress处理的许多额外的东西塞进了wp_head 作用

<meta name=\'robots\' content=\'noindex,follow\' />
        <script type="text/javascript">
            window._wpemojiSettings = {"baseUrl":"https:\\/\\/s.w.org\\/images\\/core\\/emoji\\/72x72\\/","ext":".png","source":{"concatemoji":"http:\\/\\/zachis.it\\/client\\/wgp-master\\/wp-includes\\/js\\/wp-emoji-release.min.js?ver=4.4.2"}};
            !function(a,b,c){function d(a){var c,d=b.createElement("canvas"),e=d.getContext&&d.getContext("2d"),f=String.fromCharCode;return e&&e.fillText?(e.textBaseline="top",e.font="600 32px Arial","flag"===a?(e.fillText(f(55356,56806,55356,56826),0,0),d.toDataURL().length>3e3):"diversity"===a?(e.fillText(f(55356,57221),0,0),c=e.getImageData(16,16,1,1).data.toString(),e.fillText(f(55356,57221,55356,57343),0,0),c!==e.getImageData(16,16,1,1).data.toString()):("simple"===a?e.fillText(f(55357,56835),0,0):e.fillText(f(55356,57135),0,0),0!==e.getImageData(16,16,1,1).data[0])):!1}function e(a){var c=b.createElement("script");c.src=a,c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g;c.supports={simple:d("simple"),flag:d("flag"),unicode8:d("unicode8"),diversity:d("diversity")},c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.simple&&c.supports.flag&&c.supports.unicode8&&c.supports.diversity||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)):(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings);
        </script>
        <style type="text/css">
img.wp-smiley,
img.emoji {
    display: inline !important;
    border: none !important;
    box-shadow: none !important;
    height: 1em !important;
    width: 1em !important;
    margin: 0 .07em !important;
    vertical-align: -0.1em !important;
    background: none !important;
    padding: 0 !important;
}
</style>
<link rel=\'stylesheet\' id=\'open-sans-css\'  href=\'https://fonts.googleapis.com/css?family=Open+Sans%3A300italic%2C400italic%2C600italic%2C300%2C400%2C600&#038;subset=latin%2Clatin-ext&#038;ver=4.4.2\' type=\'text/css\' media=\'all\' />
<link rel=\'stylesheet\' id=\'dashicons-css\'  href=\'http://zachis.it/client/wgp-master/wp-includes/css/dashicons.min.css?ver=4.4.2\' type=\'text/css\' media=\'all\' />
<link rel=\'stylesheet\' id=\'admin-bar-css\'  href=\'http://zachis.it/client/wgp-master/wp-includes/css/admin-bar.min.css?ver=4.4.2\' type=\'text/css\' media=\'all\' />
<link rel=\'https://api.w.org/\' href=\'http://zachis.it/client/wgp-master/wp-json/\' />
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://zachis.it/client/wgp-master/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://zachis.it/client/wgp-master/wp-includes/wlwmanifest.xml" /> 
<meta name="generator" content="WordPress 4.4.2" />
test<style type="text/css" media="print">#wpadminbar { display:none; }</style>
<style type="text/css" media="screen">
    html { margin-top: 32px !important; }
    * html body { margin-top: 32px !important; }
    @media screen and ( max-width: 782px ) {
        html { margin-top: 46px !important; }
        * html body { margin-top: 46px !important; }
    }
</style>
是否有其他方法将插件中的变量发布到标题中。php不使用wp_head?

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

删除wp\\u头会产生一些负面影响,因为它不允许您使用wordpress上几乎90%的插件。组织。此外,您看到的一些代码仅在您登录时显示(除非您的主题专门添加它)。例如,底部的dashicons、open SAN和管理栏样式表以及内联样式都在那里,因此您可以使用前端的管理栏。

以下是一些选项。

1. Custom header - This is a safe alternative if you don\'t want wp_head in some of your pages, but still want to be able to use it and other wordpress plugins on other templates.

<创建文件header-custom.php 在主题文件夹中,不包括wp_headpage template 使用调用该标题<?php get_header( \'custom\' ); ?><?php do_action(\'custom_head\'); ?> 然后在插件中以与wp\\u head相同的方式钩住它
    示例

    function my_plugin_custom_head_action() {
        // do stuff here
    }
    add_action(\'custom_head\', \'my_plugin_custom_head_action\');
    
    还有一个plugin 这使得使用自定义挂钩/动作的过程非常简单。

    <小时>2. Remove stuff you don\'t want from wp_head

    // Remove emojis
    function disable_emojis_wp_head() {
        remove_action( \'wp_head\', \'print_emoji_detection_script\', 7 );
        remove_action( \'admin_print_scripts\', \'print_emoji_detection_script\' );
        remove_action( \'wp_print_styles\', \'print_emoji_styles\' );
        remove_action( \'admin_print_styles\', \'print_emoji_styles\' );    
        remove_filter( \'the_content_feed\', \'wp_staticize_emoji\' );
        remove_filter( \'comment_text_rss\', \'wp_staticize_emoji\' );  
        remove_filter( \'wp_mail\', \'wp_staticize_emoji_for_email\' );
        add_filter( \'tiny_mce_plugins\', \'disable_emojis_wp_tinymce\' );
    }
    add_action( \'init\', \'disable_emojis_wp_head\' );
    
    function disable_emojis_wp_tinymce( $plugins ) {
        if ( is_array( $plugins ) ) {
            return array_diff( $plugins, array( \'wpemoji\' ) );
        } else {
            return array();
        }
    }
    
    // Remove other crap in your example
    add_action( \'get_header\', function() {
        remove_action(\'wp_head\', \'rsd_link\'); // Really Simple Discovery service endpoint, EditURI link
        remove_action(\'wp_head\', \'wp_generator\'); // XHTML generator that is generated on the wp_head hook, WP version
        remove_action(\'wp_head\', \'feed_links\', 2); // Display the links to the general feeds: Post and Comment Feed
        remove_action(\'wp_head\', \'index_rel_link\'); // index link
        remove_action(\'wp_head\', \'wlwmanifest_link\'); // Display the link to the Windows Live Writer manifest file.
        remove_action(\'wp_head\', \'feed_links_extra\', 3); // Display the links to the extra feeds such as category feeds
        remove_action(\'wp_head\', \'start_post_rel_link\', 10, 0); // start link
        remove_action(\'wp_head\', \'parent_post_rel_link\', 10, 0); // prev link
        remove_action(\'wp_head\', \'adjacent_posts_rel_link\', 10, 0); // relational links 4 the posts adjacent 2 the currentpost
        remove_action(\'template_redirect\', \'wp_shortlink_header\', 11);  
        remove_action(\'wp_head\', \'adjacent_posts_rel_link_wp_head\', 10, 0 );
    }, 99);
    
    // Remove adminbar inline css on frontend
    function removeinline_adminbar_css_frontend() {
        if ( has_filter( \'wp_head\', \'_admin_bar_bump_cb\' ) ){
            remove_filter( \'wp_head\', \'_admin_bar_bump_cb\' );
        }
    }
    add_filter( \'wp_head\', \'removeinline_adminbar_css_frontend\', 1 );
    
    如果您想删除rest api链接,我相信这会起作用:

    remove_action( \'template_redirect\', \'rest_output_link_header\', 11, 0 );
    
    看到这个了吗WPSE post here 对于其他解决方案,请删除rest api。

SO网友:arafat

@布莱恩·威利斯有一个很好的答案,可以让你从wp_head. 在大多数情况下,这可能是一种更好的方法,但如果你真的不需要所有额外的东西wp_head(), 你可以决定不带它去。

但是,如果删除wp_head 完全从标题或模板中,您将无法使用如下挂钩wp_enqueue_scripts, 这使得在模板中加载自己的CSS和JS文件变得容易。这就是为什么如果你wp_head 在你的模板中,除去你需要的以外的所有东西,你的模板将输出一个干净的头部,同时允许你从中受益wp_head().

这样,您就不必识别和删除WordPress或其他主题或插件加载到模板上的所有特定内容。

Remove all functions from wp_head hook, and maybe from wp_footer hook except the ones you need.

function unhook_wp_head_footer() {

    if ( /* some condition */ ) {

        global $wp_filter; // it contains all hooks

        foreach ( $wp_filter[\'wp_head\']->callbacks as $priority => $wp_head_hooks ) {
            if ( is_array( $wp_head_hooks ) ){
                foreach ( $wp_head_hooks as $idx => $wp_head_hook ) {
                    if ( $wp_head_hook[\'function\'] !== \'wp_enqueue_scripts\' // keep functionality of wp_enqueue_scripts
                    && $wp_head_hook[\'function\'] !== \'wp_print_head_scripts\' // to allow wp_enqueue_scripts load js inside the head element
                    && $wp_head_hook[\'function\'] !== \'wp_print_styles\' ) { // to allow wp_enqueue_scripts load css inside the head element
                        remove_action( \'wp_head\', $wp_head_hook[\'function\'], $priority );
                    }
                }
            }
        }

        foreach ( $wp_filter[\'wp_footer\']->callbacks as $priority => $wp_footer_hooks ) {
            if ( is_array( $wp_footer_hooks ) ) {
                foreach ( $wp_footer_hooks as $idx => $wp_footer_hook ) {
                    if ( $wp_footer_hook[\'function\'] !== \'wp_print_footer_scripts\' ) { // to allow wp_enqueue_scripts load scripts in the footer
                        remove_action( \'wp_footer\', $wp_footer_hook[\'function\'], $priority );
                    }
                }
            }
        }
    }
}
add_action( \'wp\', \'unhook_wp_head_footer\' );

In case of keeping wp_enqueue_scripts, dequeue all CSS and JS that you don\'t need.

// dequeue all assets if not from your plugin
public function dequeue_assets() {

    if ( /* some condition */ ) {

        global $wp_styles, $wp_scripts;

        $prefix = \'plugin-handle\'; // your plugin name used as prefix in $handle of wp_enqueue_script or wp_enqueue_style function calls

        foreach ( $wp_styles->queue as $handle ) {
            if ( strpos( $handle, $prefix ) !== 0 ) {
                wp_deregister_style( $handle );
                wp_dequeue_style( $handle );
            }
        }

        foreach ( $wp_scripts->queue as $handle ) {
            if ( strpos( $handle, $prefix ) !== 0 ) {
                wp_deregister_script( $handle );
                wp_dequeue_script( $handle );
            }
        }
    }
}
add_action( \'wp_enqueue_scripts\', \'dequeue_assets\', 9999 );