在我的菜单上,我想成为一个名为“随机”的链接,点击它会打开一篇随机文章,就像在 stumbleupon 上一样。我制作了模板thinkink,我可以从那里开始并实现这一目标。但我做不到。我在问你如何打开页面上存在的唯一链接,它是由模板随机生成的,它本身(在那个 php 代码的帮助下)。我想要的一种重定向(但速度很快)。我认为这可能在 2 步操作中起作用:第一,用户从我的菜单中单击 Random,然后 /randompage 打开,带有随机链接(我的文章链接之一)在上面。第二,我希望该链接直接打开(自动),不需要页面的其他加载。可以这样做吗?还是有别的东西?页面完全是空的。(由于 dns 更改,我的网站现在处于离线状态。它将在几个小时内启动并运行)。希望我能理解自己,我不知道该怎么解释。如果我不能更好地解释这一点,我真的很抱歉。
问问题
325 次
2 回答
0
好吧,闪闪发光。我还有另一个解决方案,可能更容易实施。
将此代码插入您的 functions.php 并将 $page_id 值修改为使用自定义模板的页面的 ID:
function binda_redirect_to_rand( $query ) {
$page_id = 234; //ID of your page with custom template
if ( $query->is_page() && $query->query_vars['page_id'] == $page_id && $query->is_main_query() ) {
$args = array( 'numberposts' => 1, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $p ){
$query->set( 'p', $p->ID );
$query->set( 'page_id', '' );
}
}
return $query;
}
add_action( 'pre_get_posts', 'binda_redirect_to_rand' );
在从 DB 获取任何帖子数据之前,这段代码会将指向具有指定 ID 的页面的查询重定向到随机帖子——因此它与我的第一个解决方案一样快。我更喜欢上一个,因为你不必创建多余的页面,但是这个很容易实现。
于 2013-01-27T09:09:30.947 回答
0
也许,这种方法会更好:
我已经为 Nav 菜单准备了一个自定义 Walker,它会生成随机链接到一个帖子的菜单项,该菜单项具有从管理菜单分配的“随机”类。
因此,要完成这项工作,您必须将此代码复制并粘贴到您的 functions.php
class Random_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_el(&$output, $item, $depth, $args) {
global $wp_query;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
if ( !empty( $classes ) && in_array( 'random', $classes ) ){
$args = array( 'numberposts' => 1, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $p ){
$item->url = get_permalink( $p->ID );
}
}
$classes[] = 'menu-item-' . $item->ID;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
$class_names = ' class="' . esc_attr( $class_names ) . '"';
$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
$id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
$output .= $indent . '<li' . $id . $value . $class_names .'>';
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}
然后,您必须在模板中找到 wp_nav_menu 的代码,并使用“new Random_Walker_Nav_Menu()”分配参数“walker”。像这个:
wp_nav_menu( array( 'theme_location' => 'primary', 'walker' => new Random_Walker_Nav_Menu() ) );
然后您将进入您的管理外观 -> 菜单,并将新的自定义链接添加到所需的菜单。URL 真的无所谓。所以,选择你的博客 ULR。称它为“随机帖子”或“随机”,这取决于你。比给它分配一个“随机”类(没有 qoutes)。如果类字段没有显示给您,请从右上角的“屏幕选项”中启用它。节省。
瞧!
于 2013-01-26T22:35:52.963 回答