Agregue categorías al tipo de publicación personalizada y visualice según las categorías

10 minutos de lectura

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

http://jointviews.com/wp-admin/edit-tags.php?action=edit&taxonomy=categories&tag_ID=15&post_type=work

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 )));



}

  • Estoy bastante seguro tag_ID necesita ser tag_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

avatar de usuario
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 a true en sus argumentos de registro de tipo de publicación personalizada. Ver register_post_type()

  • Si no va a utilizar su tipo de publicación personalizada como páginas, configure el hierarchical parámetro a false. 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 que WP_Query como la consulta principal utiliza WP_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 en true. Si lo desea, configure el hierarchical parámetro a false 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 o taxonomy-{$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

http://ejemplo.com/trabajo/

  • 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 usar query_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í como get_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

avatar de usuario
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

¿Ha sido útil esta solución?