Obtener una lista de entradas personalizadas por autor
Estoy tratando de crear una página donde un usuario pueda ver todos los tipos de entradas personalizadas después de hacer clic en un autor desde una página anterior, pero no tengo suerte con ninguna de las funciones PHP integradas en WordPress.
¿Existe alguna forma sencilla de hacer esta consulta? No he encontrado mucho en línea al respecto.

Algo como esto debería funcionar:
// Asumiendo que tienes $author_id definido
// y tu tipo de post se llama 'your_post_type'
$args = array(
'author' => $author_id,
'post_type' => 'your_post_type',
);
$author_posts = new WP_Query( $args );
if( $author_posts->have_posts() ) {
while( $author_posts->have_posts() ) {
$author_posts->the_post();
// título, contenido, etc
$author_posts->the_title();
$author_posts->the_content();
// deberías tener acceso a cualquiera de las etiquetas que normalmente
// puedes usar en The Loop
}
wp_reset_postdata();
}
Referencia
Usando un archivo de plantilla de Autor
Puedes hacer esto dentro de una plantilla de Autor:
author.php
-- este archivo debe ir en el directorio de tu tema
<?php get_header(); ?>
<div id="content" class="narrowcolumn">
<!-- Esto establece la variable $curauth -->
<?php
$curauth = (isset($_GET['author_name'])) ?
get_user_by('slug', $author_name) :
get_userdata(intval($author));
?>
<h2>Acerca de: <?php echo $curauth->nickname; ?></h2>
<dl>
<dt>Sitio web</dt>
<dd><a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a></dd>
<dt>Perfil</dt>
<dd><?php echo $curauth->user_description; ?></dd>
</dl>
<h2>Publicaciones de <?php echo $curauth->nickname; ?>:</h2>
<ul>
<!-- The Loop -->
<?php
// Asumiendo que tu tipo de post se llama 'your_post_type'
$args = array(
'author' => $curauth->ID,
'post_type' => 'your_post_type',
);
$author_posts = new WP_Query( $args );
if( $author_posts->have_posts() ) {
while( $author_posts->have_posts() ) {
$author_posts->the_post();
// título, contenido, etc
the_title();
the_content();
// deberías tener acceso a cualquiera de las etiquetas que normalmente
// puedes usar en The Loop
}
wp_reset_postdata();
}
?>
<!-- Fin del Loop -->
</ul>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Este código de la plantilla author.php
está descaradamente tomado de el Codex, y probablemente debería considerarse un punto de partida, no un producto final.

Sé que recibiré algunas críticas por esto... pero estoy intentando hacer esto con "Allow PHP in Post and Pages" y parece que está teniendo un problema con la declaración if. No logro entender por qué, pero simplemente deja de intentar hacer cualquier cosa tan pronto como llega a ese punto.

El código que publiqué está pensado para ser añadido a tu archivo functions.php
o a un plugin. No tengo experiencia usando el plugin Allow PHP in Posts and Pages(?).

¿Cómo lo agregaría al functions.php? No soy muy bueno con PHP. Supongo que tengo que ponerlo en una función, pero no estoy seguro de cómo hacer el add_action o cómo llamarlo desde una página.

Hola, respuesta tardía, pero estoy probando tu método para las publicaciones de un usuario en un CPT (eventos), pero desafortunadamente termino con un error 500 del servidor en la página de un usuario que realmente ha publicado algo - los usuarios sin publicaciones (es decir, consulta vacía) funcionan bien. ¿Puedes echar un vistazo? Mira un pegado de mi archivo de plantilla de autor (ignora lo de los campos personalizados :) ) aquí: http://pastebin.com/NLNSYC0c . ¡Gracias de antemano!

Actualización: Lo resolví, con mi limitado conocimiento de PHP. De hecho tienes que reemplazar $author_posts->the_title();
con el estándar get_the_title() etc., y funciona perfectamente (mira http://pastebin.com/1FHFGFQs). Gracias por guiarme en la dirección correcta (quizás podrías actualizar tu solución arriba).

He actualizado el código. Si get_the_title()
funciona, entonces the_title()
y the_content()
también deberían hacerlo. (Resulta que estoy haciendo algo bastante similar en un sitio que configuré hace algún tiempo).

La primera parte funciona genial. Simplemente usé get_the_author_meta('ID');
para establecer el $author_id
.

Olvidaste el paréntesis de cierre en la sentencia while:
while( $author_posts->have_posts()) {

Utiliza pre_get_posts
para añadir tu tipo de contenido personalizado a tu plantilla author.php
En tu functions.php, añade el siguiente código. Esto agregará tu tipo de contenido personalizado a la consulta principal para que aparezca en tu página de autor
function wpse107459_add_cpt_author( $query ) {
if ( !is_admin() && $query->is_author() && $query->is_main_query() ) {
$query->set( 'post_type', array('post', 'YOUR_CUSTOM_POST_TYPE' ) );
}
}
add_action( 'pre_get_posts', 'wpse107459_add_cpt_author' );
Con esto, no es necesario hacer ningún cambio en tus archivos de plantilla :-)

Hola @PieterGoosen Esto es casi perfecto para lo que necesito, pero me gustaría mostrar solo el CPT. En la línea $query->set podría simplemente eliminar 'post', pero esto causaría problemas en el blog principal. ¿Sabes cómo podría configurarlo para que el código solo se aplique a tipos de publicaciones personalizados? En pseudocódigo sería: if (post-type('nombre-cpt') { // ejecutar el código } pero no puedo encontrar una solución.
