为WordPress REST API请求创建分页
我需要一个非常精确的主题。我有一个提取
函数,可以从WordPress博客中获取结果。
function getTags() {
let page = 1,
tagURL = `https://css-tricks.com/wp-json/wp/v2/posts?_embed&per_page=4&tags=833&page=1`;
console.log(tagURL)
$loader.style.display = "block";
fetch(tagURL)
.then(response => response.json())
.then(dataTag => {
dataTag.map(dataTag => {
// Content
})
.catch(err => {
console.log(err);
let message = err.statusText || "Es ist ein Fehler aufgetreten...";
$posts.innerHTML = `<p>Error ${err.status}: ${message}</p>`;
$loader.style.display = "none";
});
}
我需要创建一个分页,每页显示4个帖子,但是找不到正确的方法。 如果社区中的某人可以指导我,我将非常感激。
问候,谢谢。
&lt; - 更新 - &gt;
完整的代码如下
const
$posts = document.getElementById('posts'),
$loader = document.querySelector('.loader'),
$template = document.getElementById("post-template").content
function getTags() {
let tagURL = `https://w-api.cyberconcept.de/wp-json/wp/v2/posts?_embed&per_page=2&tags=35&page=1`;
$loader.style.display = "block";
fetch(tagURL)
.then(response => response.json())
.then(dataTag => {
dataTag.forEach(dataTag => {
/**
* At this point a custom URL is created for each post-card element.
* @type {Element}
*/
const postLink = $template.querySelectorAll('.post-link');
let url = window.location.origin + window.location.pathname;
url = url + "?post_id=" + dataTag.id;
postLink[0].setAttribute('href', url);
postLink[1].setAttribute('href', url);
/**
* Posts tags loop and post Tag url
* @type {string}
*/
let tags = "";
const TagsUrl = window.location.origin + window.location.pathname
dataTag._embedded["wp:term"][1].forEach(
dataTag => {
url = TagsUrl + "?tag_id=" + dataTag.id;
tags += `<a href="${url}" class="tag is-background-gradientDark">${dataTag.name}</a>`
}
);
/*
* Post images
*/
$template.querySelector('.post-image').src = dataTag._embedded["wp:featuredmedia"] ? dataTag._embedded["wp:featuredmedia"][0].source_url : "";
$template.querySelector('.post-image').alt = dataTag._embedded["wp:featuredmedia"] ? dataTag._embedded["wp:featuredmedia"][0].alt_tex : "";
$template.querySelector('.post-image').title = dataTag._embedded["wp:featuredmedia"] ? dataTag._embedded["wp:featuredmedia"][0].title.rendered : "";
/*
* Post title
*/
$template.querySelector(".post-title").innerHTML = dataTag.title.rendered;
/*
*Post Excerpt
*/
$template.querySelector('.post-excerpt').innerHTML = dataTag.excerpt.rendered;
/*
*Post Tags
*/
const tag = $template.querySelector('.post-tags');
if (dataTag._embedded["wp:term"][1].length === 0) {
tag.style.display = "none";
} else {
tag.style.display = "flex";
tag.innerHTML = ` ${tags}`;
}
let $clone = document.importNode($template, true);
$posts.appendChild($clone);
});
$loader.style.display = "none";
})
.catch(err => {
console.log(err);
let message = err.statusText || "Es ist ein Fehler aufgetreten...";
$posts.innerHTML = `<p>Error ${err.status}: ${message}</p>`;
$loader.style.display = "none";
});
}
document.addEventListener("DOMContentLoaded", () => {
getTags(1);
})
<section id="blog-Slider" class="blog head-slider"></section>
<div class="container">
<section id="posts-section">
<h1 class="headline black-font"></h1>
<div id="posts" class="blog grid"></div>
<div id="pageNumber"></div>
</section>
<section id="single" class="blog single"></section>
</div>
<div id="pagination"></div>
<div class="blog loading">
<img style="width: fit-content;" class="loader"
src="" alt="laden...">
</div>
<template id="post-template">
<div class="post-card">
<a class="post-link">
<img class="post-image">
</a>
<div>
<div class="post-tags"></div>
<a class="post-link">
<h3 class="post-title"></h3>
<p class="post-excerpt standard black-font"></p>
</a>
</div>
</div>
</template>
I need a push on a very precise subject. I have a fetch
function to get results from a WordPress blog.
function getTags() {
let page = 1,
tagURL = `https://css-tricks.com/wp-json/wp/v2/posts?_embed&per_page=4&tags=833&page=1`;
console.log(tagURL)
$loader.style.display = "block";
fetch(tagURL)
.then(response => response.json())
.then(dataTag => {
dataTag.map(dataTag => {
// Content
})
.catch(err => {
console.log(err);
let message = err.statusText || "Es ist ein Fehler aufgetreten...";
$posts.innerHTML = `<p>Error ${err.status}: ${message}</p>`;
$loader.style.display = "none";
});
}
I need to create a pagination that shows 4 posts per page, but I can't find the right way to do it.
If someone from the community can guide me, please, I would be very grateful.
Greetings and thanks.
<--UPDATE-->
the complete code is as follows
const
$posts = document.getElementById('posts'),
$loader = document.querySelector('.loader'),
$template = document.getElementById("post-template").content
function getTags() {
let tagURL = `https://w-api.cyberconcept.de/wp-json/wp/v2/posts?_embed&per_page=2&tags=35&page=1`;
$loader.style.display = "block";
fetch(tagURL)
.then(response => response.json())
.then(dataTag => {
dataTag.forEach(dataTag => {
/**
* At this point a custom URL is created for each post-card element.
* @type {Element}
*/
const postLink = $template.querySelectorAll('.post-link');
let url = window.location.origin + window.location.pathname;
url = url + "?post_id=" + dataTag.id;
postLink[0].setAttribute('href', url);
postLink[1].setAttribute('href', url);
/**
* Posts tags loop and post Tag url
* @type {string}
*/
let tags = "";
const TagsUrl = window.location.origin + window.location.pathname
dataTag._embedded["wp:term"][1].forEach(
dataTag => {
url = TagsUrl + "?tag_id=" + dataTag.id;
tags += `<a href="${url}" class="tag is-background-gradientDark">${dataTag.name}</a>`
}
);
/*
* Post images
*/
$template.querySelector('.post-image').src = dataTag._embedded["wp:featuredmedia"] ? dataTag._embedded["wp:featuredmedia"][0].source_url : "";
$template.querySelector('.post-image').alt = dataTag._embedded["wp:featuredmedia"] ? dataTag._embedded["wp:featuredmedia"][0].alt_tex : "";
$template.querySelector('.post-image').title = dataTag._embedded["wp:featuredmedia"] ? dataTag._embedded["wp:featuredmedia"][0].title.rendered : "";
/*
* Post title
*/
$template.querySelector(".post-title").innerHTML = dataTag.title.rendered;
/*
*Post Excerpt
*/
$template.querySelector('.post-excerpt').innerHTML = dataTag.excerpt.rendered;
/*
*Post Tags
*/
const tag = $template.querySelector('.post-tags');
if (dataTag._embedded["wp:term"][1].length === 0) {
tag.style.display = "none";
} else {
tag.style.display = "flex";
tag.innerHTML = ` ${tags}`;
}
let $clone = document.importNode($template, true);
$posts.appendChild($clone);
});
$loader.style.display = "none";
})
.catch(err => {
console.log(err);
let message = err.statusText || "Es ist ein Fehler aufgetreten...";
$posts.innerHTML = `<p>Error ${err.status}: ${message}</p>`;
$loader.style.display = "none";
});
}
document.addEventListener("DOMContentLoaded", () => {
getTags(1);
})
<section id="blog-Slider" class="blog head-slider"></section>
<div class="container">
<section id="posts-section">
<h1 class="headline black-font"></h1>
<div id="posts" class="blog grid"></div>
<div id="pageNumber"></div>
</section>
<section id="single" class="blog single"></section>
</div>
<div id="pagination"></div>
<div class="blog loading">
<img style="width: fit-content;" class="loader"
src="" alt="laden...">
</div>
<template id="post-template">
<div class="post-card">
<a class="post-link">
<img class="post-image">
</a>
<div>
<div class="post-tags"></div>
<a class="post-link">
<h3 class="post-title"></h3>
<p class="post-excerpt standard black-font"></p>
</a>
</div>
</div>
</template>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您只需要重写包装器
you just need to rewrite the wrapper
尝试以下操作:
您需要增加页面变量并调用函数 getTags
我在ajax响应后逐渐增加了变量值 page 。
Try this :
You need to increased page variable and call function getTags
I have increaed variable value page after ajax response.