So zeigen Sie Archivseitenbeiträge basierend auf author_id an

Ich möchte, dass die Posts auf der Archivseite von Custom Post – gallery Basis von author_id dh die author_id wird als Permalink – Variable übergeben. Die auf der Archivseite angezeigten Posts sind nur die Posts, die vom Autor veröffentlicht wurden, dessen author_id übergeben wurde.

Meine benutzerdefinierte Post- gallery Archivseite hat die URL http://localhost/?post_type=gallery in der alle in der post_type – gallery geposteten Posts aufgelistet sind.

 function my_custom_gallery() { $gallery_labels = array( 'name' => _x('Gallery', 'post type general name'), 'singular_name' => _x('Gallery', 'post type singular name'), 'add_new' => _x('Add New', 'gallery'), 'add_new_item' => __("Add New Gallery"), 'edit_item' => __("Edit Gallery"), 'new_item' => __("New Gallery"), 'view_item' => __("View Gallery"), 'search_items' => __("Search Gallery"), 'not_found' => __('No galleries found'), 'not_found_in_trash' => __('No galleries found in Trash'), 'parent_item_colon' => '' ); $gallery_args = array( 'labels' => $gallery_labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => false, 'hierarchical' => false, 'has_archive' => true, 'menu_position' => null, 'capability_type' => 'post', 'supports' => array('title'), 'show_ui' => true, 'query_var' => true, 'menu_position' => 4, 'menu_icon' => 'dashicons-images-alt2' ); register_post_type('gallery', $gallery_args); } add_action( 'init', 'my_custom_gallery' ); 

Ich habe eine benutzerdefinierte Abfragevariable mit der folgenden function eingeführt

 function add_custom_query_var( $vars ){ $vars[] = "custom_user_id"; return $vars; } add_filter( 'query_vars', 'add_custom_query_var' ); 

Ich habe meine URL-Struktur neu geschrieben, um die custom_user_id zu enthalten

 function add_rewrite_rules($aRules) { $aNewRules = array('/gallery/user/([^/]+)?$' => 'index.php?post_type=gallery&custom_user_id=$matches[1]'); $aRules = $aNewRules + $aRules; return $aRules; } add_filter('rewrite_rules_array', 'add_rewrite_rules'); function rewrite_flush(){ global $wp_rewrite; $gallery_structure = '/gallery/%user_id%/%gallery%'; $wp_rewrite->add_rewrite_tag("%gallery%", '([^/]+)', "gallery="); $wp_rewrite->add_permastruct('gallery', $gallery_structure, false); $wp_rewrite->flush_rules(); } add_action('init','rewrite_flush'); function tdd_permalinks($permalink, $post, $leavename){ $no_data = get_the_author_meta('ID'); if($post->post_type != 'gallery' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) return $permalink; $var1 = sanitize_title($no_data); $permalink = str_replace('%custom_user_id%', $var1, $permalink); return $permalink; } add_filter('post_type_link', 'tdd_permalinks', 10, 3); 

Ich stimme die benutzerdefinierte Abfragevariable mit $query_author_id = get_query_var(custom_user_id) und möchte die Posts anzeigen, deren Autor die author_id$query_author_id auf der Archivseite hat.

Solutions Collecting From Web of "So zeigen Sie Archivseitenbeiträge basierend auf author_id an"

Alles, was Sie brauchen, ist die Verwendung der pre_get_posts Aktion zum pre_get_posts , um author_id der Abfrage basierend auf Ihrer benutzerdefinierten custom_user_id Abfrage custom_user_id Var:

 add_action( 'pre_get_posts', 'filter_by_custom_user_id' ); function filter_by_custom_user_id( $query ) { // Apply only on frontend, for gallery post type archive, for main query and if custom_user_id query var is set. if( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'gallery' ) && isset( $query->query_vars['custom_user_id'] ) { $query->set( 'author_id', (int) $query->query_vars['custom_user_id'] ); } } 

WICHTIG : Ich sehe, dass Sie die Umschreibregeln bei jedem Laden der Seite mit dem init Aktions-Hook init . Flusing Rewrite-Regeln sollten nur bei Aktivierung und Deaktivierung des Plug-ins durchgeführt werden. Abgesehen von diesen Hooks sollten Löschregeln nur dann ausgeführt werden, wenn Sie wissen, dass sich die Rewrite-Regeln geändert haben und sie neu erstellt werden müssen. Beachten Sie, dass das Löschen von Umschreibungsregeln databaseoperationen ausführt, die nicht nur einmal ausgeführt werden müssen, nicht bei jeder Seitenladung.