web-dev-qa-db-ja.com

ウィジェットに内部リンクを追加するための最良の方法

単純な内部リンクを含むさまざまなサイドバーに表示するために、静的なコードをウィジェットに変換する方法を探しています。

基本コードは次のとおりです。

<div class="my-link-box">
<a href="<?php echo get_page_link(90); ?>">My link text</a>
</div>

主な焦点はそれが将来の証拠になるようにすることであるのでそれが検索と置換または他の手動の介入なしでそれが働いているべきであるサイトURLに関係なく。

私は避けたいと思います。

  • ウィジェットのphp
  • ハードコードされたリンク

たぶんウィジェット固有のショートコード?どんな助けでも大歓迎です:)

1
molokom

ページ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>

しかし、これも優れた解決策ではありません。

カスタムウィジェットを作成したら、リンクを表示するページを選択するオプションを設定できます。例えば。:

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

}

ただし、ウィジェットにページへのリンクのみが含まれている場合は、 カスタムメニュー を作成して[カスタムメニュー]ウィジェットを使用することを検討してください。

3
gmazzap