2013-02-18 74 views
1

我有一个问题,默认的WordPress的档案部件。我想为它输出的每个链接添加一个变量。但由于某些原因,它似乎没有将该变量添加到链接或任何普通文本中。添加变量来链接在wordpress存档部件

这是我得到了什么至今(我返工小部件在我自己的主题,所以没有编辑到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> 

所以,任何人可以告诉我,我做错了什么?谢谢!

这是完整的类:使用过滤器get_archives_link

<?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&#8217;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

刚才那个代码怎么回事?你能提供更多的上下文吗? – brasofilo 2013-02-18 20:03:32

+0

我编辑了我的帖子以显示整个班级。它在widgets.php中有二十一个主题。 (虽然我在一个二十一小孩的主题/副本中工作) – user2083806 2013-02-18 22:50:33

+0

奇怪的是str_replace做的工作,如果我省略“从str_replace和$ catid。 – user2083806 2013-02-18 23:20:58

回答

0

可能的解决办法:

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; 
}