web-dev-qa-db-ja.com

特定のカスタム投稿タイプカテゴリのURLを書き換えて別のページに移動する

私はこの一般的な質問が以前に尋ねられたことを知っています(ここで ここで そして ここで )が、問題は私の限られた経験による他の人のコードを見るのに必要な結果が得られません。だからここに私の質問です:このページのブレッドクラムリンク "Explore"を変更するための最良の方法は何ですか: http://example.com/explore/photos/

こちらから: http://example.com/explore/explore/ こちらから: http://example.com/explore/

これはちょっとしたハックであることを私は知っています - しかし、私の現在のテーマでは、それは私が望むように物事を動かすための最も簡単な方法になると思います。

私の現在のテーマの設定方法は、私が自分のサイトのメニュー階層に合わせるためにスラッグを「探索」にするカスタム投稿タイプのギャラリーを持っていることです。しかし、その後、SEO Yoastプラグインを使用してブレッドクラムの階層に「写真」が正しく表示されるようにするには(私が理解していることから、プラグインはWordpressのパーマリンクに続く)、ギャラリーを追加する必要がありました。 「探索」のカテゴリの親。だから私はそれをしたいのは http://example.com/explore/ いつでも http://example.com/explore/explore / が表示されます。理想的には、これはブレッドクラムの作成時にサーバー側で発生するため、ブレッドクラム内のリンクにマウスオーバーすると、 http://example.com/explore/ が表示されます。

1
Nathan

だから私はここでこのページに出会い、もう一度試してみることにしました。そしてそれはうまくいった!

私はギャラリーのカスタム投稿タイプを "Explore"の子である "Photos"ページの子にすることができました、そして私のカスタム投稿にこのコードを使ってブレッドクラムですべてが完璧になった型名):

//Add the meta box callback function
function admin_init(){
add_meta_box("case_study_parent_id", "Case Study Parent ID", "set_case_study_parent_id", "casestudy", "normal", "low");
}
add_action("admin_init", "admin_init");

//Meta box for setting the parent ID
function set_case_study_parent_id() {
  global $post;
  $custom = get_post_custom($post->ID);
  $parent_id = $custom['parent_id'][0];
  ?>
  <p>Please specify the ID of the page or post to be a parent to this Case Study.</p>
  <p>Leave blank for no heirarchy.  Case studies will appear from the server root with no assocaited parent page or post.</p>
  <input type="text" id="parent_id" name="parent_id" value="<?php echo $post->post_parent; ?>" />
  <?php
  // create a custom nonce for submit verification later
  echo '<input type="hidden" name="parent_id_noncename" value="' . wp_create_nonce(__FILE__) . '" />';
}

// Save the meta data
function save_case_study_parent_id($post_id) {
  global $post;

  // make sure data came from our meta box
  if (!wp_verify_nonce($_POST['parent_id_noncename'],__FILE__)) return $post_id;
    if(isset($_POST['parent_id']) && ($_POST['post_type'] == "casestudy")) {
      $data = $_POST['parent_id'];
      update_post_meta($post_id, 'parent_id', $data);
    }
}
add_action("save_post", "save_case_study_parent_id");
2
Nathan