Heim  >  Fragen und Antworten  >  Hauptteil

Mehrere Rewrite-Regeln verknüpfen benutzerdefinierte PHP-Artikel.

<p>Ich bin PHP-Neuling und versuche, einige Regeln neu zu schreiben, um die Struktur einiger Links zu ändern. Ich habe den gefundenen Code ausprobiert und dieser Code funktioniert nur für den ersten benutzerdefinierten Beitragstyp, den ich in der for-Schleife angegeben habe. Ich möchte eine for-Schleife erstellen, die die Links für alle von mir angegebenen benutzerdefinierten Beitragstypen ändert (die Namen dieser Beitragstypen befinden sich in einem Array). Hier ist mein Regelcode zum Umschreiben: </p> <pre class="brush:php;toolbar:false;">function mycustomname_link($post_link, $post = 0) { if($post->post_name === $name_of_my_post) { return home_url('new' .'/'. 'posts'.'/'. $post->post_name .'/'. $post->ID . '/'); } anders{ return $post_link; } } add_filter('post_type_link', 'mycustomname_link', 1,3); Funktion mycustomname_rewrites_init(){ add_rewrite_rule('new/posts/([^/]+)/([0-9]+)?$', 'index.php?post_type=nature_posts&p=$matches[1]&p=$matches[ 2]', 'oben'); Flush_rewrite_rules(); } add_action('init', 'mycustomname_rewrites_init'); </pre> <p>Ich sehe, dass die Funktion eine Return-Anweisung enthält, sodass die Umschreiberegeln nur auf die erste Iteration und den ersten benutzerdefinierten Beitragsnamen angewendet werden. Wie kann ich eine for-Schleife erstellen, damit sie für alle angegebenen Beitragsnamen funktioniert und nicht? Bei der ersten Iteration aufhören? </p>
P粉393030917P粉393030917423 Tage vor449

Antworte allen(1)Ich werde antworten

  • P粉605233764

    P粉6052337642023-07-28 00:14:02

    你可以尝试这样做:

    在mycustomname_link函数中,我们添加了一个循环,遍历$custom_post_types数组。对于每个自定义文章类型,它会检查当前的文章类型是否与数组中的任何名称匹配。如果有匹配,将应用重写规则。
    同样,在mycustomname_rewrites_init函数中,我们添加了一个循环来注册所有自定义文章类型的重写规则。每个自定义文章类型都将有自己的重写规则。

    通过这种修改,重写规则将应用于$custom_post_types数组中指定的所有自定义文章类型,而不会在第一次迭代时停止。确保更新$custom_post_types数组,其中包含你想在重写规则中包含的所有自定义文章类型的名称。


    function mycustomname_link($post_link, $post = 0) {
        $custom_post_types = array('name_of_my_post', 'another_post_type', 'yet_another_post_type'); // Add all your custom post type names here
    
        foreach ($custom_post_types as $post_type) {
            if ($post->post_type === $post_type) {
                return home_url('new' .'/'. 'posts'.'/'. $post->post_name .'/'. $post->ID . '/');
            }
        }
    
        return $post_link;
    }
    add_filter('post_type_link', 'mycustomname_link', 10, 2);
    
    function mycustomname_rewrites_init(){
        $custom_post_types = array('name_of_my_post', 'another_post_type', 'yet_another_post_type'); // Add all your custom post type names here
    
        foreach ($custom_post_types as $post_type) {
            add_rewrite_rule('new/posts/([^/]+)/([0-9]+)?$', 'index.php?post_type=' . $post_type . '&p=$matches[1]&p=$matches[2]', 'top');
        }
    
        flush_rewrite_rules();
    }
    add_action('init', 'mycustomname_rewrites_init');

    Antwort
    0
  • StornierenAntwort