Obter página por modelo?

4

Estou em uma situação complicada. Vou tentar explicar o mais fácil possível.

Imagine as seguintes páginas:

  • Página 1
  • Página 2
    • subpágina 1
    • Subpágina 2
    • subpágina 3

Cada subpágina da página 2 lista as postagens de um tipo de postagem personalizada com uma taxonomia específica. Vamos chamar o tipo de post Objetos e a taxonomia apenas Categorias, para simplificar.

Para listar as diferentes postagens das diferentes Categorias, tenho três modelos de página diferentes para as subpáginas: subpage-1-templ.php , subpage-2-templ.php e subpage-3-templ.php . Cada um desses modelos lista as postagens de uma categoria específica para o tipo de postagem (Objetos). É codificado.

Até agora tudo bem, funciona como esperado. É um pouco feio ter que codificar, mas eu não sei de nenhuma outra maneira, então isso vai ter que funcionar por agora. (Eu prefiro abandonar o wordpress, mas isso é outra história)

Todas essas subpáginas listam os irmãos em um submenu. Então, se você estiver na subpágina 2, ela mostrará as subpáginas 1, 2 e 3 (mas a subpágina 2 tem uma classe atual). Funciona bem.

Agora, para o problema real; quando você clica em uma das postagens listadas em uma subpágina, você acessa uma página que exibe mais informações para a postagem, conforme o esperado. O problema é que eu quero mostrar o submenu para a página 2 lá (assim, subpage1, 2 e 3). Eu não sei como fazer isso sem codificá-lo.

Talvez, e eu não sei se isso funcionará, mas talvez eu possa encontrar uma página por seu modelo. Eu posso criar um modelo para a página 2 (não para seus filhos, a página pai atual) chamado objects-template.php e, em seguida, em um post, posso pegar a página que usa o modelo, depois pegar todos os filhos e simplesmente listar eles acima. Eu simplesmente não sei como obter uma página pelo template, se é que isso é possível (preferencialmente pelo nome do arquivo de template, mas o nome do template também funciona).

Alguma sugestão?

Editar

    // Query looks fine right?
    $query = new WP_Query(array(
        'meta_key' => '_wp_page_template',
        'meta_value' => 'objects-parent-page-template.php'
    ));
    // Dump the id (also tried just getting the object with get_queried_object(), still get null)
    echo '<pre>'; var_dump($query->get_queried_object_id()); die();
    
por qwerty 29.10.2012 / 12:49

1 resposta

5

O nome do arquivo do modelo de página é armazenado como um post meta com a chave '_wp_page_template', portanto, basicamente, você pode usar get_post_meta($post_id, '_wp_page_template', true); para obter o nome do arquivo de modelo para a página com ID $post_id .

Você também pode fazer o contrário (ou seja, obter o id do nome de arquivo do modelo de página) usando Parâmetros de campo personalizados em WP_Query ou outras funções do wordpress.

Também há uma função condicional is_page_template que verifica se o modelo da página atual é o especificado no parâmetro

Isso provavelmente resolverá seu problema & talvez ajude a se livrar das coisas codificadas.

    
por Mridul Aggarwal 29.10.2012 / 13:04