Я пытаюсь сделать WP_query
на custom-post-type
, но по какой-то причине я не могу получить значения из custom-field-types
этих сообщений.
Вот что у меня получилось (functions.php)
function fetch_cases(){
$args = array(
'post_type' => array('case'),
'post_status' => array('publish'),
'posts_per_page' => 5
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while($query->have_posts() ){
$query->the_post();
?>
<a href = "<?php the_permalink(); ?>">
<div style = "background-image:url('<?= get_field('case_picture'); ?>')">
<p><?= get_field('case_title') ?></p>
</div>
</a>
<?php }
}
die();
add_action('wp_ajax_nopriv_fetch_cases', 'fetch_cases');
add_action('wp_ajax_fetch_cases','fetch_cases');
}
И в моем файле JS есть следующее:
$.ajax({
url: "/wp-admin/admin-ajax.php",
data: {
action: "fetch_cases"
},
success: function(data) {
$(".fetch_cases").append(data);
},
error: function(errorThrown) {
console.info(errorThrown);
}
});
Может кто подскажет, что я делаю не так?
Еще я пробовал делать:
<?php the_field('case_picture'); ?>
но не повезло? что мне не хватает?
вы можете использовать эту логику, сохранив поле как скрытое значение и передавая ajax через js
$query = new WP_Query($args);
if ($query->have_posts()) {
while($query->have_posts() ){
$query->the_post();
?>
<a href = "<?php the_permalink(); ?>">
<div style = "background-image:url('<?= get_field('case_picture'); ?>')">
<p><?= get_field('case_title') ?></p>
<input type = "hidden" id = "hidden" name = "hidden_field" value = "<?= get_field('case_picture'); ?>"> // store the value
</div>
</a>
<?php }
}
die();
Теперь получите данные в jquery и пройдите через ajax
<script>
var hidden=//Grab data here.
$.ajax({
url: "/wp-admin/admin-ajax.php",
data: {
action: "fetch_cases",
image:hidden, // Pass the data
},
success: function(data) {
$(".fetch_cases").append(data);
},
error: function(errorThrown) {
console.info(errorThrown);
}
});
</script>
и используйте данные в ajax под названием
function fetch_cases()
{
$image=$_POST['image'];
}
Метод get_field
имеет второй параметр, который является идентификатором сообщения, передайте его и проверьте. Он должен работать.
$post_id = $post->ID;
$value = get_field( 'case_picture', $post_id );
переименовать имя поля может быть такое же имя поля, которое вы забыли.
Нет, как написано в вопросах, я не получаю никаких значений из настраиваемых полей
Похоже, имя поля или какой-либо другой плагин конфликтуют. Я использую тот же код, но использую только настраиваемое поле и плагин woocomerce, и он работает правильно. Я предпочитаю, чтобы вы создали новую временную группу, дали другое имя и сверились с ним. если не работает, то деактивируйте плагины шаг за шагом.
add_action()
должен находиться за пределами вашей пользовательской функции. Попробуйте вместо этого.
function fetch_cases(){
$args = array(
'post_type' => array('case'),
'post_status' => array('publish'),
'posts_per_page' => 5
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while($query->have_posts() ){
$query->the_post();
?>
<a href = "<?php the_permalink(); ?>">
<div style = "background-image:url('<?= get_field('case_picture'); ?>')">
<p><?= get_field('case_title') ?></p>
</div>
</a>
<?php }
}
die();
}
add_action('wp_ajax_nopriv_fetch_cases', 'fetch_cases');
add_action('wp_ajax_fetch_cases','fetch_cases');
вы получаете значение
case_title
?