Сделайте get_permalink () работой вне Цикла с помощью фильтров

Я разрабатываю плагин, который показывает сообщение 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, так как он имеет свой собственный набор сложностей.:)

0
17.11.2012, 06:37
2 ответа

Я сделал плагин в качестве примера на основе ответа 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 */
1
20.02.2020, 00:12

Во-первых, я предлагаю читать Ajax в Плагинах в Кодексе, включая примеры, связанные внизу. Путем Вы делаете, Ваш запрос Ajax имеет несколько потенциальных точек отказа в зависимости от того, как WordPress настроен.

Во-вторых, передайте требуемый идентификатор сообщения со своим запросом Ajax, затем запросите для того сообщения в Вашей функции Ajax через WP_Query. Можно затем выполнить цикл для вывода содержания сообщения, и проблема функций, не работающих вне цикла, становится надуманным вопросом.

Также см. этот ответ, который я дал СВЯЗАННОМУ С AJAX вопросу, который показывает полный рабочий пример загрузки сообщений через Ajax.

0
20.02.2020, 00:12
  • 1
    Большое спасибо. Я определенно узнаю больше о Ajax теперь :). На данный момент I'l позволяют палитре цветов обработать запрос, так как это имеет много функций, которые я хотел бы использовать. И путем добавления ЦИКЛА к файлу решил все мои проблемы. Все хорошо работает. урок изучил :) –  Anshul 17.11.2012, 10:19
  • 2
    , можно все еще использовать палитру цветов, чтобы представить сообщение, просто передать данные, возвращенные из ajax, запрашивают к палитре цветов как тип содержимого HTML: $.colorbox({html:$data_from_ajax}); –  Milo 17.11.2012, 17:18

Теги

Похожие вопросы