我一直在努力解决这个问题2天了。我已阅读了数十篇帖子,但无法解决问题。
注意:所有var名称都是西班牙语,因为这是一个西班牙语网站。
我创建了一个名为“promocion”的自定义类型,但在我尝试转到第2页时列出档案时出现404错误。
我想设置的结构如下:
WordPress版本:3.1
插件:
这是在functions.php中创建的自定义类型
register_post_type('promocion', array(
'label' => 'Promociones',
'description' => 'Promociones',
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'promocion'),
'query_var' => true,
'has_archive' => 'promociones',
'menu_position' => 4,
'supports' => array('title','editor',),'labels' => array (
'name' => 'promociones',
'singular_name' => 'promocion',
'menu_name' => 'Promociones',
'add_new' => 'Añadir nueva',
'add_new_item' => 'Añadir nueva',
'edit' => 'Editar',
'edit_item' => 'Editar Promoción',
'new_item' => 'Nueva Promoción',
'view' => 'Ver Promoción',
'view_item' => 'Ver Promoción',
'search_items' => 'Buscar Promociones',
'not_found' => 'No se encontraron promociones',
'not_found_in_trash' => 'No se encontraron promociones en la papelera',
'parent' => 'Parent Promoción',),) );
function my_connection_types() {
if ( !function_exists( 'p2p_register_connection_type' ) )
return;
p2p_register_connection_type( array(
'from' => 'promocion',
'to' => 'post',
'reciprocal' => true
) );
}
add_action( 'init', 'my_connection_types', 100 );
这是我的存档页面(archive-promocion.php)的开头,我在那里进行自定义SQL查询并设置分页:
if ( $cat != '' ) {
$cat_filter = 'wp_term_taxonomy.term_id = "' . $cat . '" AND';
} else {
$cat_filter = '';
}
$querystr = '
SELECT DISTINCT
promociones.ID,
promociones.post_title
FROM
wp_terms
Inner Join wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id
Inner Join wp_term_relationships AS wpr ON wpr.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
Inner Join wp_posts AS comercios ON comercios.ID = wpr.object_id
Inner Join wp_p2p ON wp_p2p.p2p_to = comercios.ID
Inner Join wp_posts AS promociones ON promociones.ID = wp_p2p.p2p_from
WHERE
wp_term_taxonomy.taxonomy = "category" AND
comercios.post_type = "post" AND
' . $cat_filter . '
promociones.post_type = "promocion"
ORDER BY
promociones.menu_order ASC
';
$totalposts = $wpdb->get_results($querystr, OBJECT);
$ppp = 2;
$wp_query->found_posts = count($totalposts);
$wp_query->max_num_pages = ceil($wp_query->found_posts / $ppp);
$on_page = intval(get_query_var('paged'));
if($on_page == 0){ $on_page = 1; }
$offset = ($on_page-1) * $ppp;
$wp_query->request = $querystr . " LIMIT $ppp OFFSET $offset";
$pageposts = $wpdb->get_results($wp_query->request, OBJECT);
.htaccess文件
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sitiodeloschicos/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sitiodeloschicos/index.php [L]
</IfModule>
请帮助我,我在这里疯了,我已经迟到了这个项目。谢谢!
答案 0 :(得分:2)
好吧,1周后,是的,1周拉我的头发,阅读互联网上的每个论坛,并问每个人,我找到了解决方案,这是相当愚蠢的。
上面发布的所有代码都很完美,没有任何问题。
代码搞乱的是我在管理面板中设置了每页显示10个帖子。在我的代码中,我将其更改为每页仅显示1个用于测试目的,但不知何故wordpress仍在使用管理面板中配置的10值。
所以我做的是在管理面板中将值更改为1,然后在代码中增加了我的值。这是一个讨厌的解决方案,但它确实有效。
有没有办法按代码设置每页帖子的全局值?
答案 1 :(得分:0)
我的猜测是,这是因为您使用自定义SQL来获取自定义帖子类型。通过使用WP_Query类,您可以以更标准的WP方式执行查询。我会用它来获取我的自定义帖子:
$query = new WP_Query();
$query->query('post_type=promociones');
if($query->have_posts()){
while($query->have_posts()){
// Do your loop stuff
}
}
如果您这样执行查询,您将能够使用内置的WP函数来获取下一个(http://codex.wordpress.org/Function_Reference/next_post_link)和之前的帖子(http:// codex .wordpress.org / Template_Tags / previous_post_link)。另外,你可以利用这个很棒的分页插件(http://wordpress.org/extend/plugins/wp-paginate/)。
请务必查看您可以对WP_Query类执行的所有操作:http://codex.wordpress.org/Function_Reference/WP_Query。
答案 2 :(得分:0)
如果您使用非常永久链接收到404错误,那是因为您尚未创建自定义帖子类型存档模板文件。自定义帖子类型不会为它们提取默认模板文件。因此,您必须创建archive-post_type_name.php,single-post_type_name.php等,以避免使用404.
如果您想要与自定义帖子类型相关联的类别,则需要register_taxonomy并添加仅适用于您的自定义帖子类型的类别。 (http://codex.wordpress.org/Function_Reference/register_taxonomy和http://justintadlock.com/archives/2010/06/10/a-refresher-on-custom-taxonomies)
然后你可以使用普通的WP_Query。
在任何情况下,当您使用query_posts时,您将删除分页的所有功能。你必须加入它。即:
$cat = get_query_var('cat');
// this "activates" the pagination
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts(array('posts_per_page' => '9', 'cat' => $cat, 'paged' => $paged)));