do_action в заголовке, добавить действие позже?

Я хочу включить facebook JSSDK только на страницы, где я хочу его использовать. На веб-сайте facebook это означает, что в идеале он включается сразу после тега открытия тега, который находится в header.php

Моя мысль заключалась в том, чтобы добавить в header.php

<?php do_action( 'topofthetop'); ?> 

сразу после открытия тега тела.

А потом позже (в comments.php перед <?php if ( have_comments() ) : ?> ), Если мне нужно позвонить

 add_action( 'topofthetop', array('someclass','FB_JS_SDK') ); 

FB_JS_SDK просто перекликается с кодом, необходимым для включения FB-JSSDK. Но код не появляется после тега body. Я думаю, потому что заголовок.php allready выводится перед вызовом add_action?

Как я могу это решить?

Вы должны зарегистрировать обратные вызовы до их вызова ( add_action() и add_filter() являются функциями регистрации, они помнят, что делать, когда).

Попробуйте следующее в своих functions.php или в вашем плагине:

 add_action( 'topofthetop', 'load_FB_JS_SDK' ); function load_FB_JS_SDK() { if ( is_singular() && have_comments() ) someclass::FB_JS_SDK(); } 

Почему бы вам не подключить его из файла функций ваших дочерних тем, используя условный тег.

 function facebook_comments_sdk_script() { wp_enqueue_script( 'facebook-sdk', get_bloginfo( 'stylesheet_directory' ) . '/js/fb-comments.js', array(), '1.0.0', true ); } add_action( 'wp_enqueue_scripts', 'facebook_comments_sdk_script' ); function load_facebook_comments_form() { if ( comments_open() ) { echo '<div class="fb-comments" data-href="http://example.com/comments" data-numposts="5" data-colorscheme="light"></div>'; } } add_action('comment_form', 'load_facebook_comments_form'); 

Я также удалил теги скриптов из Javascript SDK и поместил их в такой файл:

 (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=123456789224439"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));