我的默认wordpress Archives小部件出了问题。我想为它输出的每个链接添加一个变量。但由于某种原因,它似乎没有将变量添加到链接或任何普通文本。
这是我到目前为止所做的事情(我正在使用我自己的主题重新制作小部件,因此不对wp核心文件进行编辑。):
$archive = wp_get_archives(apply_filters('widget_archive_args', array('type' => 'monthly', 'show_post_count' => $c, 'echo' => 0)));
$archive = explode( '</li>' , $archive );
foreach( $archive as $link ) {
$catid='?catid='.$category.'/"';
$link = str_replace('/"',$catid, $link);
echo $link;
}
但是这仍然会输出链接,因为它通常没有str_replace。当我查看我的pagesource时,我仍然会看到这个:
<a title="bla" href="http://www.mysite.com/2013/02/">February 2013</a>
而不是
<a title="bla" href="http://www.mysite.com/2013/02/?catid=24">February 2013</a>
那么有人可以告诉我我做错了什么吗?谢谢!
这是完整的课程:
<?php class WP_widget_archive_by_category extends WP_Widget {
function __construct() {
$widget_ops = array('classname' => 'widget_archive_by_category', 'description' => __( 'A monthly archive of your site’s posts from selected category') );
parent::__construct('Archives-By-Category', __('Archives By Category'), $widget_ops);
}
function widget( $args, $instance ) {
extract($args);
$c = ! empty( $instance['count'] ) ? '1' : '0';
$d = ! empty( $instance['dropdown'] ) ? '1' : '0';
$title = apply_filters('widget_title', empty($instance['title']) ? __('Archives By Category') : $instance['title'], $instance, $this->id_base);
if( ! $category = $instance["cat"] ) $category='';
echo $before_widget;
if ( $title )
echo $before_title . $title . $after_title;
if ( $d ) { ?>
<select name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value=""><?php echo esc_attr(__('Select Month')); ?></option> <?php wp_get_archives(apply_filters('widget_archive_dropdown_args', array('type' => 'monthly', 'format' => 'option', 'show_post_count' => $c))); ?> </select>
<?php //'cat' => $category
} else { ?>
<ul>
<?php // 'cat' => $category,
$archive = wp_get_archives(apply_filters('widget_archive_args', array('type' => 'monthly', 'show_post_count' => $c, 'echo' => 0)));
$archive = explode( '</li>' , $archive );
foreach( $archive as $link ) {
$catid='?catid='.$category.'/"';
$link = str_replace('/"',$catid, $link);
echo $link;
}
?>
</ul>
<?php
}
echo $after_widget;
}
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$new_instance = wp_parse_args( (array) $new_instance, array( 'title' => '', 'count' => 0, 'dropdown' => '') );
$instance['title'] = strip_tags($new_instance['title']);
$instance['count'] = $new_instance['count'] ? 1 : 0;
$instance['dropdown'] = $new_instance['dropdown'] ? 1 : 0;
$instance['cat'] = (int) $new_instance['cat'];
return $instance;
}
function form( $instance ) {
$instance = wp_parse_args( (array) $instance, array( 'title' => '', 'count' => 0, 'dropdown' => '') );
$title = strip_tags($instance['title']);
$count = $instance['count'] ? 'checked="checked"' : '';
$dropdown = $instance['dropdown'] ? 'checked="checked"' : '';
$category = isset( $instance['cat'] ) ? absint( $instance['cat'] ) : 1;
?>
<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></p>
<p>
<input class="checkbox" type="checkbox" <?php echo $dropdown; ?> id="<?php echo $this->get_field_id('dropdown'); ?>" name="<?php echo $this->get_field_name('dropdown'); ?>" /> <label for="<?php echo $this->get_field_id('dropdown'); ?>"><?php _e('Display as dropdown'); ?></label>
<br/>
<input class="checkbox" type="checkbox" <?php echo $count; ?> id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>" /> <label for="<?php echo $this->get_field_id('count'); ?>"><?php _e('Show post counts'); ?></label>
</p>
<p>
<label>
<?php _e( 'Category' ); ?>
:
<?php wp_dropdown_categories( array( 'name' => $this->get_field_name('cat'), 'selected' => $instance['cat'], 'show_option_all' => 'All Categories', 'hide_empty' => '0') ); ?>
</label>
</p>
<?php }} ?>
答案 0 :(得分:0)
使用过滤器get_archives_link
的可能解决方案:
add_filter( 'get_archives_link', 'add_parameter_to_archive_link_so_14939880' );
function add_parameter_to_archive_link_so_14939880( $html )
{
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $item)
{
$href = $item->getAttribute( 'href' );
$item->setAttribute( 'href', $href.'?CUSTOM_PARAM' ); // <-- Adjust here
$return = str_replace(
array( '<html>', '</html>', '<body>', '</body>' ),
array( '', '', '', '' ),
$dom->saveHTML()
);
return $return;
}
return $html;
}