Я разрабатываю плагин, который показывает сообщение Wordpress в лайтбоксе вне цикла. Я заметил, что некоторый плагин, которые изменяют содержание сообщения (как плагин Кнопки Мне нравится Facebook) использует get_permalink()
функция для получения URL сообщения. Когда сообщение обычно открывается (single.php), плагины хорошо работают. Когда сообщение открыто в лайтбоксе (вне цикла), плагины не работают с тех пор get_permalink()
в плагине ничего не возвращает. однако, если я могу так или иначе применить фильтр и возврат get_permalink($post_ID)
вместо этого, я мог сделать задание. Я не знаю, как сцепить его правильно с get_permalink. Я попробовал это, но это просто заставляет его ввести бесконечный цикл:
add_filter('post_link','cg_post_permalink');
function cg_post_permalink(){ return get_permalink($post_ID); }
здесь я считал это post_link
был рычаг для функции get_permalink
PS - не предлагайте использовать iframe, так как он имеет свой собственный набор сложностей.:)
Я сделал плагин в качестве примера на основе ответа Milo, чтобы показать, как можно использовать ajax, чтобы получить сообщение и отобразить его с палитрой цветов.
example.php:
<?php
/*
Plugin Name: example
*/
function example_ajax_get_post() {
$url = $_POST['url'];
$post = get_post(url_to_postid($url));
?>
<h2><?php print $post->post_title; ?></h2>
<div><?php print $post->post_content; ?></div>
<?php
die();
}// end function
add_action('wp_ajax_get_post', 'example_ajax_get_post');
function example_init() {
wp_register_style('colorbox-style', plugins_url() . '/example/css/colorbox.css');
wp_enqueue_style('colorbox-style');
wp_enqueue_script( 'ajax', plugin_dir_url( __FILE__ ) . 'js/ajax.js', array( 'jquery' ) );
wp_localize_script( 'ajax', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
wp_enqueue_script('jquery');
wp_register_script('colorbox-script', plugins_url() . '/example/js/jquery.colorbox-min.js');
wp_enqueue_script('colorbox-script');
}// end function
add_action('init', 'example_init');
function example_footer() {
?>
<script>
(function($) {
$(document).ready(function() {
$('.post .entry-title a').click(function(e) {
e.preventDefault();
var href = $(this).attr('href');
var data = {
action : 'get_post',
url : href
};
$.post(ajaxurl, data, function(data) {
$.colorbox({ html : data });
});
});
});
})(jQuery);
</script>
<?php
}// end function
add_action('wp_footer', 'example_footer');
/* EOF */
Во-первых, я предлагаю читать Ajax в Плагинах в Кодексе, включая примеры, связанные внизу. Путем Вы делаете, Ваш запрос Ajax имеет несколько потенциальных точек отказа в зависимости от того, как WordPress настроен.
Во-вторых, передайте требуемый идентификатор сообщения со своим запросом Ajax, затем запросите для того сообщения в Вашей функции Ajax через WP_Query
. Можно затем выполнить цикл для вывода содержания сообщения, и проблема функций, не работающих вне цикла, становится надуманным вопросом.
Также см. этот ответ, который я дал СВЯЗАННОМУ С AJAX вопросу, который показывает полный рабочий пример загрузки сообщений через Ajax.
$.colorbox({html:$data_from_ajax});
– Milo
17.11.2012, 17:18