Como descubro a lesma de tipo de postagem personalizada quando estou em uma página de arquivo?
Por exemplo, se /products/
dispara o archive-products.php
modelo, como (pragmaticamente) obtenho a lesma do tipo de postagem?
obrigado
custom-post-types
archives
custom-post-type-archives
Ben Everard
fonte
fonte
get_queried_object()
obteria a mesma informação em menos movimentos.$posttype = get_query_var('post_type');
... Adicionei uma alternativa abrangente.Estou usando isso fora do loop no modelo archive.php para obter em qual post archive personalizado estou.
É uma combinação dos métodos recomendados pelo @toscho e pelo @Rarst:
Atualização: @majick apontou que isso só funciona se você tiver definido a lesma de reescrita para o seu CPT. A opção Reescrever slug é opcional ao registrar um CPT e o padrão é post_type, se não estiver definido.
fonte
Notice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4
As respostas ficam confusas. E talvez eu também esteja, mas a pergunta principal é:
Se você quer dizer a página de destino do arquivo de tipo de postagem e, quando
is_post_type_archive()
retornartrue
, deseja a lesma à qual está respondendo arquivo de visualização atual :- FIM DE RESPONDER À PERGUNTA -
Explicação:
Você não pode confiar na lesma registrada . Wordpress também não é. Por exemplo, ao ligar para o
get_post_type_archive_link()
Wordpress, verifique as regras de reescrita atuais para o seu instalação .Onde você estiver, loop interno ou externo, arquivo atual ou postagem única, inverta o
get_post_type_archive_link()
mecanismo. (Ligações permanentes ativadas.)Considerações:
Conforme mencionado aqui, o (s) tipo (s) de postagem na consulta atual pode ser um
array
. Você pode ir mais longe com suas intensões filtrando o tipo de postagem que procura, por exemplo:ou
Outro ponto de vista:
Exemplo de Woocommerce, é registrado com o objeto de tipo de publicação 'produtos', mas, na realidade, usa o nome da regra reescrita (loja):
fonte
Deve-se observar que, se
has_archive
definido como true durante o registro do Tipo de postagem personalizado, o arquivo do tipo de postagem/cptslug/
será reescrito internamente?post_type=cptslug
. Então isso também significariais_post_type_archive()
que retornará verdadeiro.Infelizmente, onde a lesma de reescrita registrada é diferente do tipo de postagem, você não está realmente obtendo a
post_type
. por exemplo. se o seu tipo de postagem foimyplugin_cars
e sua lesma de reescrita foicars
e você precisa obtê-lomyplugin_cars
, mesmo isso (para evitar erros se o objeto consultado atual não for um tipo de postagem personalizado) ainda falhará:Mas porque
is_post_type_archive
é verdade, isso é mais confiável:Mas espere, há mais ... Acontece que, com um pouco de teste, também não é tão simples assim ... e se você estiver em uma página de arquivo de taxonomia com vários tipos de postagem na taxonomia ..? Ou atribuir tags de postagem a um tipo de postagem personalizado que não seja a postagem? Ou estão em uma página de arquivo do autor? Página de arquivo de data? ... ou mesmo tem um complexo
tax_query
oumeta_query
paraWP_Query
?A única resposta confiável (sem teste para todos os casos possíveis de arquivamento) é repetir as postagens reais na consulta ... Aqui está a função completa que criei para trabalhar em páginas singulares e de arquivamento, e permitindo que você passe opcionalmente um objeto de consulta personalizado (ou objeto de postagem / ID da postagem para postagens singulares):
Isso retornará de forma confiável (eu disse isso?) Uma matriz de tipos de postagem, se houver mais de um, ou uma string com o único tipo de postagem, se houver apenas um tipo. Tudo que você precisa fazer é:
Exemplo de uso (apenas por diversão):
Para ver o efeito, altere o tipo de postagem personalizado no código para
post
e adicione umthumbtype-post
atributo de classe às suas imagens em miniatura da postagem ...fonte
Você pode usar este código:
use $ posttype_slug var o que você precisar
fonte
$queried_object->query_var['post_type'];
que isso funcione ... #?post_type=post
eu fico vazio. compare comget_query_var('post_type');
Você pode usar esse código e esse código está funcionando para mim,
fonte
fonte