beneverard
  • 0
Учитель

Интеграция пользовательского типа записи в иерархию страниц

  • 0

Я создаю тему с настраиваемым типом сообщений для членов команды, у меня также есть следующая структура страницы:

about  <-- this is a page
about/team-members  <-- this is a page, lists all the team members
about/team-members/joe-bloggs  <-- this is a custom post type (team member) entry

В третьей структуре здесь используются страницы «О нас» и «Члены команды», но далее используется слаг пользовательского типа записи, чтобы он выглядел так, как будто его родители являются членами команды и о них. Я добился этого, установив следующие параметры для пользовательского типа сообщения:

...
'rewrite' => array( 'slug' => 'about/team-members', 'with_front' => false)
...

Это прекрасно работает, однако, когда я перехожу на уровень сообщения члена команды, я больше не получаю классы текущей страницы, текущего предка на родительских страницах. Я знаю, почему это так, потому что технически мы не на странице, родительской для этих страниц, однако есть ли способ, которым я могу обмануть / исправить / обмануть, чтобы страницы ДЕЙСТВИТЕЛЬНО отображались как родительские?

Я прекрасно добился этого, используя страницы для членов команды, однако вместо этого был выбран настраиваемый тип сообщений для удобства использования администратором.

Спасибо ребята+девочки!

Share
  1. вам нужно установить идентификатор страницы членов команды в качестве вашего пользовательского типа сообщения post_parent.

    • 0
  2. При работе со страницами вы можете выбрать родительскую страницу, и это значение будет сохранено как идентификационный номер родительской страницы в поле дочерней страницы post_parent в базе данных.

    В вашем случае вы используете настраиваемый тип записи, поэтому вам нужно будет создать собственный метабокс для родительской страницы; что-то типа:

    /* Define the custom box */
    add_action('add_meta_boxes', 'child_cpt_add_custom_box');
    
    /* Adds a box to the main column on the custom post type edit screens */
    function child_cpt_add_custom_box() {
        add_meta_box('child_cpt', __( 'My child_cpt parent'),'team_member_inner_custom_box','team_member');
    }
    
    /* Prints the box content */
    function team_member_inner_custom_box() {
        global $post;
        // Use nonce for verification
        wp_nonce_field( plugin_basename(__FILE__), 'team_member_inner_custom_box' );
        echo 'Select the parent page';
        $mypages = get_pages();
        echo '<select name="cpt_parent">';
        foreach($mypages as $page){     
            echo '<option value="'.$page->ID.'"';
            if ($page->ID == $post->post_parent) {echo ' selected';}
            echo '>"'.$page->post_title.'</option>';
        }
        echo '</select>';
    }
    /* Do something with the data entered */
    add_action('wp_insert_post_data', 'myplugin_save_postdata');
    
    /* When the post is saved, saves our custom data */
    function myplugin_save_postdata( $data, $postarr ) {
        global $post;
          // verify this came from the our screen and with proper authorization,
          // because save_post can be triggered at other times
    
          if ( !wp_verify_nonce( $_POST['team_member_inner_custom_box'], plugin_basename(__FILE__) ) )
              return $data;
    
          // verify if this is an auto save routine. 
          // If it is our form has not been submitted, so we dont want to do anything
          if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
              return $data;
          // OK, we're authenticated: we need to find and save the data
    
          if ($post->post_type == "team_member")
              $data['post_parent'] = $_POST['cpt_parent'];
    
         return $data;
    }
    

    Это не имеет ничего общего с register_post_type . Вы обманываете WordPress, заставляя думать, что это дочерняя страница другого типа записи (страницы).

    • 0

Оставить ответ

You must login to add an answer.