Suporte » Plugins » Cadastro x Perfil x Tabela Classificação

  • Resolvido Paulo Faustini

    (@faustinijr)


    Bom dia pessoal,

    Tenho um site de esportes locais, onde gostaria de exibir uma tabela de classificação de lutadores de acordo com o perfil cadastrado. Para isso, pensei em 3 passos:

    1. Cadastro dos Atletas;
    2. Exibição do Perfil;
    3. Exibição do Ranking.

    Para isso, criei uma nova função que se chama “Atleta”, no functions.php. Instalei os plugins ‘Cimy User Extra Fields’ e ‘New User Approve’ para editar o formulário de cadastro e tornar o cadastro pendente para que eu possa aprovar de acordo com os dados. Ok, cadastro está funcionando.

    Para o perfil do atleta, gostaria que os dados incluídos no momento do cadastro, fossem os mesmos que aparecessem no perfil. E para o ranking, dentro de cada perfil, gostaria de adicionar informações de acordo com as súmulas dos eventos e através dessas informações, apresentar os dados no ranking e também no perfil.

    Para tal, criei um plugin para adicionar a aba Atleta no menu, mas agora vem a parte que não consegui fazer. Ao invés de aparecer o conteúdo do post, gostaria de poder selecionar o atleta cadastrado, e a partir dessa seleção, “resgatar” todas as informações deste, utilizando inclusive a foto cadastrada, como a imagem destaque do post “Atleta”.

    Segue os códigos do plugin criado:

    atletas.php

    <?php
    
    if ( ! defined( 'GP_atleta_BASE_FILE' ) )
        define( 'GP_atleta_BASE_FILE', __FILE__ );
    if ( ! defined( 'GP_atleta_BASE_DIR' ) )
        define( 'GP_atleta_BASE_DIR', dirname( GP_atleta_BASE_FILE ) );
    if ( ! defined( 'GP_atleta_PLUGIN_URL' ) )
        define( 'GP_atleta_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
    include('atleta-post-type.php');
    include('shortcode-atleta.php');

    atleta-post-type.php

    <?php
    
    // Register custom post type "Seção da Página"
    add_action('init', 'atleta');
    function atleta()  {
    	$atleta_slug = function_exists('ot_get_option')?ot_get_option('atleta_slug','atleta'):'atleta';
      $labels = array(
        'name' => __('Atleta', 'CriandoWebsite'),
        'singular_name' => __('Atleta', 'CriandoWebsite'),
        'add_new' => __('Adicionar Atleta', 'CriandoWebsite'),
        'add_new_item' => __('Novo Atleta', 'CriandoWebsite'),
        'edit_item' => __('Editar Atleta', 'CriandoWebsite'),
        'new_item' => __('Novo Atleta', 'CriandoWebsite'),
        'view_item' => __('Ver Atleta', 'CriandoWebsite'),
        'search_items' => __('Buscar Atleta', 'CriandoWebsite'),
        'not_found' =>  __('Nenhum atleta encontrado', 'CriandoWebsite'),
        'not_found_in_trash' => __('Nenhum atleta encontrado na lixeira', 'CriandoWebsite'),
        'parent_item_colon' => ''
      );  
    
      $args = array(
        'labels' => $labels,
        'menu_position' => 8,
        'supports' => array('title','editor','thumbnail',),
    	'public' => false,
    	'show_ui' => true,
    	/*'menu_icon' =>  get_stylesheet_directory_uri(). '/images/atleta.png',*/
    	'publicly_queryable' => true,
    	'has_archive' => true,
    	'hierarchical' => false,
    	'rewrite' => array('slug' => $atleta_slug),
      );
      register_post_type('atleta',$args);
    } 
    
    // Add meta data
    add_action( 'admin_init', 'atleta_meta_boxes' );
    function atleta_meta_boxes() {
    	/**
    	 * Supported TYPE:
    	 * background
    	 * ...
    	 * ...
    	 * ...
    	 */
      $my_meta_box = array(
        'id'        => 'my_meta_box',
        'title'     => 'Academia/Equipe',
        'desc'      => '',
        'pages'     => array( 'atleta' ),
        'context'   => 'normal',
        'priority'  => 'high',
        'fields'    => array(
          array(
            'id'          => 'academia',
            'label'       => 'Academia/Equipe',
            'desc'        => '',
            'std'         => '',
            'type'        => 'text',
            'class'       => '',
            'choices'     => array()
          ),
        )
      );
    	if (function_exists('ot_register_meta_box')) {
    	  ot_register_meta_box( $my_meta_box );
    	}
    }
    
    add_filter('manage_posts_colunas', 'mb_posts_colunas_id', 1);
    add_action('manage_posts_custom_coluna', 'posts_custom_id_colunas', 1, 2);
    function mb_posts_colunas_id($defaults){
        $defaults['wps_post_id'] = __('ID');
        return $defaults;
    }
    function posts_custom_id_colunas($column_name, $id){
            if($column_name === 'wps_post_id'){
                    echo $id;
        }
    }
    
    add_action( 'admin_init', 'atleta_meta_boxes1' );
    function atleta_meta_boxes1() {
    	/**
    	 * Supported TYPE:
    	 * background
    	 * ...
    	 * ...
    	 * ...
    	 */
      $my_meta_box2 = array(
        'id'        => 'my_meta_box2',
        'title'     => 'Cartel',
        'desc'      => '',
        'pages'     => array( 'atleta' ),
        'context'   => 'normal',
        'priority'  => 'high',
        'fields'    => array(
          array(
            'id'          => 'vitorias',
            'label'       => 'Vitórias',
            'desc'        => '',
            'std'         => '',
            'type'        => 'text',
            'class'       => '',
            'choices'     => array()
          ),
          array(
            'id'          => 'empates',
            'label'       => 'Empates',
            'desc'        => '',
            'std'         => '',
            'type'        => 'text',
            'class'       => '',
            'choices'     => array()
          ),
          array(
            'id'          => 'derrotas',
            'label'       => 'Derrotas',
            'desc'        => '',
            'std'         => '',
            'type'        => 'text',
            'class'       => '',
            'choices'     => array()
          ),
          array(
            'id'          => 'knockout',
            'label'       => 'Knock-Out',
            'desc'        => '',
            'std'         => '',
            'type'        => 'text',
            'class'       => '',
            'choices'     => array()
          ),
        )
    
      );  
    
    	if (function_exists('ot_register_meta_box')) {
      		ot_register_meta_box( $my_meta_box2 );
    	}
    }

    shortcode-atleta.php

    <?php
    function parse_atleta_func($atts, $content){
    	$id = isset($atts['id']) ? $atts['id'] : '';
    	$bg_color = isset($atts['bg_color']) ? $atts['bg_color'] : '';
    	$animation_class = isset($atts['animation'])?'wpb_'.$atts['animation'].' wpb_animate_when_almost_visible':'';
    	wp_reset_postdata();
    
    	$args = array(
    		'post_type' => 'atleta',
    		'p' => $id,
    		'post_status' => 'publish',
    	);
    
    	$html = '
    		<div class="row-fluid">
    	';
    	$the_query = new WP_Query( $args );
    	if($the_query->have_posts()){
    		while($the_query->have_posts()){ $the_query->the_post();
    			$meta_data = get_post_custom();
    			$cont = get_the_content();
    			$cont = apply_filters('the_content', $cont);
    			$image_src = wp_get_attachment_image_src( get_post_thumbnail_id(),'thumbname' );
    			$arr_cartel = array(
    				'vitorias' => isset($meta_data['vitorias'][0]) ? $meta_data['vitorias'][0] : '',
    				'empates' => isset($meta_data['empates'][0]) ? $meta_data['empates'][0] : '',
    				'derrotas' => isset($meta_data['derrotas'][0]) ? $meta_data['derrotas'][0] : '',
    				'knockout' => isset($meta_data['knockout'][0]) ? $meta_data['knockout'][0] : '',
    			);
    			$html .= '
    				<div class="span12 '.$animation_class.'">
    					<div class="atleta" style="background:'.$bg_color.'">
    						<img src="'.$image_src[0].'" style="");/>
    						<div class="atleta-info">
    								<span class="atleta-name">'.get_the_title().'</span>
    								<p>'.$meta_data['position'][0].'</p>
    								<div class="dotted"></div>
    								'.$cont.'
    								<div class="dotted"></div>
    								<div class="atleta-cartel">
    									'.show_cartel_icon_mb($arr_cartel).'
    								</div>
    						</div>
    					</div>
    				</div>
    			';
    		}
    	}
    	$html .= '
    		</div>
    	';
    
    	wp_reset_postdata();
    	return $html;
    
    }
    
    add_shortcode( 'atleta', 'parse_atleta_func' );
    if(!function_exists('show_cartel_icon_mb')){
    	function show_cartel_icon_mb($arr_cartel = array()){
    		$html = '';
    		if(count($arr_cartel) > 0){
    			foreach($arr_cartel as $key => $value){
    				if(isset($value) && $value != '')
    					$html .= '<a href="'.$value.'" class="icon-cartel icon-'.str_replace('_', '-', $key).'"><!-- --></a>';
    			}
    		}
    		return $html;
    	}
    }

    Sei que é dentro do atleta post type onde eu deveria substituir a parte onde estaria a conteúdo, pelo campo de seleção do usuário desejado, e assim demonstrar as informações do cadastro. Abaixo dessas informações de cadastro, eu quero ainda poder editar depois, a academia do lutador e o cartel dele (vitória, empate, derrota, etc), de acordo com os eventos.

    A terceira parte, é a exibição do ranking. Seria uma página que fizesse o resgate de todos os posts do tipo atleta, e organizasse de acordo com o cartel.

    Mas primeiro, como eu deveria fazer o link entre o arquivo “atleta-post-type.php” e o cadastro de usuário?

    Links:
    – Página de Registro de novo usuário: http://zonadoesporte.com/portal/wp-login.php?action=register

    – Página para exibir o perfil dos atletas: http://zonadoesporte.com/portal/atleta/

    Outra dúvida, os dados inseridos dentro do tipo de post atleta, como academia e cartel, não estão sendo exibidos, alguém me informar o que eu esqueci de acrescentar nos códigos?

Visualizando 3 respostas - 1 até 3 (de um total de 3)
Visualizando 3 respostas - 1 até 3 (de um total de 3)
  • O tópico ‘Cadastro x Perfil x Tabela Classificação’ está fechado para novas respostas.