Como faço para obter os atributos de um código curto de uma postagem?

Estou tentando visualizar uma galeria NextGen na minha página principal (e páginas de categoria) para mostrar uma única imagem da galeria na página principal ao lado do texto da postagem que normalmente aparece. Encontrei exemplos de PHP que obtêm as imagens de uma galeria com uma ID da galeria. No meu loop, eu tenho uma publicação atual. O que não consigo descobrir é como, com uma publicação, obter os atributos do código curto do [nggallery].

Em outras palavras, para cada publicação com uma galeria do NextGEN, eu preciso do valor de identificação do código curto. Por exemplo, se a publicação contiver [nggallery id=50] eu preciso do valor 50 .

Como posso obter essa informação de uma postagem?

Eu estava esperando encontrar a solução no código-fonte do próximo plug-in gen, mas, claro, esse código registrou um manipulador de código curto e permite que o WP os recorde. Não há exemplos em seu código fonte, onde eles analisam uma postagem procurando seu código curto.

Solutions Collecting From Web of "Como faço para obter os atributos de um código curto de uma postagem?"

Sua solução ajudou-me a encontrar uma resposta para o meu próprio problema de obter o atributo de um certo código curto, mas temo que possa haver um problema com sua abordagem.

Você está usando preg_match para verificar o post_content , que só retornará 1 partida. Se você tiver uma postagem que tenha vários códigos curtos nela, ela somente retornará a primeira, que pode não ser a que você está procurando.

Em vez disso, você deve usar preg_match_all , então faça um loop pela matriz regex_matches para verificar o regex_matches curto que você precisa.

Além disso, você não precisa usar str_replace para remover as cotações da string. O WordPress possui uma function incorporada shortcode_parse_atts que leva uma série de parâmetros (no seu caso seria $regex_matches[3] ) como um argumento e exibe uma matriz. Isso também poupará o uso da function wp_parse_args .

Eu encontrei uma solução. Depois de um monte de busca, encontrei algum código que determina se uma publicação possui um código curto específico nele.

Esse código também tem alguma tentativa de analisar os parâmetros para o código curto. O que é bom porque eu quero o ID da galeria. Houve alguns problemas com o código postado, então eu ajustei-o. Aqui está o código que pode encontrar um código curto em uma publicação e obter seus parâmetros:

  < ?php // Look for a NextGEN gallery $galleryID; $previewIndex = 1; $regex_pattern = get_shortcode_regex(); preg_match ('/'.$regex_pattern.'/s', $post->post_content, $regex_matches); if ($regex_matches[2] == 'nggallery') : // Found a NextGEN gallery find out what ID // Turn the attributes into a URL parm string $attribureStr = str_replace (" ", "&", trim ($regex_matches[3])); $attribureStr = str_replace ('"', '', $attribureStr); // Parse the attributes $defaults = array ( 'preview' => '1', ); $attributes = wp_parse_args ($attribureStr, $defaults); if (isset ($attributes["id"])) : $galleryID = $attributes["id"]; endif; if (isset($attributes["preview"])) : $previewIndex = $attributes["preview"]; endif; endif; ?> 

O que precisava ser ajustado era o tratamento dos parâmetros. Usando trim em vez de uma carta secreta e alternando para wp_parse_args para lidar corretamente com os parâmetros de código curto. Uma vez que o código acima termine de ser executado em um loop WP $galleryID irá armazenar o NextGEN gallery ID e previewIndex será definido como o índice de visualização ou 1 se nenhum atributo previewIndex presente.

previewIndex é um atributo que eu “adicionei” para indicar qual miniatura a ser usada para a visualização da galeria. NextGEN ignora e as galerias são processadas como normais, mas agora posso usá-lo para o meu Tema para exibir um ícone específico na input de visualização.

Aqui está o código do meu loop-index.php e loop-category.php que lida com a criação da visualização da galeria:

  < ?php /* Enhance the content preview with an image from the NextGEN gallery */ ?> < ?php global $nggdb; $gallery = $nggdb->get_gallery ($galleryID, 'sortorder', 'ASC', true, 0, 0); $image = $gallery[$previewIndex]; $total_images = count ($gallery); ?> < ?php if (isset($image) && isset($image->thumbURL)) : ?> < ?php /* Show the thumbnail */ ?>    < ?php endif; ?> < ?php /* Show the text excerpt */ ?> < ?php the_excerpt(); ?> < ?php /* Show the statement of number of images contained */ ?> < ?php printf( _n( 'This gallery contains %2$s photo.', 'This gallery contains %2$s photos.', $total_images, 'twentyten' ), 'href="' . get_permalink() . '" title="' . sprintf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ) . '" rel="bookmark"', number_format_i18n( $total_images )); ?>  < ?php endif; ?> 

Isso faz uso de informações de outra resposta sobre acessar os objects da galeria NextGEN para obter a miniatura e a contagem de imagens na galeria.