在我的菜单上,我希望成为一个名为“随机”的链接,点击它会打开一篇随机文章,就像在stumbleupon上一样。我做了模板thinkink我可以从那里去实现这一点。但我不能。我问你如何打开页面上存在的唯一链接,它本身就是由模板生成的(在php代码的帮助下)。我希望(但很快)的重定向。我认为这可能在2 stept动作中工作:1,用户从我的菜单中单击Random,然后/ randompage打开,随机链接(我的文章链接之一)在上面。 第二,我希望该链接打开direcly(自动),不需要页面的其他loadind。 可以这样做吗?或者还有别的东西吗? 该页面完全为空。 (由于DNS更改,我的网站现已脱机。它将在几小时内启动并运行)。 希望我让自己明白,我不知道怎么解释这个。如果我不能更好地解释这一点,我真的很感兴趣。
答案 0 :(得分:0)
也许,这种方法会更好:
我已经为导航菜单准备了一个Custom 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() ) );
比你输入你的管理外观 - &gt;菜单并将新的自定义链接添加到所需的菜单。 URL无关紧要。所以,选择你的博客ULR。称之为“随机发布”或“随机发布”,由您决定。比分配一个“随机”类(没有qoutes)。如果没有向您显示班级字段,请从右上角的“屏幕选项”启用它。保存。
瞧!
答案 1 :(得分: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' );
在从数据库中提取任何帖子数据之前,这段代码会将导致具有指定ID的页面的查询重定向到随机帖子 - 因此它与我的第一个解决方案同样快。我更喜欢上一个,因为您不必创建冗余页面,但这个页面很容易实现。