WordPress 默认没有复制这个功能的,比如两篇文章和页面内容相似,在原有基础上稍作修改就可以,通过复制就方便多了。当我们需要大部分相同的格式、标签、分类、自定义字段、SEO 数据等时,我们需要复制页面或文章功能。g a F S H在本教程中,我们将学习如何在 WordPress 中复制页面或文章。我们可以使用插件或不使用插件来做到这一点。在此方法中,我们将创建复制 WordPress 页面或文章的功能。我们将在 functions.php 文件中添加一个代码片段。
添加功t Y 1 G = Z能
- /*
- * Function creates post duplicate as a draft and redirects thenO # s H K B to the edit post screen
- */
- f\ 5 6 /unction duplicatw 1 V & k w 1 . Qe_post_or_page(){
- global $wpdb;
- if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($G , } t 6 c : i_REQUEST['action']) && 'duplicate_post_o3 B U ) 2 e 8 q mr_page' == $_REQUEST['action'] ) ) ) &d ( g $#123;
- wp_die('No post to duplicate has been supplied!');
- }
- /*
- * Nonce verification
- */
- if ( !isset( $_GET['duplica= e .te_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename(4 3 o u __FILE__ ) ) )
- return;Y K ? }
- /*
- * get the original post id
- */
- $post_id = (isset($_GET 4 D d * @ A1;'post']) ? absint( $; ~ ) A g S N_GET['post'] ) : absintv L G R ; z I s _( $_POST ^ y r 9 y P ?1;'post'] ) );
- /*
- * and all the original postw ; Y 2 t U data then
- */
- $post = get_post( $post_id l z %41;;
- /*
- * if you don't want current user to be the new post ah J Y v } |uthor,
- * then change next couple of lines tY * \ & S \ k [o tc & %his: $new_post_author = $posk r p # % Qt->post_author;
- */
- $current_user = wp_get_current { at_user();
- $post_author = $curr ; o x Y 3 v ?rentH % 2 $ . x W_user->ID;
- /*
- * if post data exists, create the p~ \ . iost duplicate
- */
- if (isset( $post )Z t A 4; && $post !n i V C= null) {
- /*
- * new post data array
- */
- $args = arraym 4 6 !(
- 'comment_str C = 8atus' => $post->comment_status,
- 'pingJ G B_status' => $post->ping_status,$ i o I 1 ( { ( 4
- 'post_author' => $post_author,
- 'O * [ x K \ 3 -post_content' => $post->post_content,
- 'post_excerpt' => $post-w H l 6 C * [ ? ;>post_excerpt,
- 'post_name' => $poW k + ^st->post_name,
- 'C E K g A 2post_parent' => $post->post_parent,
- '~ v 9 }post_password' => $post->post_password,
- 'post_status' => 'draf$ K a $ J E wt',
- 'post_title' => $post->post_title,
- 'post_type' =&I T Xgt; $post->post_type,
- 'ta Z l Y M - ho_ping' => $post-&W O : 2 z m }gt;to_ping,
- 'menu_ord| u = Ker' => $post->menu_order
- );
- /*
- * insert tg | Y rhe post by wp_insert_post()\ = [ G Y Z function
- */
- $new_post_id = wp_insert_postK ! %( $args t g G ^ q _ H41;;
- /*
- * get all current post terms ad set them to the new post dg F nraft
- */
- $taxonomies = get_object_taxonomies($post->post_type! 3 V % / P 0 v);
- foreach ($taxonomies as $taxonomy) {
- $post_t\ Y K d p G ? Ierms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
- wp_set_object_terms($nZ B L D \ew_post_id, $pos! V ;t_terml B K $ = + Q ` 7s, $taxonomy, false);
- }k % G 5;
- /*
- * duplicate all posta # y U k x } - meta just in two SQL queries
- */
- $post_meta = $wpdb->get_results. ` q ] f40;"SELECT meta_key, meth B Q ~ a Ja_value FROM $wpdb->postmeta WHERE post_id=$post_id&qu@ 6 9 a Lot;);
- if (count($post_d ( b F Kmeta)!=0) {
- $sql_query = "INSERT INTO $wpdb->pos\ _ T 3tmeto ~ Pa (post_id, mf N C 3 g Y g Seta_key, meta_value)? ! J ; L ";
- foreach ($post_meta as $meta_info) {
- $meta_key = $meta_info->meta_key;
- if( $meta_key == '_wp_old_slug' ) con` i R Ftinue;
- $meta_value = addslashes($meta_info->a W } m j P v ? F;meta_value);
- $sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'";
- &1 W | I J .#125;
- $sql_quE p h p |ery.= implode(" UNION ALL ", $sql_quf P 1 N | ` i Q #ery_sel);
- $wpdb->query&9 V p & v J E ? )#40;$sql_query);
- D . G L5;
- /*
- * finally, redirectc @ . to the edit post screen for the new draft
- */
- wp_redirect( admin_url( 'post.php?action=edit&post] x [ _ { Q o V J=' . $new_post_id )i ? u );
- exit;
- } else {
- wp_di5 U z O . ) me('Post creation failed, could not find originalV 5 w 5 s q G post: ' . $post_id);
- }
- }
- add_action( 'admin_action_duplicate_post_or_page', 'duplicate_post_or_page' );
上面的代码将创建一个具有相同内容(如标签、分类、自定义字段等)的文章。因此Q c N C \ X,将此代码添加到主题的 functions.php 文件中并保存。A r J g
添加链接
上面我们制作了复制 WordPress 文章或页面的功能,并将新文章作为具有相同数据的草稿。而下面的代码将在列表页面上一个新的动作,运行上面的功能。因此,在主题的 functions.php 文件中添加以下代码并保存。
- /*
- * Add the duplicated a W b h \ & link to the acti* \ 2 f p 5 n _on list fo| y Q d D t Jr post_row_actions
- */
- function duplicate_post_1 G $ S s d Alink( $actions, $post ) {
- if (current_user_can('edit_posts')I e M g \ /) {
- $actioR J kns['duplicate'] = '<a href="'%20.%20wp_nonce_url('admin.php?acl R `tion=duplicate_post_or_page&post='%20.%20%24post->ID,%20baset ~ mname(__FILE__),%20'duplicate_nonce'%20)%20.%20'" tib ) _ E 8 c s :tle="Duplicate this item" rel="permalink">Duplicate</a>';
- / [ :125;
- return $actions;
- }
- add_filter( 'pos+ D G ? P N #t_row_f { 0 ^ U ; % ^actions', 'duplicate_poh f | ` I ? r Zst_link', 10, 2 );
在主题3 a V u z g O 0 $的 functions.php 文件中添加两个代? ; m & ! a k码块后,您将在帖子列表页面上看到一个新的操作链接。标签将是 Duplicate,您可以更改为克隆或复制。
现在您可以通过单击复制操作链接来克隆您的 WordPress 文章。它将创建具有相同内容的新文章,并将您重\ ; _ t定向到编辑帖子页面。您可以在此处发布或起草。
但是,如果您还想复制 WordPress 页面怎么办?
别担心!您不需要为此创建额外的功能。我们将使用与上述相同的功能,并将仅添加一个过滤器挂钩线来运行上述页面并显示页面的重复链接。
在页面列表添加复制链接; ` ; H M
在添加了上面【 在文章列表添加复制链接 】的代码基础上,只需再将0 ( 0 - A v ~ # M下面的代码添加到主题的 functions.php 文件中,就可以为页面显示相同的复制链接。
- az J add_filterO D U X \ : \ d S40;'page_row_actions', 'duplicate_post_link', 10, 2);
效果如下所示:
在本教程中,3 m x 3我们介绍了使用插件+ O ! ) s p x ` Y或代码实现文章/页* D 5 ,面一键复制的功能,希望对大家有所帮. n ) 9助。如果您有任何问题,请在下面评论。