Suporte » Desenvolvendo com WordPress » Lista de páginas personalizada

  • Resolvido tekobr

    (@tekobr)


    Estou precisando da ajuda de vocês para simplificar um código. No template que estou usando tem um código no seu functions.php que pega a lista de páginas e formata de forma diferente do que o wp_list_pages nativo. Modifiquei para a formatação que eu queria e ficou assim:

    # Displays a list of pages
    function dp_list_pages() {
    	global $wpdb;
    	$querystr = "SELECT $wpdb->posts.ID, $wpdb->posts.post_title, $wpdb->posts.menu_order FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' AND $wpdb->posts.ID != '2' AND $wpdb->posts.ID != '15' ORDER BY $wpdb->posts.menu_order ASC";
    	$pageposts = $wpdb->get_results($querystr, OBJECT);
    	if ($pageposts) {
    		foreach ($pageposts as $post) {
    			?><?php if (is_page($post->ID)) echo ' class="here"'; ?><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a> | <?php
    		}
    	}
    }

    O problema que estou tendo é que quero excluir algumas páginas dessa lista, e como podem ver no código acima eu tive que colocar um $wpdb->posts.ID != ‘2’ AND $wpdb->posts.ID != ’15’, ou seja, tive que colocar uma por uma. Teria como fazer isso de forma melhor? E melhor ainda, colocando como argumento para quando chamar a função eu passo apenas o ID das páginas?

    Obrigado, não sei quase nada de PHP mas vou modificando e testando e chego nos resultados, mas coisas acima do simples complica para mim.

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Olá tekobr,

    Tenta assim:

    # Displays a list of pages
    function dp_list_pages($args="") {
    	global $wpdb;
    
    	$ids_exclude = $args;
    
    	$querystr = "SELECT $wpdb->posts.ID, $wpdb->posts.post_title, $wpdb->posts.menu_order FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' AND $wpdb->posts.ID NOT IN ($ids_exclude)  ORDER BY $wpdb->posts.menu_order ASC";
    	$pageposts = $wpdb->get_results($querystr, OBJECT);
    	if ($pageposts) {
    		foreach ($pageposts as $post) {
    			?><?php if (is_page($post->ID)) echo ' class="here"'; ?><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a> | <?php
    		}
    	}
    }

    Sendo a chamada da função assim:

    dp_list_pages("1,2,3");

    Qualquer coisa, pode falar.

    Criador do tópico tekobr

    (@tekobr)

    Perfeito, funcionou direitinho. Muito obrigado!

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • O tópico ‘Lista de páginas personalizada’ está fechado para novas respostas.