Wordpress页面slug与媒体库项目冲突

时间:2012-03-21 18:11:14

标签: wordpress wordpress-theming permalinks

我创建了一个分配了自定义模板的新页面。当我访问该页面的网址时,我看到的是默认页面布局(不是我的模板),管理工具栏显示了与媒体相关的选项(例如:编辑媒体)。

经过一番头疼之后,我推断出网址必须以某种方式指向媒体项目。我编辑了页面slug和“bingo”,实际页面就像预期的那样出现。当我访问原始网址(来自第一个slug)时,我看到了相同的媒体项目。

底线:看起来巧合的是,网页和媒体项共享相同的名称,这不知何故导致WP的电线越过。

我的问题:有人可以帮我理解这是怎么回事? wordpress是否会为媒体库中的所有内容创建魔术固定链接(除了wp-content/uploads/...中的位置)?

注意:媒体项目已正常上传到媒体库(而不是FTP到根目录等)

3 个答案:

答案 0 :(得分:1)

是的,在WordPress中,您不能拥有重复的slu / / categories / taxonomies / tags。因此,如果你的主题允许媒体文件和永久链接拥有自己的页面并且slug与另一个相同,它通常会附加一个数字,因为数据库不喜欢它。

media slug "示例"
page slug "示例"由于该slug已经存在,因此无法正常工作,如果在管理员中完成,它将自动将slug更改为" example-1"。

答案 1 :(得分:0)

我刚遇到这个问题并修复了这样的问题:

$post_s=get_posts('posts_per_page=-1');
        foreach($post_s as $p){
            $atts = get_posts('post_type=attachment&name='.$p->post_name.'&posts_per_page=-1&post_status=inherit');
            foreach($atts as $att){
                echo 'found!! '.$p->post_name;
                // Update post 37
                $my_post = array(
                      'ID'           => $atts->ID,
                      'post_name' => $att->post_name.'-image'
                );
                // Update the post into the database
                wp_update_post( $my_post );
            }
        }

答案 2 :(得分:0)

这是一个迟到的答案,但我想提供<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Validate me</title> <script> console.log(document.forms); function validateForm() { for (var i = 0; i < document.forms[0].length - 1; i++) { if (document.forms[0][i].type == 'text' && document.forms[0][i].value == '') { alert('Please Enter Your Full Name'); return false; } else if (document.forms[0][i].type == 'radio') { if (document.forms[0].gender[0].checked == false && document.forms[0].gender[1].checked == false) { alert('Please select gender'); return false; } } else if (document.forms[0][i].type == 'checkbox') { if (document.forms[0].hobbies[0].checked == false && document.forms[0].hobbies[1].checked == false && document.forms[0].hobbies[2].checked == false) { alert('Please select hobby'); return false; } } else if (document.forms[0][i].type == 'select') { if (document.forms[0].option[0].selected == false && document.forms[0].option[1].selected == false && document.forms[0].option[2].selected == false) { alert('Please select a favorite movie') return false; } } console.log(document.forms[0][i].type); } } </script> </head> <body> At lease one piece of data has to come in from every input type. <form action="form.html" method="get"><br/> Name: <input type="text" name="fullname" placeholder="Enter Full Name" /><br/> Gender: <br/> Male <input type="radio" name="gender" value="male" />Female<input type="radio" name="gender" value="female" /><br/> Hobbies <br/> Baseball <input type="checkbox" name="hobbies[]" value="baseball" /> Football <input type="checkbox" name="hobbies[]" value="football" /> Hockey <input type="checkbox" name="hobbies[]" value="hockey" /><br/> Favorite Show <select name="show"> <option value = "">Choose Below</option> <option value = "ATHF">Aqua Teen Hunger Force</option> <option value = "Family Guy">Family Guy</option> <option value = "Simpsons">Simpsons</option> </select><br/> Comments <br/> <textarea cols="50" rows="6" name="comments">Enter Comments</textarea> <br/> <input type="button" name="submit" value="enter me" onclick="return validateForm();" /> </form> </body> </html>给出的答案的更清晰版本。

alesub

此功能在主题设置后立即在动作挂钩上运行。第一行检查数据库function wp21418_append_to_post_name() { // Checks to see if the option images_updated has been set or has a value of true. if ( get_option( 'images_updated' ) === 'true' ) : return; endif; // get all attachment posts. $attachments = get_posts([ 'post_type' => 'attachment', 'post_status' => 'inherit', 'name' => $p->slug, 'posts_per_page' => -1, ]); // For each attachment, loop and update the post_name foreach($attachments as $p){ $attachment = array( 'ID' => $p->ID, 'post_name' => $p->post_name.'-image' ); // Update the post into the database wp_update_post( $attachment ); } // Once everything is looped, add the option to the database. add_option( 'images_updated', 'true' ); } add_action( 'after_setup_theme', 'wp21418_append_to_post_name' ); 中是否有选项。如果存在该选项,我们会保留该功能,并且它不会进行任何处理。否则,如果该选项不存在,它将运行该函数并在最后设置该选项。

这使得它只会运行一次。刷新后您不必删除该功能。如果您想再次运行它,只需删除顶部的images_updated语句即可。 警告:这样做会在if末尾添加另一个-image,即使他们已经post_names(例如-image

可能会有更多文件名检查这种情况。如果有人确实需要,将更新答案。