我正在尝试替换HTML类并在其中添加一些值...在某种程度上我成功地解决了这个问题,但是现在我需要帮助。这是我的功能代码
function wpse247219_custom_pagination() {
global $the_query;
$big = 999999999; // need an unlikely integer
$pages = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('page') ),
'total' => $the_query->max_num_pages,
'prev_next' => false,
'type' => 'array',
'prev_next' => true,
'prev_text' => __( 'Previous', 'text-domain' ),
'next_text' => __( 'Next page', 'text-domain'),
) );
$output = '';
if ( is_array( $pages ) ) {
$paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var( 'paged' );
$output .= '<ul class="pagination-list">';
foreach ( $pages as $page ) {
$output .= "<li>$page</li>";
}
$output .= '</ul>';
$dom = new \DOMDocument();
$dom->loadHTML( mb_convert_encoding( $output, 'HTML-ENTITIES', 'UTF-8' ) );
$xpath = new \DOMXpath( $dom );
$page_numbers = $xpath->query( "//*[contains(concat(' ', normalize-space(@class), ' '), ' page-numbers ')]" );
foreach ( $page_numbers as $page_numbers_item ) {
$page_numbers_item_classes = explode( ' ', $page_numbers_item->attributes->item(0)->value );
if ( in_array( 'current', $page_numbers_item_classes ) ) {
$list_item_attr_class = $dom->createAttribute( 'class' );
$list_item_attr_class->value = 'mynewclass';
$page_numbers_item->parentNode->appendChild( $list_item_attr_class );
}
// Replace the class 'page-numbers' with 'page-link'
$page_numbers_item->attributes->item(0)->value = str_replace(
'page-numbers',
'pagination-link',
$page_numbers_item->attributes->item(0)->value );
// Replace the class 'page-numbers' with 'page-link'
$page_numbers_item->attributes->item(0)->value = str_replace(
'prev pagination-link',
'pagination-previous',
$page_numbers_item->attributes->item(0)->value );
}
// Save the updated HTML and output it.
$output = $dom->saveHTML();
}
return $output;
}
此代码当前输出此修改后的HTML代码
<nav class="pagination is-rounded" role="navigation" aria-label="pagination">
<ul class="pagination-list">
<li>
<a class="pagination-previous" href="https://blog.igsavers.com/page/3/">Previous</a></li>
<li><a class="pagination-link" href="https://blog.igsavers.com/page/1/">1</a></li>
<li><a class="pagination-link" href="https://blog.igsavers.com/page/2/">2</a></li>
<li><a class="pagination-link" href="https://blog.igsavers.com/page/3/">3</a></li>
<li><span aria-current="page" class="page-numbers current">4</span></li>
<li><a class="pagination-link" href="https://blog.igsavers.com/page/5/">5</a></li>
<li><a class="pagination-link" href="https://blog.igsavers.com/page/6/">6</a></li>
<li><span class="pagination-link dots">…</span></li>
<li><a class="pagination-link" href="https://blog.igsavers.com/page/11/">11</a></li>
<li><a class="next pagination-link" href="https://blog.igsavers.com/page/5/">Next page</a></li></ul>
</nav>
现在我也想将<span class="page-numbers current">
的类替换为<span class="pagination-link is-current ">
看起来像这样
我还试图从下一页和上一页按钮中删除<li></li>
标签。任何类型的帮助将不胜感激
答案 0 :(得分:0)
在对我的代码进行了一些实验之后,我解决了我的问题。这是我的代码...
function wpse247219_custom_pagination() {
global $the_query;
$big = 999999999; // need an unlikely integer
$pages = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('page') ),
'total' => $the_query->max_num_pages,
'prev_next' => false,
'type' => 'array',
'prev_next' => true,
'prev_text' => __( 'Previous', 'text-domain' ),
'next_text' => __( 'Next page', 'text-domain'),
) );
$output = '';
if ( is_array( $pages ) ) {
$paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var( 'paged' );
$size = count($pages)-1;
$output .= '<ul class="pagination-list">';
$i = 0;
foreach ( $pages as $page ) {
if($i < 1 || $i == $size){
$output .= "$page";
}else{
$output .= "<li>$page</li>";
}
$i++;
}
$i = 0;
$output .= '</ul>';
$dom = new \DOMDocument();
$dom->loadHTML( mb_convert_encoding( $output, 'HTML-ENTITIES', 'UTF-8' ) );
$xpath = new \DOMXpath( $dom );
$page_numbers = $xpath->query( "//*[contains(concat(' ', normalize-space(@class), ' '), ' page-numbers ')]" );
foreach ( $page_numbers as $page_numbers_item ) {
$page_numbers_item_classes = explode( ' ', $page_numbers_item->attributes->item(0)->value );
if ( in_array( 'current', $page_numbers_item_classes ) ) {
$list_item_attr_class = $dom->createAttribute( 'class' );
$list_item_attr_class->value = 'mynewclass';
$page_numbers_item->parentNode->appendChild( $list_item_attr_class );
}
// Replace the class 'page-numbers' with 'page-link'
$page_numbers_item->attributes->item(0)->value = str_replace(
'page-numbers',
'pagination-link',
$page_numbers_item->attributes->item(0)->value );
// Replace the class 'page-numbers' with 'page-link'
$page_numbers_item->attributes->item(0)->value = str_replace(
'prev pagination-link',
'pagination-previous',
$page_numbers_item->attributes->item(0)->value );
}
$yupo = $xpath->query( "//*[contains(concat(' ', normalize-space(@class), ' '), ' page-numbers current')]" );
foreach($yupo as $yup){
$yup->attributes->item(1)->value = str_replace(
'page-numbers current',
'pagination-link is-current',
$yup->attributes->item(1)->value );
}
// Save the updated HTML and output it.
$output = $dom->saveHTML();
}
return $output;
}
答案 1 :(得分:-1)
您可以仅使用原始JavaScript轻松实现此目标:
const elActivePage = document.querySelector('span.current');
elActivePage.className = 'pagination-link is-current';