Недавно я начал работать с WordPress, и я сделал небольшой учебник по Ajax.WordPress: ответ Ajax перезаписывает всю страницу
В настоящее время я пытаюсь получить содержимое сообщения, а затем отображать их на одной странице в другом div (который был создан с использованием коротких кодов). Все работает, за исключением того, что ответ отображается на всей странице и не отображается в выбранном div, тем самым очищая другое содержимое.
Ниже Вы найдете фрагменты кода, который я написал:
////CREATING SHORT CODES
public function posts_callback($atts = null, $content = null) {
$args = array("post_type" => "post", "orderby" => "date", "order" => "DESC", "post_status" => "publish");
$posts = new WP_Query($args);
?>
<div style ="text-align: center" >
<?php
if ($posts->have_posts()):
while ($posts->have_posts()):
$posts->the_post();
$link = admin_url('admin-ajax.php?action=post_content&post_id='.get_the_ID());
?>
<div id="posts_callback_div" style="display: inline-block; width: 300px; border-color: #333; border-style: solid; border-width: 2px; margin-top: 15px;">
<a class='short_code_link' data-post-id='<?php echo get_the_ID() ?>' href='<?php echo $link ?>' >
<?php echo get_the_title(); ?>
</a>
</div>
<?php
endwhile;
else:
echo "";
die();
endif;
?>
</div>
<?php
}
public function custom_container_shortCode() {
?>
<div class="custom_container" id="custom_container" style="width: 300px; border-color: #333; border-style: solid; border-width: 2px; margin-top: 15px;">
Hi, if you can still see me then the ajax is not working!
</div>
<?php
}
// Jquery ЧАСТЬ
(function ($) {
'use strict';
$(".short_code_link").click(function (e) {
e.preventDefault();
postID = jQuery(this).attr("data-post-id");
jQuery.ajax({
type: "GET",
url: myAjax.ajaxurl,
// dataType: "html",
cache: false,
data: {
action: "post_content",
post_id: postID,
},
success: function (response) {
jQuery("#custom_container").html(response);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus);
alert("Error: " + errorThrown);
}
});
});
})(jQuery);
// PHP Обработчики
//CREATING AJAX API TO RETRIEVE POST CONTENT
public function post_content() {
$post_id = $_GET["post_id"];
$content_post = get_post($post_id);
$content = $content_post->post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]$gt', $content);
echo $content;
die();
}
Можете ли вы указать на то, что я я делаю неправильно?
Спасибо. Я хочу только заменить содержимое в #custom_container. Но вместо этого вся страница заменяется ответом, и я не могу понять, почему. Отсюда мой вопрос, чтобы понять, почему это происходит. Не могли бы вы рассказать о части событий/поведения? –
В этом случае возникает только один вариант: у вас может быть два элемента с идентификатором 'custom_container', и сначала будет заменен только первый, который был встречен в дереве DOM (родительский). Второй никогда не анализируется, потому что он удален. Пожалуйста, проверьте. –
Спасибо за ваш вклад. Я фактически использую шаблон Wordpress, и я вставил функцию jjery ajax в тот же файл сценария администратора, который уже содержит другую функцию ajax. Это неверно; должен ли я создать и поставить в очередь вторую функцию ajax в другом файле сценария? Или это не влияет на это? Также есть только один элемент с этим id. –