Estoy trabajando en un sitio de wordpress con el nombre del tema. flojo . Tiene un tipo de publicación personalizada llamada work
. Quería mostrar los trabajos en mi plantilla según cada categoría.
Aquí está el código:
<?php
$args = array( 'post_type' => 'work', 'posts_per_page' => 15 );
$loop = new WP_Query( $args );
$count = 0;
echo '<ul>';
while ( $loop->have_posts() ) : $loop->the_post();
$count++;
$class = ($count % 3 == 1) ? 'first' : '';
echo '<li class="'.$class.'">';
echo '<a href="';
the_permalink();
echo '">';
echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
the_post_thumbnail('full');
echo '</a>';
echo '<br />';
echo '<h2><a href="';
the_permalink();
echo '">';
the_title();
echo '</a></h2>';
echo '<div class="entry-content">';
echo limit_words(get_the_excerpt(), '30');
echo '..</div>';
echo '</li>';
endwhile;
echo '</ul>';
?>
he añadido
$args = array( 'post_type' => 'work', 'tag_ID' => 15 ,'posts_per_page' => 15 );
dónde 15
es el id de mi categoría, pero no funcionó
también lo he intentado
<?php
$catquery = new WP_Query( 'cat=15&posts_per_page=3' );
while($catquery->have_posts()) : $catquery->the_post();
?>
<ul class="last-cat">
<li><a href="https://stackoverflow.com/questions/27896131/<?php the_permalink() ?>" rel="bookmark"><?php the_post_thumbnail(); ?> <p><?php the_title(); ?></p><span><?php echo get_the_date(); ?></span></a></li></ul>
<?php endwhile; ?>
que tampoco ayudó.
Editar:
La URL de la categoría es
El código de registro del tipo de publicación es:
add_action('init', 'work_register');
function work_register() {
$labels = array(
'name' => _x('Work', 'post type general name'),
'singular_name' => _x('Work Item', 'post type singular name'),
'add_new' => _x('Add New', 'work item'),
'add_new_item' => __('Add New Work Item'),
'edit_item' => __('Edit Work Item'),
'new_item' => __('New Work Item'),
'view_item' => __('View Work Item'),
'search_items' => __('Search Work'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
'rewrite' => array( 'slug' => 'work', 'with_front'=> false ), 'capability_type' => 'post',
'hierarchical' => true,
'menu_position' => null,
'supports' => array('title','editor','thumbnail')
);
register_post_type( 'work' , $args );
register_taxonomy("categories", array("work"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Category", "rewrite" => array( 'slug' => 'work', 'with_front'=> false )));
}
pieter goosen
Las otras dos respuestas son incorrectas, especialmente la del OP. query_posts
debería NUNCA JAMÁS ser utilizado, incluso se indica en el códice, así que por favor, lea el códice. Además, nunca debe reemplazar la consulta principal con consultas personalizadas.
La solución es simple como he descrito a continuación y es la forma correcta de hacerlo
RESPUESTA ORIGINAL
Tienes un par de defectos aquí.
-
Para que su tipo de publicación personalizada tenga un archivo, debe configurar el
has_archive
parámetro atrue
en sus argumentos de registro de tipo de publicación personalizada. Verregister_post_type()
-
Si no va a utilizar su tipo de publicación personalizada como páginas, configure el
hierarchical
parámetro afalse
. Establecer esto en verdadero ralentizará considerablemente su backend a medida que aumenten sus publicaciones, ya que WordPress intentará construir un árbol para cada publicación como lo hace para las páginas. -
Nunca utilice consultas personalizadas en lugar de la consulta principal. Siempre es más problemático y una pérdida de recursos. Ver esta publicación para obtener una explicación completa sobre dónde y cuándo usar consultas personalizadas correctamente.
-
Este punto es una extensión del anterior. Si necesita cambiar la consulta principal, use
pre_get_posts
para hacerlo Utiliza exactamente los mismos parámetros queWP_Query
como la consulta principal utilizaWP_Query
para buscar publicaciones. Todo esto se explica en la publicación vinculada arriba -
Su principal defecto en su consulta personalizada es su falta de comprensión de cuál es la diferencia entre categorías, etiquetas y taxonomías personalizadas. He escrito un post completo (que puedes leer aquí ) sobre esto y también lo ingresó en el códice. Está utilizando una taxonomía personalizada, por lo que los parámetros de categoría no funcionarán. Necesitas usar un
tax_query
para taxonomías personalizadas
Para resolver su problema, siga los siguientes pasos
-
Añade el
has_achive
parámetro a sus argumentos al registrar su tipo de publicación personalizada y configurarlo entrue
. Si lo desea, configure elhierarchical
parámetro afalse
también en su tipo de publicación personalizada. (No configure esto para su taxonomía personalizada, esto hará que su taxonomía se comporte como etiquetas normales) -
Después de esto, elimine sus reglas de reescritura visitando la página de enlace permanente en “Configuración” y haciendo clic en “Actualizar”
-
Visite su página de inicio solo para asegurarse de que sus nuevas reglas estén guardadas
-
Elimine su consulta personalizada y vuelva al bucle predeterminado. Su
archive-work.php
debería verse asíif( have_posts() ) { while( have_posts() ) { the_post(); // Your custom markup and template tags } }
-
Si necesita mostrar publicaciones de un término específico, cree un
taxonomy.php
,taxonomy-{$taxonomy}.php
otaxonomy-{$taxonomy}-{$term}.php
modelo. Comprobar el Jerarquía de plantillas para más información
EDITAR 1
Si solo necesita mostrar un término específico en su término de archivo de tipo de publicación personalizado, después de haber hecho lo anterior, use pre_get_posts
para modificar la consulta principal de la manera correcta
add_action( 'pre_get_posts', function ( $q ) {
if( !is_admin() && $q->is_main_query() && is_post_type_archive( 'work' ) ) {
$q->set( 'categories', 'slides' );
}
});
EDITAR 2
Aquí hay un código para resolver esto
Copie y pegue el siguiente código en lugar de su código donde registra su tipo de publicación. he añadido el has_archive
parámetro. También he cambiado la regla de reescritura para su taxonomía a categories
. Es realmente problemático tener el mismo slug tanto para el tipo de publicación personalizada como para la taxonomía. Esto no funciona de forma predeterminada y arroja todo completamente fuera del objetivo.
add_action( 'init', 'work_register' );
function work_register() {
$labels = array(
'name' => _x('Work', 'post type general name'),
'singular_name' => _x('Work Item', 'post type singular name'),
'add_new' => _x('Add New', 'work item'),
'add_new_item' => __('Add New Work Item'),
'edit_item' => __('Edit Work Item'),
'new_item' => __('New Work Item'),
'view_item' => __('View Work Item'),
'search_items' => __('Search Work'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
'rewrite' => array( 'slug' => 'work', 'with_front'=> false ),
'capability_type' => 'post',
'hierarchical' => true,
'has_archive' => true,
'menu_position' => null,
'supports' => array('title','editor','thumbnail')
);
register_post_type( 'work' , $args );
register_taxonomy( 'categories', array('work'), array(
'hierarchical' => true,
'label' => 'Categories',
'singular_label' => 'Category',
'rewrite' => array( 'slug' => 'categories', 'with_front'=> false )
)
);
register_taxonomy_for_object_type( 'categories', 'work' ); // Better be safe than sorry
}
En su archive-work.php, reemplace su consulta personalizada con este código
<?php
$count = 0;
echo '<ul>';
while ( have_posts() ) : the_post();
$count++;
$class = ($count % 3 == 1) ? 'first' : '';
echo '<li class="'.$class.'">';
echo '<a href="';
the_permalink();
echo '">';
echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
the_post_thumbnail('full');
echo '</a>';
echo '<br />';
echo '<h2><a href="';
the_permalink();
echo '">';
the_title();
echo '</a></h2>';
echo '<div class="entry-content">';
echo limit_words(get_the_excerpt(), '30');
echo '..</div>';
echo '</li>';
endwhile;
echo '</ul>';
?>
MUY IMPORTANTE -> OK, ahora visita Configuración >> Enlaces permanentes en el back-end (área de administración) y haga clic en Guardar cambios. Esto vaciará sus enlaces permanentes y establecerá su nueva estructura de enlaces permanentes
Ahora debería ver todas sus publicaciones de su tipo de publicación personalizada cuando visite
-
hola, estoy un poco ocupado con otro trabajo… volveré a esto pronto 🙂
– usuario4260940
14 de enero de 2015 a las 12:07
<?php
query_posts( array( 'post_type' => 'work', 'categories' => 'slides' ) );
//the loop start here
if ( have_posts() ) : while ( have_posts() ) : the_post();
?>
<h3><?php the_title(); ?></h3>
<?php the_content(); ?>
<?php endwhile; endif; wp_reset_query(); ?>
finalmente lo obtuve de aquí
Perfecto
-
query_posts
es una de las peores funciones para usar. Si puedo darte un consejo, nunca jamás usarquery_posts
. Rompe la consulta principal, vuelve a ejecutar consultas SQL, ralentiza la página (lo que es malo para el SEO), rompe y rellena la paginación, rompe el$wp_query
y$post
globales, así comoget_queried_object()
que es ampliamente utilizado por los complementos. Puede que resuelva tu problema ahora, pero obtendrás mucha basura más adelante.– Pieter Goosen
12 de enero de 2015 a las 10:10
-
Por cierto, esa respuesta vinculada es totalmente incorrecta, antigua e incorrecta, rechazada como tal.
– Pieter Goosen
12 de enero de 2015 a las 10:12
-
Soy un poco malo en la codificación. así que me gustaría obtener un código para resolver el problema… aún no soy un experto para escribir el mío
– usuario4260940
13 de enero de 2015 a las 5:00
-
Está bien, intentaré ayudarte. Ver mi respuesta en 5 min
– Pieter Goosen
13 de enero de 2015 a las 5:02
-
OK, revisa mi actualización. Primero haz lo que te he dicho en mi EDITAR 2. Haga que esto funcione, luego responda si necesita algo más
– Pieter Goosen
13 de enero de 2015 a las 5:31
usuario3040610
Prueba con el siguiente código,
<?php
$args = array( 'posts_per_page' => 5,'post_type' => 'work','category' => 15 );
$myposts = get_posts( $args );
foreach ( $myposts as $post ):?>
<li>
<a href="https://stackoverflow.com/questions/27896131/<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>
-
Error de análisis: error de sintaxis, ‘endforeach’ inesperado (T_ENDFOREACH) en /home/jvadmin/public_html/wp-content/themes/flozo/archive-work.php en la línea 17
– usuario4260940
12 de enero de 2015 a las 6:10
-
@Melvin ¿Están las publicaciones en la categoría con la identificación (15)?
– usuario3040610
12 de enero de 2015 a las 6:19
-
cambié ‘categoría’ => 15 a ‘tag_ID’ => 15 .. pero ahora se muestran todas las publicaciones electrónicas jointviews.com/portafolio se puede ver cerca del pie de página
– usuario4260940
12 de enero de 2015 a las 6:28
-
Entonces, ¿tienes las publicaciones personalizadas (trabajo) en la categoría?
– usuario3040610
12 de enero de 2015 a las 6:34
-
viene con el tema
– usuario4260940
12 de enero de 2015 a las 6:35
Estoy bastante seguro
tag_ID
necesita sertag_id
.– Alexander O’Mara
12 de enero de 2015 a las 6:03
jointviews.com/wp-admin/… este es el aspecto de la URL para mi categoría
– usuario4260940
12 de enero de 2015 a las 6:04
para leer los valores que ha pasado por url .. no para acceder a ella
– usuario4260940
12 de enero de 2015 a las 6:06
¿Cómo puedo mostrarlo entonces? es mostrar mis obras
– usuario4260940
12 de enero de 2015 a las 7:20