【问题标题】:Wordpress generating permalink of postsWordpress 生成帖子的永久链接
【发布时间】:2015-08-21 19:46:11
【问题描述】:

我想知道 wordpress 在写帖子时如何生成帖子的永久链接。


它使用的是 javascript 吗?

【问题讨论】:

    标签: wordpress permalinks


    【解决方案1】:

    它使用 AJAX。 在您撰写文章时,JS 将标题发送到服务器,在那里生成永久链接并将其发送回页面。

    【讨论】:

    • 感谢您的信息:)
    【解决方案2】:

    永久链接不是“生成”的,要使用永久链接,请阅读 mod_rewrite。

    链接看起来像“write-your-post-title-here”是一个实际的文件,其实不是。

    该页面可能会将您重定向到“posts.php”,正在分析附录,然后使用该选项启动 db 调用。

    类似

    "SELECT * FROM posts WHERE title LIKE `write-your-post-title-here`"
    

    没有 JS,没有 AJAX。

    JS 用于“更新”链接的光学状态。因此,如果您单击编辑,并更改帖子标题,JS 将动态更新您可以看到您实际输入的文本。

    【讨论】:

    • 感谢您的信息:)
    【解决方案3】:

    嗨,你好,它是由 JS 和 ajax 完成的,只要你写标题,它就会发送带有 ajax 的标题并更改为永久链接并获取永久链接字段。我找到了源代码,希望对您有所帮助。

    wp-admin/includes/post.php 第 1257 行

    function get_sample_permalink_html( $id, $new_title = null, $new_slug = null ) {
        $post = get_post( $id );
        if ( ! $post )
            return '';
    
        list($permalink, $post_name) = get_sample_permalink($post->ID, $new_title, $new_slug);
    
        if ( current_user_can( 'read_post', $post->ID ) ) {
            $ptype = get_post_type_object( $post->post_type );
            $view_post = $ptype->labels->view_item;
        }
    
        if ( 'publish' == get_post_status( $post ) ) {
            $title = __('Click to edit this part of the permalink');
        } else {
            $title = __('Temporary permalink. Click to edit this part.');
        }
    
        if ( false === strpos( $permalink, '%postname%' ) && false === strpos( $permalink, '%pagename%' ) ) {
            $return = '<strong>' . __('Permalink:') . "</strong>\n" . '<span id="sample-permalink" tabindex="-1">' . $permalink . "</span>\n";
            if ( '' == get_option( 'permalink_structure' ) && current_user_can( 'manage_options' ) && !( 'page' == get_option('show_on_front') && $id == get_option('page_on_front') ) ) {
                $return .= '<span id="change-permalinks"><a href="options-permalink.php" class="button button-small" target="_blank">' . __('Change Permalinks') . "</a></span>\n";
            }
        } else {
            if ( function_exists( 'mb_strlen' ) ) {
                if ( mb_strlen( $post_name ) > 30 ) {
                    $post_name_abridged = mb_substr( $post_name, 0, 14 ) . '&hellip;' . mb_substr( $post_name, -14 );
                } else {
                    $post_name_abridged = $post_name;
                }
            } else {
                if ( strlen( $post_name ) > 30 ) {
                    $post_name_abridged = substr( $post_name, 0, 14 ) . '&hellip;' . substr( $post_name, -14 );
                } else {
                    $post_name_abridged = $post_name;
                }
            }
    
            $post_name_html = '<span id="editable-post-name" title="' . $title . '">' . $post_name_abridged . '</span>';
            $display_link = str_replace( array( '%pagename%', '%postname%' ), $post_name_html, urldecode( $permalink ) );
            $pretty_permalink = str_replace( array( '%pagename%', '%postname%' ), $post_name, urldecode( $permalink ) );
    
            $return =  '<strong>' . __( 'Permalink:' ) . "</strong>\n";
            $return .= '<span id="sample-permalink" tabindex="-1">' . $display_link . "</span>\n";
            $return .= '&lrm;'; // Fix bi-directional text display defect in RTL languages.
            $return .= '<span id="edit-slug-buttons"><a href="#post_name" class="edit-slug button button-small hide-if-no-js" onclick="editPermalink(' . $id . '); return false;">' . __( 'Edit' ) . "</a></span>\n";
            $return .= '<span id="editable-post-name-full">' . $post_name . "</span>\n";
        }
    
        if ( isset( $view_post ) ) {
            if( 'draft' == $post->post_status ) {
                $preview_link = set_url_scheme( get_permalink( $post->ID ) );
                /** This filter is documented in wp-admin/includes/meta-boxes.php */
                $preview_link = apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ), $post );
                $return .= "<span id='view-post-btn'><a href='" . esc_url( $preview_link ) . "' class='button button-small' target='wp-preview-{$post->ID}'>$view_post</a></span>\n";
            } else {
                if ( empty( $pretty_permalink ) ) {
                    $pretty_permalink = $permalink;
                }
    
                $return .= "<span id='view-post-btn'><a href='" . $pretty_permalink . "' class='button button-small'>$view_post</a></span>\n";
            }
        }
    
        /**
         * Filter the sample permalink HTML markup.
         *
         * @since 2.9.0
         *
         * @param string      $return    Sample permalink HTML markup.
         * @param int|WP_Post $id        Post object or ID.
         * @param string      $new_title New sample permalink title.
         * @param string      $new_slug  New sample permalink slug.
         */
        $return = apply_filters( 'get_sample_permalink_html', $return, $id, $new_title, $new_slug );
    
        return $return;
    }
    

    这是使用的js

    wp-admin/js/post.js 第 706 行

    // permalink
    function editPermalink() {
        var i, slug_value,
            c = 0,
            e = $('#editable-post-name'),
            revert_e = e.html(),
            real_slug = $('#post_name'),
            revert_slug = real_slug.val(),
            b = $('#edit-slug-buttons'),
            revert_b = b.html(),
            full = $('#editable-post-name-full');
    
        // Deal with Twemoji in the post-name
        full.find( 'img' ).replaceWith( function() { return this.alt; } );
        full = full.html();
    
        $('#view-post-btn').hide();
        b.html('<a href="#" class="save button button-small">'+postL10n.ok+'</a> <a class="cancel" href="#">'+postL10n.cancel+'</a>');
        b.children('.save').click(function() {
            var new_slug = e.children('input').val();
            if ( new_slug == $('#editable-post-name-full').text() ) {
                b.children('.cancel').click();
                return false;
            }
            $.post(ajaxurl, {
                action: 'sample-permalink',
                post_id: postId,
                new_slug: new_slug,
                new_title: $('#title').val(),
                samplepermalinknonce: $('#samplepermalinknonce').val()
            }, function(data) {
                var box = $('#edit-slug-box');
                box.html(data);
                if (box.hasClass('hidden')) {
                    box.fadeIn('fast', function () {
                        box.removeClass('hidden');
                    });
                }
    
                b.html(revert_b);
                real_slug.val(new_slug);
                $('#view-post-btn').show();
            });
            return false;
        });
    

    【讨论】:

    • 感谢您的信息:)
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 2012-02-22
    • 1970-01-01
    • 2012-09-11
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    相关资源
    最近更新 更多