2015-06-07 199 views

回答

2

嗨你好,它是由JS和ajax完成,只要你写标题,它会发送标题与Ajax和变成永久链接,并获得固定链接领域。我发现源代码希望它能帮助你。

可湿性粉剂管理员/包括/ 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/post.js线706

js的
// 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; 
    }); 
+0

感谢您的信息:) –

1

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

+0

感谢您的信息:) –

1

永久链接不是“生成”的,对于使用永久链接,阅读关于mod_rewrite。

该链接看起来像“写你的帖子标题在这里”是一个实际的文件,而不是。

该页面会将您重定向到“posts.php”,那里正在分析appendex,然后db调用正好与那些选项一起启动。

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

没有JS,没有AJAX。

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

+1

感谢您的信息:) –

相关问题