在小部件中添加内部链接的最佳方式

时间:2013-12-18 作者:molokom

我正在寻找一种将静态代码转换为小部件的方法,以便在包含简单内部链接的不同侧栏中显示。

基本代码是:

<div class="my-link-box">
<a href="<?php echo get_page_link(90); ?>">My link text</a>
</div>
主要的重点是使其能够经得起未来的考验,因此无论网站url如何,它都应该在不进行搜索和替换或其他手动干预的情况下工作。

我希望避免:

小部件中的php硬编码链接可能是小部件特定的短代码?非常感谢您的帮助:)

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

页面ID在不同的安装中可能会有所不同,并且无法更改,因此可以选择使用get_page_by_path 因为页面段塞很容易更改:

<div class="my-link-box">
<?php $page = get_page_by_path(\'my-page\'); ?>
<a href="<?php echo get_permalink($page); ?>"><?php echo $page->post_title; ?></a>
</div>
然而,这也不是一个很好的解决方案。

编写自定义小部件后,可以设置选项来选择要显示链接的页面。e、 g.:

class MyPageLinkWidget extends WP_Widget {

  function __construct(){
    parent::__construct( false, \'Page Link Widget\' );
  }

  function widget( $args, $instance ){
    if ( ! isset($instance[\'wpage\']) || (int) $instance[\'wpage\'] <= 0 ) return;
    $page = get_post( $instance[\'wpage\'] );
    echo $args[\'before_widget\'];
    echo \'<div class="my-link-box">\';
    if ( isset($instance[\'title\']) ) {
       $title = apply_filters( \'widget_title\', $instance[\'title\'] );
       if ( $title ) echo $args[\'before_title\'] . $title . $args[\'after_title\'];
    }
    echo \'<a href="\' . get_permalink( $page ) .\'">\' . $page->post_title . \'</a>\';
    echo \'</div>\';
    echo $args[\'after_widget\'];
  }

  function update( $new_instance, $old_instance ){
    $instance = $old_instance;
    $instance[\'title\'] = strip_tags( $new_instance[\'title\'] );
    if ( isset( $new_instance[\'wpage\'] ) && (int) $new_instance[\'wpage\'] > 0 ) {
      $instance[\'wpage\'] = $new_instance[\'wpage\'];
    }
    return $instance;
  }

  function form( $instance ){
    $default = array( \'wpage\'=>\'-1\', \'title\' => \'\' );
    $instance = wp_parse_args( (array) $instance, $default );
    $args = array(
      \'name\' => $this->get_field_name(\'wpage\'),
      \'show_option_none\' => \'None\',
      \'option_none_value\' => \'-1\',
      \'selected\' => $instance[\'wpage\']
    );
    echo \'<p><label>Title:</label>\';
    echo \'<input class="widefat" name="\' . $this->get_field_name(\'title\') . \'" type="text" value="\' . $instance[\'title\'] . \'" /></p>\';
    wp_dropdown_pages( $args );
  }

}
但是,如果您的小部件只包含指向页面的链接,请考虑创建custom menu 并使用“自定义菜单”小部件。

结束

相关推荐

Change a sidebar name?

我使用的是一个由“212”主题创建的子主题,该主题包含许多侧边栏,其中一个称为“主侧边栏”。是否可以将其名称更改为其他名称?