0

在我的菜单上,我想成为一个名为“随机”的链接,点击它会打开一篇随机文章,就像在 stumbleupon 上一样。我制作了模板thinkink,我可以从那里开始并实现这一目标。但我做不到。我在问你如何打开页面上存在的唯一链接,它是由模板随机生成的,它本身(在那个 php 代码的帮助下)。我想要的一种重定向(但速度很快)。我认为这可能在 2 步操作中起作用:第一,用户从我的菜单中单击 Random,然后 /randompage 打开,带有随机链接(我的文章链接之一)在上面。第二,我希望该链接直接打开(自动),不需要页面的其他加载。可以这样做吗?还是有别的东西?页面完全是空的。(由于 dns 更改,我的网站现在处于离线状态。它将在几个小时内启动并运行)。希望我能理解自己,我不知道该怎么解释。如果我不能更好地解释这一点,我真的很抱歉。

4

2 回答 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 回答