Вывод поста скриптом на сторонних сайтах (информер)


Задание: выводить содержание поста на сторонних сайтах с помощью скрипта с возможностью добавления своих значений, которые будут подменяться в тексте.

  1. создаем в админке пост и вставляем туда наш тестовый текст:
    “The <strong>practice_name</strong> is participating in an exciting investigation of a new multi-wavelength light therapy for the evaluation of treatment for <strong>spec_goal</strong>. If you believe you may benefit from this therapy, please contact our practice to see if you are qualified.  For more information, you may visit <a target="_blank" href="http://site.com/123.html">link</a>.”

    переменные practice_name и spec_goal в дальнейшем мы будем подменять нашими значениями

  2. сохраняем пост и запоминаем его ID (можно увидеть в ссылке) - пример ID: 2795. далее идем в файл functions.php и пишем следующую функцию:
    add_action( 'save_post', 'wpse41912_save_post' );
    function wpse41912_save_post()
    {
    	//echo "<script>alert('post saved or updated!');</script>";
    	global $post;
    	$post_id = $post->ID;
    	if($post_id == '2795'){
    		
    		// Autosave, do nothing
    		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
    				return;
    		// AJAX? Not used here
    		if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) 
    				return;
    		// Check user permissions
    		if ( ! current_user_can( 'edit_post', $post_id ) )
    				return;
    		// Return if it's a post revision
    		if ( false !== wp_is_post_revision( $post_id ) )
    				return;
    		
    		$content = '';
    		// $content .= "<h3>".get_the_title($post_id)."</h3>";
    		// $content .= "<hr>";
    		$content .= get_post_field('post_content', $post_id);
    		
    		$res = array();
    		$res["result"] = $content;
    		$cont = json_encode($res);
    		
    $final = '// API callback
    insertReply(
     '.$cont.'
    );
    ';
    		
    		file_put_contents('/home/site.com/public_html/data/test.json', $final);
    	}
    }

    с помощью этой функции мы сохраняем (при каждом сохранении или апдейте) содержимое нашего поста в json-файл

  3. далее создаем наш тестовый js-файл, который будет парсить json и выводить на сайте инфу. допустим это будет test.js
    function gup( name, url ) {
      if (!url) url = location.href;
      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
      var regexS = "[\\?&]"+name+"=([^&#]*)";
      var regex = new RegExp( regexS );
      var results = regex.exec( url );
      return results == null ? null : results[1];
    }
    
    var getScriptURL = document.getElementById("uvlrx_script").src;
    
    var practice_name = gup( 'practice_name', getScriptURL );
    practice_name = decodeURI(practice_name);
    
    var spec_goal = gup( 'spec_goal', getScriptURL );
    spec_goal = decodeURI(spec_goal);
    
    function insertReply(content) {
    	var strIn = content["result"];
    	strIn = strIn.replace(/\bpractice_name\b/g,practice_name);
    	strIn = strIn.replace(/\bspec_goal\b/g,spec_goal);
        document.getElementById('uvlrx_output').innerHTML = strIn;
    }
    
    // create script element
    var script = document.createElement('script');
    // assing src with callback name
    script.src = 'http://site.com/data/test.json?callback=insertReply';
    // insert script to document and load content
    document.body.appendChild(script);
  4. и в финале наш спец.код, который юзеры будут ставить у себя на сайтах:
    <script id="uvlrx_script" src="http://site.com/data/test.js?practice_name=insert name here&spec_goal=insert specific investigational goal here"></script>
    <div id="uvlrx_output"></div>

    внутри кода значения insert name here и insert specific investigational goal here меняем на свой текст 😉