php – 使用mqtranslate plus在wordpress上翻译菜单上的自定义链接

前端之家收集整理的这篇文章主要介绍了php – 使用mqtranslate plus在wordpress上翻译菜单上的自定义链接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这个问题 How can I translate my navigation menu’s LINKS with qtranslate on wordpress?之后,我尝试用我的导航菜单翻译其他语言.

我做了一切写在第一个答案:

>在function.PHP中包含该函数
>添加’walker’=> header.PHP文件上的新CustomLinkModifierWalker().
>将导航菜单名称更改为<! - - :en- - > HOME<! - - : - ><! - - :gr- - >ΑΡΧΙΚΗ<! - - : - - ;和url到/ en | en | / | gr |
但是,翻译不起作用.该菜单显示导航中的字符串,如HOMEΑΡΧΙΚΗ,链接为/ en | en | / | gr |.

我究竟做错了什么?还是有另一种方式来翻译菜单

wordpress 4.0.1下

UPDATE

名称更改为[:en] HOME [:el]ΑΡΧΙΚΗ没有上述代码使翻译工作,但我仍然无法使URL工作.

更新2

和导航菜单代码

希腊语:

<ul class="menu" id="nav-menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-1091"><a href="/">ΑΡΧΙΚΗ</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-1092"><a href="/#our-company">ΣΧΕΤΙΚΑ</a></li>
</ul>

英文:

<ul class="menu" id="nav-menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-1091"><a href="/">HOME</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-1092"><a href="/#our-company">ABOUT</a></li>
</ul>

更新3

我尝试添加包含标签的完整路径的URL,如下所示:

[:EN] http://www.mydomain.gr/en [:EL] http://www.mydomain.gr

但是点击“保存按钮”后,url输入为空.它不保存url路径.
更新4

添加代码在functions.PHP和header.PHP的行.现在我有一个可选的URL在管理页面上.所以,我删除了URL并添加了可选如下:

< – :烯 – > / EN< – : – >< – :EL – > /< – : – >

然后我在header.PHP添加代码

<?PHP $defaults = array(
      'theme_location'  => 'other','container'       => '','echo'            => true,'fallback_cb'     => 'wp_page_menu','before'          => '','after'           => '','link_before'     => '','link_after'      => '','items_wrap'      => '<ul id="nav-menu" class="%2$s">%3$s</ul>','depth'           => 0,'walker'          => ''
    );
    wp_nav_menu( $defaults );
    wp_nav_menu( array( 'theme_location' => 'primary','menu_class' => 'nav-menu','walker' => new qTranslate_Menu_Walker() ) );
    ?>
  </div>

问题是,这种格式的链接:/ en /#about的作品,但这种格式的链接/ en / blog不起作用,并重定向到默认语言.

试图找出是否在过程中调用过滤器,同时保存菜单上的URL字段,并且似乎wordpress自动执行此操作,而不需要对其进行过滤.

所以记住这一点,我来了一个解决方案,使用一个额外的字段称为可选URL,如果此字段填充的东西(未过滤的内容)比wordpress将使用而不是URL字段,因为它通常.

所以在你的functions.PHP在最底层请放置这个代码,或者你可以把它放在另一个脚本,并将其包括函数上:

//Return the custom Meta
    function um_add_optional_url( $menu_item ) {
        $menu_item->optional_url = get_post_meta( $menu_item->ID,'_menu_item_optional_url',true );
        return $menu_item;
    }
    add_filter( 'wp_setup_nav_menu_item','um_add_optional_url' );

    //Update and save the optional url
    function um_update_optional_url( $menu_id,$menu_item_db_id,$args ) {
        if ( is_array( $_REQUEST['menu-item-optional-url']) ) {
            $subtitle_value = $_REQUEST['menu-item-optional-url'][$menu_item_db_id];
            update_post_Meta( $menu_item_db_id,$subtitle_value );
        }
    }
    add_action( 'wp_update_nav_menu_item','um_update_optional_url',10,3 );
    //Custom Menu Walker to get the stored values
    class qTranslate_Menu_Walker extends Walker {
        /**
         * What the class handles.
         *
         * @see Walker::$tree_type
         * @since 3.0.0
         * @var string
         */
        public $tree_type = array( 'post_type','taxonomy','custom' );

        /**
         * Database fields to use.
         *
         * @see Walker::$db_fields
         * @since 3.0.0
         * @todo Decouple this.
         * @var array
         */
        public $db_fields = array( 'parent' => 'menu_item_parent','id' => 'db_id' );

        /**
         * Starts the list before the elements are added.
         *
         * @see Walker::start_lvl()
         *
         * @since 3.0.0
         *
         * @param string $output Passed by reference. Used to append additional content.
         * @param int    $depth  Depth of menu item. Used for padding.
         * @param array  $args   An array of arguments. @see wp_nav_menu()
         */
        public function start_lvl( &$output,$depth = 0,$args = array() ) {
            $indent = str_repeat("\t",$depth);
            $output .= "\n$indent<ul class=\"sub-menu\">\n";
        }

        /**
         * Ends the list of after the elements are added.
         *
         * @see Walker::end_lvl()
         *
         * @since 3.0.0
         *
         * @param string $output Passed by reference. Used to append additional content.
         * @param int    $depth  Depth of menu item. Used for padding.
         * @param array  $args   An array of arguments. @see wp_nav_menu()
         */
        public function end_lvl( &$output,$depth);
            $output .= "$indent</ul>\n";
        }

        /**
         * Start the element output.
         *
         * @see Walker::start_el()
         *
         * @since 3.0.0
         *
         * @param string $output Passed by reference. Used to append additional content.
         * @param object $item   Menu item data object.
         * @param int    $depth  Depth of menu item. Used for padding.
         * @param array  $args   An array of arguments. @see wp_nav_menu()
         * @param int    $id     Current item ID.
         */
        public function start_el( &$output,$item,$args = array(),$id = 0 ) {
            $indent = ( $depth ) ? str_repeat( "\t",$depth ) : '';

            $classes = empty( $item->classes ) ? array() : (array) $item->classes;
            $classes[] = 'menu-item-' . $item->ID;

            /**
             * Filter the CSS class(es) applied to a menu item's list item element.
             *
             * @since 3.0.0
             * @since 4.1.0 The `$depth` parameter was added.
             *
             * @param array  $classes The CSS classes that are applied to the menu item's `<li>` element.
             * @param object $item    The current menu item.
             * @param array  $args    An array of {@see wp_nav_menu()} arguments.
             * @param int    $depth   Depth of menu item. Used for padding.
             */
            $class_names = join( ' ',apply_filters( 'nav_menu_css_class',array_filter( $classes ),$args,$depth ) );
            $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';

            /**
             * Filter the ID applied to a menu item's list item element.
             *
             * @since 3.0.1
             * @since 4.1.0 The `$depth` parameter was added.
             *
             * @param string $menu_id The ID that is applied to the menu item's `<li>` element.
             * @param object $item    The current menu item.
             * @param array  $args    An array of {@see wp_nav_menu()} arguments.
             * @param int    $depth   Depth of menu item. Used for padding.
             */
            $id = apply_filters( 'nav_menu_item_id','menu-item-'. $item->ID,$depth );
            $id = $id ? ' id="' . esc_attr( $id ) . '"' : '';

            $output .= $indent . '<li' . $id . $class_names .'>';

            $atts = array();
            $atts['title']  = ! empty( $item->attr_title ) ? $item->attr_title : '';
            $atts['target'] = ! empty( $item->target )     ? $item->target     : '';
            $atts['rel']    = ! empty( $item->xfn )        ? $item->xfn        : '';
            $atts['href']   = ! empty( $item->url )        ? $item->url        : '';

            /**
             * Filter the HTML attributes applied to a menu item's anchor element.
             *
             * @since 3.6.0
             * @since 4.1.0 The `$depth` parameter was added.
             *
             * @param array $atts {
             *     The HTML attributes applied to the menu item's `<a>` element,empty strings are ignored.
             *
             *     @type string $title  Title attribute.
             *     @type string $target Target attribute.
             *     @type string $rel    The rel attribute.
             *     @type string $href   The href attribute.
             * }
             * @param object $item  The current menu item.
             * @param array  $args  An array of {@see wp_nav_menu()} arguments.
             * @param int    $depth Depth of menu item. Used for padding.
             */
            $atts = apply_filters( 'nav_menu_link_attributes',$atts,$depth );

            $attributes = '';
            foreach ( $atts as $attr => $value ) {
                if ( ! empty( $value ) ) {
                    $value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
                    //Inject the optional URL in case it exists and the attribute is href
                    if('href' === $attr){
                        if(property_exists($item,'optional_url') && $item->optional_url){
                            $value = __($item->optional_url);
                        }
                    }
                    $attributes .= ' ' . $attr . '="' . $value . '"';
                }
            }

            $item_output = $args->before;
            $item_output .= '<a'. $attributes .'>';
            //$item_output .= property_exists($item,'optional_url') ? $item->optional_url : "no";
            /** This filter is documented in wp-includes/post-template.PHP */
            $item_output .= $args->link_before . apply_filters( 'the_title',$item->title,$item->ID ) . $args->link_after;
            $item_output .= '</a>';
            $item_output .= $args->after;

            /**
             * Filter a menu item's starting output.
             *
             * The menu item's starting output only includes `$args->before`,the opening `<a>`,* the menu item's title,the closing `</a>`,and `$args->after`. Currently,there is
             * no filter for modifying the opening and closing `<li>` for a menu item.
             *
             * @since 3.0.0
             *
             * @param string $item_output The menu item's starting HTML output.
             * @param object $item        Menu item data object.
             * @param int    $depth       Depth of menu item. Used for padding.
             * @param array  $args        An array of {@see wp_nav_menu()} arguments.
             */
            $output .= apply_filters( 'walker_nav_menu_start_el',$item_output,$depth,$args );
        }

        /**
         * Ends the element output,if needed.
         *
         * @see Walker::end_el()
         *
         * @since 3.0.0
         *
         * @param string $output Passed by reference. Used to append additional content.
         * @param object $item   Page data object. Not used.
         * @param int    $depth  Depth of page. Not Used.
         * @param array  $args   An array of arguments. @see wp_nav_menu()
         */
        public function end_el( &$output,$args = array() ) {
            $output .= "</li>\n";
        }

    } // Walker_Nav_Menu


//Custom Walker on edit screen  
add_filter( 'wp_edit_nav_menu_walker','custom_nav_edit_walker',2 );
function custom_nav_edit_walker($walker,$menu_id) {
    return 'Walker_Nav_Menu_Edit_Custom';
}

class Walker_Nav_Menu_Edit_Custom extends Walker_Nav_Menu  {
    /**
     * @see Walker_Nav_Menu::start_lvl()
     * @since 3.0.0
     *
     * @param string $output Passed by reference.
     */
    function start_lvl( &$output,$args = array() ) {
        $indent = str_repeat("\t",$depth);
        $output .= "\n$indent<ul class=\"sub-menu\">\n";
    }

    /**
     * @see Walker_Nav_Menu::end_lvl()
     * @since 3.0.0
     *
     * @param string $output Passed by reference.
     */
    function end_lvl( &$output,$depth);
        $output .= "$indent</ul>\n";
    }
    /**
     * @see Walker::start_el()
     * @since 3.0.0
     *
     * @param string $output Passed by reference. Used to append additional content.
     * @param object $item Menu item data object.
     * @param int $depth Depth of menu item. Used for padding.
     * @param object $args
     */
    function start_el( &$output,$id = 0 ) {
        global $_wp_nav_menu_max_depth;
        $_wp_nav_menu_max_depth = $depth > $_wp_nav_menu_max_depth ? $depth : $_wp_nav_menu_max_depth;

        $indent = ( $depth ) ? str_repeat( "\t",$depth ) : '';

        ob_start();
        $item_id = esc_attr( $item->ID );
        $removed_args = array(
            'action','customlink-tab','edit-menu-item','menu-item','page-tab','_wpnonce',);

        $original_title = '';
        if ( 'taxonomy' == $item->type ) {
            $original_title = get_term_field( 'name',$item->object_id,$item->object,'raw' );
            if ( is_wp_error( $original_title ) )
                $original_title = false;
        } elseif ( 'post_type' == $item->type ) {
            $original_object = get_post( $item->object_id );
            $original_title = $original_object->post_title;
        }

        $classes = array(
            'menu-item menu-item-depth-' . $depth,'menu-item-' . esc_attr( $item->object ),'menu-item-edit-' . ( ( isset( $_GET['edit-menu-item'] ) && $item_id == $_GET['edit-menu-item'] ) ? 'active' : 'inactive'),);

        $title = $item->title;

        if ( ! empty( $item->_invalid ) ) {
            $classes[] = 'menu-item-invalid';
            /* translators: %s: title of menu item which is invalid */
            $title = sprintf( __( '%s (Invalid)' ),$item->title );
        } elseif ( isset( $item->post_status ) && 'draft' == $item->post_status ) {
            $classes[] = 'pending';
            /* translators: %s: title of menu item in draft status */
            $title = sprintf( __('%s (Pending)'),$item->title );
        }

        $title = empty( $item->label ) ? $title : $item->label;

        ?>
    <li id="menu-item-<?PHP echo $item_id; ?>" class="<?PHP echo implode(' ',$classes ); ?>">
        <dl class="menu-item-bar">
            <dt class="menu-item-handle">
                <span class="item-title"><?PHP echo esc_html( $title ); ?></span>
                <span class="item-controls">
                    <span class="item-type"><?PHP echo esc_html( $item->type_label ); ?></span>
                    <span class="item-order hide-if-js">
                        <a href="<?PHP
                        echo wp_nonce_url(
                            add_query_arg(
                                array(
                                    'action' => 'move-up-menu-item','menu-item' => $item_id,),remove_query_arg($removed_args,admin_url( 'nav-menus.PHP' ) )
                            ),'move-menu_item'
                        );
                        ?>" class="item-move-up"><abbr title="<?PHP esc_attr_e('Move up'); ?>">&#8593;</abbr></a>
                        |
                        <a href="<?PHP
                        echo wp_nonce_url(
                            add_query_arg(
                                array(
                                    'action' => 'move-down-menu-item','move-menu_item'
                        );
                        ?>" class="item-move-down"><abbr title="<?PHP esc_attr_e('Move down'); ?>">&#8595;</abbr></a>
                    </span>
                    <a class="item-edit" id="edit-<?PHP echo $item_id; ?>" title="<?PHP esc_attr_e('Edit Menu Item'); ?>" href="<?PHP
                    echo ( isset( $_GET['edit-menu-item'] ) && $item_id == $_GET['edit-menu-item'] ) ? admin_url( 'nav-menus.PHP' ) : add_query_arg( 'edit-menu-item',$item_id,remove_query_arg( $removed_args,admin_url( 'nav-menus.PHP#menu-item-settings-' . $item_id ) ) );
                    ?>"><?PHP _e( 'Edit Menu Item' ); ?></a>
                </span>
            </dt>
        </dl>

        <div class="menu-item-settings" id="menu-item-settings-<?PHP echo $item_id; ?>">
            <?PHP if( 'custom' == $item->type ) : ?>
                <p class="field-url description description-wide">
                    <label for="edit-menu-item-url-<?PHP echo $item_id; ?>">
                        <?PHP _e( 'URL' ); ?><br />
                        <input type="text" id="edit-menu-item-url-<?PHP echo $item_id; ?>" class="widefat code edit-menu-item-url" name="menu-item-url[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->url ); ?>" />
                    </label>
                </p>
            <?PHP endif; ?>
            <p class="description description-thin">
                <label for="edit-menu-item-title-<?PHP echo $item_id; ?>">
                    <?PHP _e( 'Navigation Label' ); ?><br />
                    <input type="text" id="edit-menu-item-title-<?PHP echo $item_id; ?>" class="widefat edit-menu-item-title" name="menu-item-title[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->title ); ?>" />
                </label>
            </p>
            <p class="description description-thin">
                <label for="edit-menu-item-attr-title-<?PHP echo $item_id; ?>">
                    <?PHP _e( 'Title Attribute' ); ?><br />
                    <input type="text" id="edit-menu-item-attr-title-<?PHP echo $item_id; ?>" class="widefat edit-menu-item-attr-title" name="menu-item-attr-title[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->post_excerpt ); ?>" />
                </label>
            </p>
            <p class="field-link-target description">
                <label for="edit-menu-item-target-<?PHP echo $item_id; ?>">
                    <input type="checkBox" id="edit-menu-item-target-<?PHP echo $item_id; ?>" value="_blank" name="menu-item-target[<?PHP echo $item_id; ?>]"<?PHP checked( $item->target,'_blank' ); ?> />
                    <?PHP _e( 'Open link in a new window/tab' ); ?>
                </label>
            </p>
            <p class="field-css-classes description description-thin">
                <label for="edit-menu-item-classes-<?PHP echo $item_id; ?>">
                    <?PHP _e( 'CSS Classes (optional)' ); ?><br />
                    <input type="text" id="edit-menu-item-classes-<?PHP echo $item_id; ?>" class="widefat code edit-menu-item-classes" name="menu-item-classes[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( implode(' ',$item->classes ) ); ?>" />
                </label>
            </p>
            <p class="field-xfn description description-thin">
                <label for="edit-menu-item-xfn-<?PHP echo $item_id; ?>">
                    <?PHP _e( 'Link Relationship (XFN)' ); ?><br />
                    <input type="text" id="edit-menu-item-xfn-<?PHP echo $item_id; ?>" class="widefat code edit-menu-item-xfn" name="menu-item-xfn[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->xfn ); ?>" />
                </label>
            </p>
            <p class="field-description description description-wide">
                <label for="edit-menu-item-description-<?PHP echo $item_id; ?>">
                    <?PHP _e( 'Description' ); ?><br />
                    <textarea id="edit-menu-item-description-<?PHP echo $item_id; ?>" class="widefat edit-menu-item-description" rows="3" cols="20" name="menu-item-description[<?PHP echo $item_id; ?>]"><?PHP echo esc_html( $item->description ); // textarea_escaped ?></textarea>
                    <span class="description"><?PHP _e('The description will be displayed in the menu if the current theme supports it.'); ?></span>
                </label>
            </p>
            <?PHP
            /*
             * This is the added field
             */
            if($item->type == 'custom'):
            ?>
            <p class="field-custom description description-wide">
                <label for="edit-menu-item-custom-<?PHP echo $item_id; ?>">
                    <?PHP _e( 'Optional URL' ); ?><br />
                    <input type="text" id="edit-menu-item-custom-<?PHP echo $item_id; ?>" class="widefat code edit-menu-item-custom" name="menu-item-optional-url[<?PHP echo $item_id; ?>]" value="<?PHP echo $item->optional_url; ?>" />
                    <span class="description">Place an URL to use instead of the original one,while this one does not strip tags (stays unfiltered)</span>
                </label>
            </p>
            <?PHP
            endif;
            /*
             * end added field
             */
            ?>
            <div class="menu-item-actions description-wide submitBox">
                <?PHP if( 'custom' != $item->type && $original_title !== false ) : ?>
                    <p class="link-to-original">
                        <?PHP printf( __('Original: %s'),'<a href="' . esc_attr( $item->url ) . '">' . esc_html( $original_title ) . '</a>' ); ?>
                    </p>
                <?PHP endif; ?>
                <a class="item-delete submitdelete deletion" id="delete-<?PHP echo $item_id; ?>" href="<?PHP
                echo wp_nonce_url(
                    add_query_arg(
                        array(
                            'action' => 'delete-menu-item',admin_url( 'nav-menus.PHP' ) )
                    ),'delete-menu_item_' . $item_id
                ); ?>"><?PHP _e('Remove'); ?></a> <span class="Meta-sep"> | </span> <a class="item-cancel submitcancel" id="cancel-<?PHP echo $item_id; ?>" href="<?PHP echo esc_url( add_query_arg( array('edit-menu-item' => $item_id,'cancel' => time()),admin_url( 'nav-menus.PHP' ) ) ) );
                ?>#menu-item-settings-<?PHP echo $item_id; ?>"><?PHP _e('Cancel'); ?></a>
            </div>

            <input class="menu-item-data-db-id" type="hidden" name="menu-item-db-id[<?PHP echo $item_id; ?>]" value="<?PHP echo $item_id; ?>" />
            <input class="menu-item-data-object-id" type="hidden" name="menu-item-object-id[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->object_id ); ?>" />
            <input class="menu-item-data-object" type="hidden" name="menu-item-object[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->object ); ?>" />
            <input class="menu-item-data-parent-id" type="hidden" name="menu-item-parent-id[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->menu_item_parent ); ?>" />
            <input class="menu-item-data-position" type="hidden" name="menu-item-position[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->menu_order ); ?>" />
            <input class="menu-item-data-type" type="hidden" name="menu-item-type[<?PHP echo $item_id; ?>]" value="<?PHP echo esc_attr( $item->type ); ?>" />
        </div><!-- .menu-item-settings-->
        <ul class="menu-item-transport"></ul>
        <?PHP
        $output .= ob_get_clean();
    }
}

比编辑你的header.PHP或无论你在哪里调用wp_nav_menu函数,并传递这个新的步行者作为一个参数:

wp_nav_menu( array( 'theme_location' => 'primary','walker' => new qTranslate_Menu_Walker() ) );

其中qTranslate_Menu_Walker是用可选URL替换URL的新Walker

PS:使用<! - :en - >这些语言标签代替<! - : - >

猜你在找的PHP相关文章