如何通过php tu自动打开自己生成链接?

时间:2013-01-26 12:43:07

标签: wordpress random hyperlink article

在我的菜单上,我希望成为一个名为“随机”的链接,点击它会打开一篇随机文章,就像在stumbleupon上一样。我做了模板thinkink我可以从那里去实现这一点。但我不能。我问你如何打开页面上存在的唯一链接,它本身就是由模板生成的(在php代码的帮助下)。我希望(但很快)的重定向。我认为这可能在2 stept动作中工作:1,用户从我的菜单中单击Random,然后/ randompage打开,随机链接(我的文章链接之一)在上面。 第二,我希望该链接打开direcly(自动),不需要页面的其他loadind。 可以这样做吗?或者还有别的东西吗? 该页面完全为空。 (由于DNS更改,我的网站现已脱机。它将在几小时内启动并运行)。 希望我让自己明白,我不知道怎么解释这个。如果我不能更好地解释这一点,我真的很感兴趣。

2 个答案:

答案 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的页面的查询重定向到随机帖子 - 因此它与我的第一个解决方案同样快。我更喜欢上一个,因为您不必创建冗余页面,但这个页面很容易实现。