.wordpress-org/banner-772x250.jpg000060400000137000147177171730012356 0ustar00JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprtxiMˌr7a@85FO/ê5=軭#`-u˥GwxBF)jkaQ[,}.2Sl#_v'~׋WOON$,I ^_Gel8^">!Ϋ6bIB|:1cW 2%Hlv:{雮, [4=$%_Cn{`/K5}3wU=*.Ƚ=NQBds#6!w'$)d P9nv ; 8iN!/0ϭ,L ,N5$ZMvi er)m~8/g95.cX(i$beb683k_մD*'s9U^b_NVKA=8r͌9,Jy}mab<Gt:*pa~kw+gfs -FO! }Z;W ۨ+0X/eTQsc8v yk=,y e:d8]*K%V&H@{CG1`oO.a~7 m \y5%X\1Nd1|]o' 68w|5%acqԖg#/$2Ҟ.!HYNHݔr+X GoLQ%Eo~(f'l*ʣM7P`N U COR"/< [H= cnGvSsobsz1Oel9#ɍ 3MSfReVIh2"#2rM{b9iZ!~гPmSPČ'N_Sd̩' < ؏K_%&ROLқ?+XӴ 0Hdh )*bA^(DY NmWex>&gWW5ho88C9dfWS"zRΠw7aۘ6+^ܿpbd M1X`y[aUqtgM_HVFV t{Xbw1.!op/ʶ(K rqWfUvKqGRU榧!@u"UQaN"MoAKUjA2TAMJe2`Pu+ZMiLLjG%UmCl?,YYpV`iK_GU]:mZظrI uS:|!ϓ,h;I}:r]c~'~8ji*@EllH܎Ig̼{ٵ 4U!Snve58mT^)Qm.?37eץdR1SGQ(xGFY5)y}qOZ٦K=j-jir:Q/dx$ nCȳȳD#We{\Mz@cf`Ox%Ω:j; q2RMNhU&p/kzbQaWQE[MP#N˭ZE3X6Eeb '(LTĥߪ|ŏ8[xcE/TCڶV+ahBmEAupX LԂ1Nĵ5摧HBobU6_ 3*<.^ur"4k 7+p}ۅ2.'h=q#HY;,T;GQ#ZHIΫ* |6*)ai*m{فHj,Fq+x\GX)mY*,3DoYSRqEkQlt̼GK=]nk!d<<K)q.N Vu?餧Y4Yu~Ӗ F3uM\E NOq+ WYfֶ\\;j<֞?ͳ)X1ܔdPvrgֽl 8q6ո0dY5Lˑy{GI/ UbC"l! M_ǰI@e7k &a WݟV"LЃו{clYĜ1guuOf湳,QJec]e'\;Xr2xi$G3A2v'JL~~[u4O'9/$gow~ ]ˢ7eE[.GQH8G/=ۑ-Nę,vP  oqYvb!oP?h%:,7`T$DvbQq%D5.<.K0 #ҟ #ErI_|>ZG>*ߠ.ÊJ4|3ghSorBoSLlwY=&{ "ȢgŊ?tyJlnWTfMSy|#JSRs> aݝb% Yjym1O&cOd373/1)N0Jj% Xofv6I*8;6\k4UPUVK_WTRSIIUN̲WWBCoufr|;edVRESFE5YYÓ.0fqveu2=]8hٝKacEL!p,Ee$hPTNaWC)kݙsoNX.fc\Vo,!d# ϵlc*ٕ /ؿ'*(f܃{ .6ϞXhõb9^|pa$w:l$-4MLv^no8&XǡPMAbm{cQPR),>Ͼ2MiX v,bV$N ig'WiVqi_*+G ~rnz(۞/>{Aqtu+IΆ ^a `: \uwutt=VS[4#㎺)!HYH 2惈h,QuԿcqKvS>g%54C9ʣ6mNhﺦ=aڇA|sK1U`e\L[9q"5sTQ [RI\ǂ?zk[nT|YtOEp6N~ 1$ܻf7$r1 .m5溭W#QIi) $%LY=KU-SIݍI[nȩD*3,OO2R+"@V@)5j}h'SY_K=-$@FCǻg3ha#Gm]}v[ُ4N_Wdu=vI&ܞ6vٝ\ry榋BA/4:o xO}N.{L͸hh1̖c̀AbN :4rW2IU`M${so|h%3)+2 $"3zkͶxk;s|22iL95lyv$;x:2*lI2v-ka~bڥ#JI<Ƕ8u%nKM=/UjYFo f7bqjÛN;T ʩA珋:TviݒrMY/?{nT$~̳+f2LF/@:`s:<̛4G^7W:,9<žaN뀙$*Q?trs}ӣ[4d {늉=N:іA+톀p0Ry,F%89JG =:z4(o,ͅ w-$Q>jȷKpd4`Å~n y@i@O<sn11 ApWb dWt#|LRNWo#c5²$!F^C~bvxڝTqp kbI3j:w(ዊBm}G1Y/CxM nl> tjjJ*:H3 <j )ozDc=](A=cgiԵ^O:FQ &BURˤ --X>,ZjʁlHq s Cv13wa\'~1̻˒g1J:|il#y.nZ2:mϧ)~CQhzVS3sJw+WIÒpq>'dV6Ӻ l(xSN3oXϖS2j br(i>{1:ˡ)|U&`Jxu-5 XQ\7UR dfupB!\,F(^Nɗ8\)غS4Zvyr8jq2B sc3g51eSQ&eNR(Vf >g/.dž ^2҆^*hMDaFCbXٞ9irJZZz:)gUuTVR=ļ9AK.r؍0wmGRIře\MZksz<2+ƪɄn\CMg PX͕܏ ^?w3j 柉F]Yy"u \%os̞1 SqVSc#/)hrߪ%fQ]I4vwojirΧc'3%^fE q,ܶ)rlb/:t4FF=pn8:?_*-(#4rPjH DgYl.u pyOO/gǚQ,3D:;2UP+ F {OS|>* $'(Et>/jLeQUs? lͳ5b Z٣gJiB)R)6uat)ϙRAQNuVՈe #8 ykH˄Z|Gf\ƅk6;wir̎/&VbiH챖 kFؿ UWSibP׏a7ό3llZx+馞ia8Y߇,*l$X&XءD BP`U'e|$q6j֓2l,)]"}^ Zǝi ׈6eJ@y6kYl45I_XHE ^k}1jQRgӼѬ! KW/o[ Xɻ;$eqJA?૑Ýg8'!/ֆ*jBA G4Y],e(ݝK >i8l2| 3lJj 7>[ƻvfB*C]W~II8@`^|osJ&T'LYWJ2xTtA-kbwf_\-:hj$R2(Udonol-|gT3v\\ڈֲI+#O |DbYpA#U,@Kaw`%M@+xo3z*F|7pᇒ۝j8ڇPm.z2פhKj3ȃӯ1vٹs͆ߖ݁vA Q,Ʀ?y%Siqopw?vg^I"dEij1a_̷Mo6NFb @b?s$oD @ob~]@R., 1Z(<$oצ:&+}s'[MQJ D9`%WǖȠ_a j|E X s6-k^B+P(r*#]C[{{_E=o $C+f.n@ނ. ȯPQ7ŝ٭\\!_%,q:X>Iǘf:L6j>-%dqk2C%7 ࠊY$ !mm<_$V4zXO>qI],h(leX$Nc`:uwer}{=!s<Pdx3&|¢JIk ~9L(WYNO3Sez0;tŋr3R9eEmԯzN$Qz[֧9>?X |5{MQǛ!bpG&ǙU9T9QMd<38=JY=4Rǘ|1|/fں7723/c2m_L~/IHcq rML9^k邨&e~2,A(28YJƐ7ߧ,.)0h=DO[,-b8Φ u@HMjn8h691-Qg>PMVcm[wPGÕqrro[LgLKM?FYR}fF^؏L% 0 b.onbs<V*c+U8#i*2Y22Fu'a5z3Ğ4},,z^)$c$"RYo|C}[&]K1 ѪĀgYMQLq O`D@mpq{ k1LhgL)4XcǦ2dհr(IX (5Ђ}2}aa@s3*taclv7ntݵ?H1"F㦭{8Ōn9q\|0AB?xQ9m9+kba~x-# ؝E&gR$D.N؂.F<+qyBl#_BLR08,r[ϳʸ23+T3'Ït8D #$]O~7{j< ٦[H&<X4vԾqʩㄅT7 rM7|VBU-53\pw*ctƷ񮪎CȖC`d#،FF[:^ؔÃST@Q!a2ܹzbhV YÊ̟k\[݀laRE;'e1i"^Z᪫ as7qFI끳n}0<]JSÑCĩ"m,8wXS%}|ˮ:y<[:쫄(ň@#KpsMYQiiDKJN7}/Ch1ZM/c_޻1I2y2*DHVG1wՖB#\TYR)$6m3I2ꖈaVm`i5\%Ƴrs;p/vb[ ؑjm<_a{o2_t+9oaUML]|HI*KQFzn1 _|p?iC7>]~X{#>/07V6$\c#$h!$|@5CV7ؐd.z[{nD\LҺeIkۖ؍uLRosr-=0ut뙄ѹ}ͧu$GۧEEo|YyxKU . >L}]mNmt dSr;#ͿǦ=R=%:G>:N=@T"b Ʌi\;WpmEe:u CR0a~WXsc}drqvoJ,To2!#[}TtjF6 vw͒Jڤm;ݙFԑ?|+ޏ.$QTHhnXUIH\_1eU^'om'[}aYFaQT]0.ަoCG-Vk8zqxPHϕϞr#h#U7͓;Ȳ6ɨEDc++RXm]| sji,)nݵvarٻkvcoOzN8 0= ?X*i&c+e'jh SyCoӐ{`rxmIMݹATQA)??|jydpD)* s})X0e+ȏ//-[A??ޛhOE!,invw ,3KtX ~X֟e}<;?دSk'pk[Xؑ/4:w a7ݳIާ]UOݩ =CՁPKx!_@|6|VA-cşv7ޏBlJTD-S%Gkcjva6tqfT~qC[]@2bDR [݅<'"Q zZێܱSB4U/ᆢ~ly9y5Gu÷'d' #)f*y[TK}Mƌ6YNX( ˔mN U$Cql;?o7 v:~Y;Ox>j^cL/񂈕-rǒY ԅ Oxyrɖ1lAAm-RJ 4sssA¡˩a@b[\2_anxu\54z虉Vcؑ]qs.24(h}V6.,~'.hؘ#K*?]qvOezݐ 3)\)ޏKWT:2Jj9z imECA RI-B+nmm٦xY{pk᧪g&w8 vݎS槣*?ieTq>'GOQe4i2` +M۾49/ OýS[V<KMGXikgCU2̺݂b&LѣF,ĀӖ5&6+3: k=J@&Iۭhc%jսͽ\*II3mkoX2+8蠍5wvr,ާ#tZzm>F0[xy?oK+rl]Gsث5]῿fif^'p%=I0rsa lNj{oف(Ĝ$NPV焖[| 0q3>|۳^>|*Yi~,:cr7>O^;;M;J^`VxZzHJyX=}v[{X㝹|[__]Թ]CC/<DZ8:cEK I4c1şqe~3KcOGUK!*놹e{ysiԂ$wt"̧ vW{fvu3MX+Ma}VA_ M$2uߺXN8re5Sz2'7>V8bT0#8n9JWA`7z|!5E_ozv ukcq(ZZқ)c%*j6'$wRow'؎ccjG+pYML9bEaKK+lxa%Ċ S~:Tnvp/͔+ #a.0h^|PzbIV[>|kH5tgǖ!#*/|;3(S4P<#J*yGV0+@,=z R\"U>aS4f,oʨuV|*gۜOL'ǰ0-0ri3WJ% 9ؤPLTvê8<]2,Jw? 6chfF*6$[or\PO]KRHhmmYJ*=@OO 릈d>UU[nlnNހm5 Q:VӨ[05'B_ ^oJY>fl D7lW4kFw㑽1O,+Z?b9aD:A.#o熢ÏX)e<׿>%X%ZfdPW[{`ppp2k>a=LQGJ _ %Vk4lM(f .٭Uh"Q=ڜTY Zc,"MF(;njFBKj'}-rD K2ؑXmbH7۟?p_=$[aA.[O+coRnJ~"xJfy/aR)Db{g$Eb/3R| lԀmK0X)7;w4/쯊rRGUt*i؏3Bpekyn{ԭfW@'# Ȏ索u]tw9&o/f9Mɥ~o~cG68P Rrbkc( ]mwĆi7;-&넙1"y{[{ᴒ4{eG,̩8.M5s-.dvY@o,O\id5D Kj~wv]fqÙM_D1=Հ?,rJl'G+ӵZfQ S.-O-*3 SqtU$NB>{~Xa1RG-F76ZDpgSe 43h&mԆA7>5eHy^)7@=![= C#2' gk$jX젭^[gdb,5qWP6bm0R.1UWt =0d*F (st􅢤QU/"s3+sH,irI&@qMUfo.ݤ7t4yH >؜<ISO]rŽVOǰ22 P2̢ Q#%K|#d$rwbZB'*L.k`眕U}N=)\`` L9ys?VW!Ack_Q%c0cbysB#s" k*Qu``78hAȺ{|H8+c^W兘 IoۀH<[;F⮤; .4kf2zuST7 m[a",S1сz@]A:\$xȵŏ<Rb` Ĺ\X|k ,ISS$v,6_EmL/̍RG1c "Ex՗R!`Iޗa*8KROnx4RJ@;4!S$E,0NA+ɪ:Y$#+p(ēZ-k[L6e2wF7&|"ezdXJY ;C|=` -Н6Ä A.,Ppt~=jH GAI9 {3y^M$(Q$,DnYlUzwߗIĤk`vOK+Eq A]@b ’1 K]AOLzƧ/r@n&Cu mKĤQ 1 EWZrl4Z {c1$14ꑂN鈌s4vrϰchD\rX6V6_n{˥Wr,a˟KbET7@;}I.uXEku36[j@0$m߉*6PC 'X]M;}~x$lAe@mZma}1 L%"3qrߞfѬWc@noK@s>nzZI"-́jShĤ.4)#q{}A0:4*h򁳁IO,+4kiT0K4Ok?ىYY3̅㕰$(e~XX.UpXfꍀ%)ϥ}1# gÅ=-3TTb[mCF|&Jb %oއbQ!^ǐ J$B.Vzn(kJ)i R";7;qSyekEmoœؒ,K^<9Sԍq,YX<n >xZ N#+:䃨=ÚhLB ;ߖ=NONӒVRwחX)JuyO뉜3ԕ" <FJYei/c\C!ei"2I mq,1W;km`I *1P!sa&`ċP^6 '`@T齭˨fuh:!<9M#V 䐯-fQsnGol2ԭ͈#v۳G金5" Ö UVZ' F7b@)pEnCϥk}&z,5g\k`J89E9B/RG/\KS0Qcp i$O;[ -vPAoGŤuR5e443FhMՁ be4X!#˪N M"[1@_u)y춃:y#<.kLhG1Du^ jjo2IĻ ,Y F{!zyRx%PʆE#v8 Ͼ\&r2304ĎZl7yozᬵ!z[%xr>в(M1IBN7wzs~~.̠7jݎwlVL5ZIPEǹk+-?,Ri2-m1$X\+Ix\3jvL:lX~v65/[صs,NpGLfƙ.&@(-F \7;(GgmOfu¬XYYh%77,M8n}qennJF 4Ԍܟu=%2f RFoc;0hQEa&ĝ'R"yw2~[)[1՛s׷o}#])l=M6YY4f@9ظQ_ !`CfdI,'Z?iPz~p!7c)ko %3遃sG% a=5-7%iUB7 Sr<;\']PejdRJvHcz(7\m닓x,r e|HU) `=ufNޞ2eTu5[X<`)I-oKn{ѯ`򱹹;N،wc`)ÜhkYbh[)`tf  } ˶0i4`M nۮDT 6 EC؀[+ ~:/#lGO2U$10Dn9;b^Cy 7}ѿ (lSA{[.Ѡk){傴Q0S}?NŔ~~[H|_oCyp#<-cl<$:TLo8F5 5bBHؑ*fP4n^5#1Ps|&W(A K,bRYm*C7omۘ?# MAcrlwp(J!XXtO @$﵇ǗrE"W.VG) `Jm{f<+h,\.:ǨFo,Hyj&> P|6%J!yr#k~7I%GPzFdm,Ğhy-`>GO"m{nG-cfU-ĀЋdW%ۓ|p i46où .BpEㆭNuRB +LG2 Wlz_ڴ2fXnEž %]Nu^v(j>v`7?7$*@O*/]P"lZ}8Aj 4Gqasb ߟfTe6ī( ".Z?>yQ*ZB EVMઽ[{sIAĞ6#QerI)$mm% h?dA7s-VC M7mhrHaTRuϖ5sORK'y /p5x ;}Wg4Gk[s{-  x9h+s7z`e5b'lGGDA"\EǭqK#,-l=I] BmnGl~lz~$bMC* -bOYi MjACs@59A4qa H&Ag/R0k~J[ ]K }c -:H?>5e*t7#n_#!!2NGEU7 iĩ.3M^ ZIjHkr+G 47ߟ>er8jJXk-`X`r:k~*)B9 P,,kE\pH!HhQ;VǙ uf:vl0ʶ9-} K vr0Be0 _X[Xm"2YFyPBQ "ȍ ![TkXF*M/LXL MN;  :8i 3UyٷbXS IÊC`m_\cڮEU&["4b2mc"kG.ѽu'߇D[>}=Ǩxg˜qʺ'׮=S l:ۖ5ϴ^3ʚ꤮b,rU@ w_R;3$,K33\9^^2FQ /[t׻}WiӷD3o=j',G:kؚjj͉܍{t=76bl=F0vj)zji)jSG2a8Uƹ]HR49^f0M O;|SheOlozaqGU#6{٭$d##0b>?Z&AWT)[_=fmqfP=4&Cj@.BRN s8Ga%ƙ*@ep=fyflQ%p؂ƿP9\5U;p͢!Tqs8$1ѨUS\NeSV}+cqFM-| bZͳZo%F I+T |ocloQΩ %YI\:aLr}#o,ABEHTK ѨB4\ON̫"vo(4JEs޿,BI:H-9r_e.tmE*8,b+,-~XA)(HRpnn6OFnnV[d>2)ïٚ54 ". I+XphEQ I{iu(+1rM%W8vX2B͵.?2̫|"4 k*2@'to#xi+k)*VJ{/kzĕLYֶkz{b)8=C ,@]Pub[p?.|3T1z!y"D(ORpoNJ.J(& ґzfƹ}F.޼SP_;4rIP6!?5&7U`)uY(6͎X_QR){h>k@gm7Ϟ)::"+~۝ȽM@2[א"$HbDNB%lǐ;Psr]*"A{3잝(qM`284obw,I&?V]q;FK%$4}0i1ܒI$qwꝺ{Gۉ/Wk⫡apGE떡$sw? 9 Nn&8_Kdk_S :[:]Н=-S]^t{gԋp@sXgHDf .J/0I NlbB_[se7ര}1FKS=0cؙp 7灳1RŎ1ñ \lQ#n0u[ IXHñXl1G)x 6ýU# ƘQw#|K#|8/ Q@Ddal +e)G!~xCk|p3 Ʀ`2܍Fѷ剺zUP-l7po8tF5[Or J:a:Tbz[uKcb ᇵuu;XliEj$ҿ]~%釹/M{ܱ;l(Hњr|Zx X-Kda+q j#.2ZϾ2i5 ŀe[l-O'P0F5M 0`#JǩċE#6ľfm`G݅]ʍ\\8[TT5ߣ߮<(H8~# A"xzN?kH@$_`bpzG8A`VPcpMzlOC0@ߕD] %L`' ygw$`гLHU. y jmodk%W#{a+`l'#cBbSk+^aqDmwEIHFs? /-fAn_لn#[=tY$:j!2.7:}qYM#x*ϨkQfD}K!܋u2dfbpgd ZJm8ڹ_[`7`T3_@ n7b?l;mp??6f) ko1b@_k$NuϑxZL)صsĥYx/o~V72 5ɿ<(yf+vؒYE Si-w<Y 6B{mcM*BRZA S]}}07 ^Bm&la#(mO/L|$ k\vI$oV@+3׌pAb1 O_2r熵BmN)RP,G?]sHU;m_\?Z -7牳v&QK5 nFer:)A X_IѥVsJxj<6T]?ޤRJv'f8 KhAHX:HZ\ e>:=9m xgH{畽)F%qftv_uIJE. {{y,b@$ o2DQؒN(hCnC*IKY"\LӐ P ' ?fPaoL;b#ra"H-R`4𘙼l YNa; #7^^lKO+yNm+A+r[)#@ӡ7m*iQ5sZdҗe[2( N|*B`Ĩz5= X|BW/ B}9f,}6o$u1}#pXfJG I' k0(1`GE[aHt.\"VEUPA6a`VۂpdIcm. s=Ku7al/ev'|8w_p@Vxi6<\% Y',O߆#pdwU5_{nXuN8k2jje6$`B2Hɹ^ظ24rebBE2Գ첐j(n@&ױ7^*/9|qYXJ2=H7#,~$+75 |®f$vco1LAI cP[R،G;}<$EU$ G0?{LGw h-|TĤ27$ry\l+b萐b mYL 3:j~+!#B/\;t$h |@#(.j-s\ۋ,׵|y{c E@I0Q$Ԓq)N`)؟|-gu5fR[$VL")ر&iRF8x>- O/ي_f0+d\YC\_2IEKP$- O2(͸tV iacHS2٨*)UGK(R4GEBEWv0T' WNeYPT9o!mW6uRe].]ȁ#.ܶ67ĕ=3Ej<[SVAR 7d`H* !J<%ƙ7FSu}%+ <~.PK-.#G#0*<=) jw wج]l_Iߗ>x*S+c;^eC܂A +"lARTyU<I+4j! ͤ"778: )Z@\m28$A 56H,7<- CSHL-IZğDe .o\X#l\I<-y{TVxDk-6T+v+_CQJplI4mx2:hPA*} ͸jG"1Ve؎V!lFƚnA\\}]_hIْ[Q4J  ]. @E ]+#F@ Xw$ݘr,VjFfB.@?Gf!4R(M8{ra_ MA#k(V-Inrn>?vyHFvx⟏#GIHY=?79›Z(bز7ې0bv t' w`yp3:*9l¦}Pz+Y2)4؅R=A)rD,$l7GNڐ01ΛA4wm5 KRg Wn_pg|+6sPBoCXՎ;ĽV\а;o ƌu؋3pR@逤mGN n[`̏4 +U%Pl[J(#`ERC$EP\7#-kLCs? 2AAa1vm˞#"J\FBBtmaam7iյY?yv"ʪw~x\Đ1`O>GJjf]I>F7 Ob H!; Qsؐl,4\U$FA8y%,!?hηJ%T,&@Tu;qJ(k`d62 Y o`E; =Zޯ-ɗe` ־K Ϳ3|}U|)x}>[% ge3 2 Q>GsR8#M*i$ sz`TmY,V԰zQ~+7#Rov=:{nsȿ\9ٯ/ FEذ0Bp wz\L|LFX 'v,Ip:i\sbq4GpĒlM#=jUN~.f2'fuՙBgH1soP=1ʩɳZfN }?ftنUWJDa%m;cAL{*P8λ x<(%_zɴY)PN7g㔑@&P]NL2m$?3 ;x?>UgY>D(,)F4k*'{\EٟgQڟUC΅TA[b\\K#3|΃,xॉIierd@{wg{]EeC6}R6uTp|$%ڙ.~p3Fqp2sciEKvo%˪*r 뇸9S$_~Jw v;u+|4oe<կZ))"H d#@#b&}%# $8e%X`/t!Ick,B4pvUusHj(+b1H\'"H8mM"쮶Jwɫ#QOj7;jI7irj t6sl6Cq}DsU`~+#8m=U< tmH 8};\l>8qD<"8f"I?v/ǻ)폵zKVĚ/y]s츔uh[݇-),狦9h[jc__];Vh5mdA*P4T]O ygicvئ{OOKpPƎDƚ)Ì|F9 ; eٞgY,=DNg;fa_'\c8ٕ v'QN$ pfm @<ȈHc$HAr,tC7ľ]F┘L;A>WU>*w8.uV$>~n{k#>JL8*Buey1N̄3 ,@-,w_yٙ".+p$ˌ?vڦky]^kGM>^%;x#,{|ծθǺy5QdyY=4P y(ci jDqk_4)F >u;Yyxcg3~,xs/ȓ&'G2G+wN#3fO\3]eyyff5h8꼫ZZwŽ$Z1|4͓4<^4U^=>dMeykX쪪&W{ >gC4U/ !ɎF*Dbľ7{=l4~9kYh2M3}bmF`O56 H?{R<=-wlZΪU,oJD8$[p.'a**:xOjIHyetdW|@jY?[̣m")_2^3}&55p.-% bpjb|cOWvov5Rr28UE5KaU쯴 91*ag9TAk$f䰺؃kISgO|A,<ԕt! oK9$<'˦E~m_A$0Q;pwG8(8"x벼ƙ)IJb8gy' s N@'#VVRdduSGGAG K,ҰT4[1<}\ah_H.OCq.cGYVEScUWv IR(Π #@ ?$Nq vlb_GOh;1ʸ߇3#*EgUSbmA)}$YrS/ݏ^&s z&Q$DT f[q[>u u{KnEyܰ^8b8҈<7.VkZ_Ej\wEPgy}>eOM]RʱȪifxҵ#@Uٮ7owOr_bGH*˻BϸG3%jB ȌT,lHvI؏ϑpNISf:KB2^YA\1vw±GڅΟCV p>rtT Ljh3 _<:# I;$lM&ƕ&SP_M5`[,>8>^5NՎ:GeIi|' 9&YY &gM,3T#@[#s;b;[)+D=4|%b?:3oo  ߓ<=We٥FY9&xdYu` eC%b_;o8:OeV-Ti#ɧm UT *#|k9dQA[=BHq~92r[}<2ҢtߟINi7os|#!E`8 YH7c,oD*Rk ppVsaaj2 <NtzT ԰m~c.l.9[b66߄Rz X_Jil8DX u߯,HE\a:OF1DxV5ЀX[a~"&mw&WmF ('%"VA :ا2kL̂BZm( oblæ.aԬXon⠷d,FzX‘Ȗݏ`K$|{+ԓAL7$ǐbJ\jjY EVfy;Q2ccmIU-Y[~Tsuќ8G<Aæ1zh} In/rw1pes82#f6kj)oԐ|_Lk|U翦!};q&n't1e݄8nxmQ)м"4ib/b_cY*"N|0|K.!y' @'pz["ٛlyz mD ⯅vw^Tka]G<hP/;r7 mh"ĝ=F'C:Co{zMo]D*ݍ:j{{[crvi:b57[<+e4W_3OtnSwj&M_SDh#Y[deI N tV1ff|Ta+(5'BU,edb9(zuKNJGO}ve=X>J捵G<(eta#fV*b1ȞF7j]uK)5N_DqxΛ³|e0*%iw|lOg»s3#CI%B+c {n+h8ޯ8j}: ʂxj]uXY.\xfTAdj$2ƸnE_veR3Ls I@ѾL㏝d\۾nS7gvyp}%mu<έ%<=3.51Kvj9P\sM4L5>ϛ98?=s f5f}D9SOQ2:0llx}v~})+5}ELC$$Z:{w{JN-jϨ0zq]xϮK*.}ZUômKԵFbXFR@$|i:^?9mU:N-\#d`T"hN'쓳3NMHS@3ycK EY돝\k&뫤̞FEG.̬u14{v4N?cǺcF쓁M?V8{q ܯh|Tu?ۧhGI }ڡ{s]O%ܪ i(tTTBF31}]KvS#V_34TTђ S}gcUsf9mNiUT4`I6 ECOdU4Vjs@ɢOOgeqhԤ_PvoA؟w +ʒ*\iQe0Yc8}o s4{Ji".(扃"Ղ7ޫ5ɻtϸ/|㣞3yz!4`fA!mbäktg7d ˗8'Ր`]eWnJLa?=]vlA ˿D.sK?a_$UIM |2' ~/L=|44"|6IULlۍ`J" vgF_qȾ{ۏeT kO$4 ZVP BE8Gd}eiÜԋLKno!bY6a4^\}e4CM ._nl`#쓽gueU&MAHu| WIr~Eřoqu$XKOihZ4&<ي?f?\U޿xઊ2c`}&}Gje)UnYØOEAPaOdy. &^]v{T\WG=jKD)3w V7:׾՗L~;mkK|}NprV 6d1 役gOpmΉ7'ziGO5n~`J|˂roTpwP;Pu_.[ d}RC.dFq鋧e+9xS:6d()'IC6GIP` ?~;Jk^7گoC9/[(OȀq{K{b߇$d˳EU !S|qGi;TfYLuS9%˻q$}m|iis9[vO%eFSNGȠa V7wnݡ},9aH?)*xŒ^_J݆勜;5׈+ws/ݦгē#y}3ES*&Ycfi)>"o<*ZX#ُ%TM1;QN{es|ǧIŝ †V5@~ƗZg5IsԽne[W-MML,噏'D¯vs#åjq,Lc2:lAp}ٞ8-3j>㠉VWH ]ipňx[>/l!^5̪cRY*-wp{L(U#K KрA׻v9LU C5lP]F 9ޑH}(r\ ^ ~mq9kĀuGv?QO iALoѨ<2\ƒc}gd|'_<Gi/|`` ǥI'O6q]bcoW3u={' 2 bG'R+#b2\zaeޓܪjR20搁TG,N8?5N8lΥnw[5jQe}<Yo~R<;4zxjh3ѡ/F$6d fow߽f0؟.0$B5OBm#g?J zO6s]y;[wj?$TƂŔm.2*3L+j0’>Բ4=>x3Q[f\fMT3wd6?Fs~ ?F>nYۆ)*q?ESg}jHTFg]E?`WƼ9/dST2yhUEPNYHkh@=nvY\,qr;}|12+VqgH Zb%#QUp Pp_ ?M4e$!TnqS=vYUGOoa"ߴ<.2Xm^(粐u$cJFo]{A|+50xʥL66w6`؂1zW Süke0Z&Q|#153.Y3vw˫wm웼=$9WK 1V rƧ i'%/shmP5O.vžZmb!e($~x,0$`:L8$td1n8.fjŹjX>ǡ<0{gFm+sbJ0s ⻬ .ɰvQɷC(.[N*D P?bzMЋOH.=vu(*ge<7lUNǘŤf؀68Ip\1O;fzHUk+V}F8X <](ܜ.&_۞(Fb6'h>'5WinYl.+fYd}e5J,/וM"R;`;5~]w,V0o af+2K4TJYf37,O2o}]h <ӰZnDBI&2Ws0VX 9QK, üߣ9vS:/kNz# ;B?gT2S_,l & }[ఛ]c@Gd,X;Zm|\AުrZ 98sh3S@ոYmp/hʺ@lj,H6嵭ϦҨ+]9 T(RÕUF,IQonHeM6za}pV@Zo|!j;f6(sYyhb-16s۰EiUqykOI,ԙjeU HWS${pDdN`kF[3fLOfywYsV5^gUKYWQ'9erĜ@A= I#p/$t۝+[l1(˳aM.[L"iLP A>YR"l Ӫ|ox;nK83ӵVcBSזW(ZȒO|DK\u"($yvXmG{śf4]7uӥ*O9)s8,LsrtR@*6$~؇傺Y`|bClp&RE:tpaK1&۵o̙pm?Jdupd}zEqmuakm{w'FjӍh{c\79dI(բQ*[cw,ڷ~^3,=pE[H$1b+l-q=ϔ~ 經 kok`嗻?l>ieʔ噌4eX FAbAƷk,qaԸXma;w?h:^vg˥5گcypiQĹTTRVа)gA:^i`FWUQM|`WVΚ}}{+W,!N*\5>)چmQ5=:j6]n-{q?vq GԹ@ux1[JN7N⨖-8PVYqc|q93y ]w? x-Ȩ*.c "#5l /J=m̩p]x [q7 fQfbƖ#F$K 1Y㧦.n}sN_-'V"`E!]Ot0֒$7v=p֪K%6ߞ,xg{ )a,%A$$'؏%þaC2j-Nk|p=U<&~8J"n 8;c_sfCsnuGp]WÜ&z>IX1:A-P2 ꊀ#7w`|F܏T1:UÌ)s!~9Up#cَj%t9!_#m 6tmaSgX^Cw&)ɻQϻ &.hcLѰe(uI :ҭoA1pvxHFg$J\_ SZL^*5tA@;omzyxw~Lv*GC37j;9߉!S_J؅#Z & .B$m|wgaYvwU=vgO%]]LnirK~x:ۨ⪀G3ж UGƄ<*rd:btvanSôXF8wGrb6j)*+XF67zeU[0o BT|cQGȖbzafB(1ʾ̸χx-]u6a|Q;6yX؜XK)H]H \h܎̻v-FClcEs>$CObv"; =_Oae/5'Y*IMSI2}aeb-Blې<ɱRCO!鈚eU;cӸ|{qFc>l̺l7>3ROko$MAI[UBm$AZikpa;IޗMԲy9L0NK1cv+ٖUYw@9nDѻXR@%vV%CH7>9,fz`|ۿmCiqS cT};qޭ FZ5qF!*g"2龛XyB)2߼8k$`ʧO 6ۮ38sB)W_)^ܑޘ$\m{i9%4ō؝#vٯp}1JhQu&ͨl9#<*ͽv8-", ,N?Qz%k) evOՔ v8u%P`v~?SYek˱s{yPgaBZ"apyo vb/lU7f ݊7u r/[iQ{3q-c6OYKiCHյ+:ݜU+'#IX#<_?qUt5?Ô*2" ~dJA%TU,I/}paǃU{tLL/^"&s^(4qO!(nƒ qxKHdbֶresc̥Qr GOUtJ/̌K ;mYu)1 6$ s|zǃ U}7u7R=`|kȧUPdmw{ pmcܐA/m'a|VwE8E<2ߙs{l*[[ߑ6ԾcmhdӨ./X<#ȃ>bVSn D;@QapJ)Ӭ7[H壑3*n?LUyy{~< H*DJ=`O I_b9_9DFʧki)guF/ǛIB0ɨA7mlBL?377LZG7yJ3%Q62@f {}mQM)kΝKd̛H $zu"&9/IۖU R=mɓ /| f:oQ;) 7K-te,|m{h(7IZWRT޸:̧S1;m3j8pD-A I@mF666&װP:GCaBM_kU :.,z UJ.,q(L_ r'&I; šdB9bPv{nhe#!@ßSөkyÇX"?]oϦ[2Pv wÙ*\i3e" b6H?XE|՚`wbA$)ȓM1f$)^9F[Sߦ 0c~fز`HTku#G;o{)%OPŶN?wk[ N`xt\*YJґ2j#~wdpÕNXB-a' ZHB߭%S%IԄ)lgO/L;2!؃UQu.3$`~^{lȞXSZ-r@r-q1+pTvl9lw'pFU=@vbBm3 Kਭ$DfcQ xvG: cm@؎{~0b#oǮ*nkm ƂY b0cs|*_I D_\4! RXUmcqkbFmDl/jm㥿T7"oaJL7 &RX;Ll 3rRh/+;mDZ#|.Z$Jy_L^=?JjY 7&uMG":匇g" S] y:ݞTA8isk/L yō-RO$~#!mFnmfhՍZ ,DҾHЋaq7~Q \ô%y 蝲G^YHRCMzn_ e!#a.|t HiX"Ms*v$G%:b`H/lz!%o`pGAgyߊU[3)~x#{n:Y AMNr+1y6܋rl 0ߐ)RHb6 X.zR0VØePI&n)pmc#E@8.f통Yp,NI$,"gSȌJϾke2sR*7oX0 7_ߗ\*X@ rډli+Im'Lڙ@"ta,sq)#k]F8>פ(l9 XP꽚ߦƔ_܃,Dem}|-4H ?|t"9`Ri@or,#KX~ rkn[xbI0i\3M$Z 1,A?0.eο>2݁ +^p]mq}^ŒYoa<V[0q-KRN88!HH2\ܩvs꧟,PJB = q<u lᴪ(kw]qQY-Rs|Fj=l1q_!Q$alQQ#N{⑍c6&kqy6i8BeH`4%hغk95-;f Ėґg 5ȄaJH2F ;ib( t7*hd0g0Kf>Sb-yX[ƆW:퉩Qxd{]Dw{Xi0Fubq .m,섈 |g__~=DB2.m:` ;(a4@E;Z˱\*nS1B]HxIWN|GT)9|5M*.M\Vr*B oRKH->s[( [de,,09WItj=EVC"a G #) \@Ϋ،"%*dIcJ6{ -U4bͩH aPZj'D\Nő*j2+04ZwN܂m{a≼QeUV($d[K) k|{S%u̜R'"` 6Ån $@bLd >_!25X~^`QC{|ǵܑkoCdf0# Ka?6 Cocrs|> SԂM`VF=!*U-p@kpz6oq{. icCP ZLQgxt Y$ V@A cbvg| F3{~8?֍8gU%;m뇫Nl'o\zAMl!#o.|o+60ci`=@So[aR!om0O_ }ܱP)PXo8X6ea o[{>XPNVmd "ܹ.we{7NŐܓSPDzT[\XAKI9Snya|1xXJE/.\-$d/C_lz;be$0;oD")?dr1G+-n d!:`.O6&׷%!Et6G`6mCB7Qx${bł68PȢX[pt~F-c4LKof rvc]_d} Q" @V,0Sy3di|0O2E S)/E-_m'nL,Um`[ZuԱ녠ye-``$q~#&P-nfco6Ӟ'n=vq#)! mp  r8s$SZE8lRj<)A>RaYE>8Ru7 X 7 |wt#0u a˘8n/e u &$rؒHu"f+q{"Y`uX–D&HXM'Y*Xkm4ŚpϦ4q}N|(F!GJȵ; b^aO A#R-@p!5-c$R<$a8f#LH[>qܹaHaӧEF=A&r,\+]J+\lF+"Iwbh&-e7>M7T `}=ymQ* &k'~o8R}Ƒpg*6M©djMc)F{EXlլ,9}]60RG#lIX9 Sת@MR]T ?3aŚIbI]4evǕQl.m_/~c *6-rw]ⱒt u|5 MbW`.H< .wordpress-org/icon-256x256.png000060400000015254147177171730012056 0ustar00PNG  IHDR\U0PLTEGpLHHH(((mmm$ntRNS@f*IDATxڴ߫]G. f@>B>ax$Z 7-ĆTZZc144$ >lA:̬u='{|wY{ٵ{NM*;fL`:ѡӬz̼Ml]nI~1 2Y@NN, PLgiEwLBg]A`z e U TA`Z@ђ&)NE)9I& b  ;KH/ C` IȤH&-(@wLS6%x:ZPBiL)$xKvB\(GN`LHJRp`Ĵ/QP9ʐ'0-$geԒc* t pӍԑ|HCA`Z@_p !$i)fM @H`vx\ ȁN_xHRl&tNP-% t@ p-W,)':tP ɺ$²Dvcvcy*SXmmg4XA 05 wƃtjTJ>47A~Ɉ $NhN^&G?>+I +c 0)A@-F)D'I@@ J7~|v)| ix:21*6!0ێ5=k 3U%,%jӸa^}:#7#2p@mAZ@+HFQ5  w-RhdF{Li`^NE\k'oS&HrA*(]&&wkt2T_Ά|RmPL jlc#Z]1A BԀ˄]ޑt N S P_^;>rdn2Ѿ-Wz wVm:䗯;1 <@W+x kInB͓1^zl0JoO2Vr@;ᙕ u)3"Ϊ>j%QH%h1p2C璕L^l#Zx䵡ņ]PLS~ my|C \MuHnU] ?21n1PTH_c | )ԤH!7 @B`rtB5K@6MA~LGR/b V\*ڏ6akae9U! Az X%a2ܡJ<( A@KbC$JV?xC@G8hdBh,^&$C^|s+$xsS&y}d_o7CK>.L)p{ME /CU]8yb_^_6B"!RJ76/6[#1qt%#v y بn.:e8[\^e ڌvC@J9߆fw< *[T.+GO@/ ÕoCќ9o(vkV3E@|Y|1]PpF/?_L^xiiڞܺ e]}(D0 h زW )5IoHC6V4!C I.JH"ԡW:0s Rk(C= C I%4*D)4v?zh^xt6;D(MalJW^;ܲ{W8l3D3ljyq@;/I}\Ed7p]x]$=Ç*m{''ϗ>7g+C7%X&I_nP*u@$ALiz0 "Z{87GO瞱%#$= |n*nf? M&.0 ^n6EFA`}s^pෲz5n遡iK#gƜ\rQ'8`>K}Z{~8w7! NϹkJ'imN+025~6&Zo׆dnxaeRI5%C^ W1[ "O~'Ё}p- ^"{wj6ƽq%Zk?G=\ 3V~ ܸ*cC_ZO~ ~+{pv~=&B6E=+5A@B|s6^J*O-\=4#HixEѣ  wPލOj

):w! Pr W{Wx/=7Ͽ'$c@Ml]h;~6^5`8O:X!۱ [ ,@0*n Ðece[X0B;ܧósa(  a`n ^^ak|˘`P(H+1肭MJ楒͂'2mZI&Ps(B܋ ߏk g@8d$7T{LCh}~4Hc$@h1_w{ pga406-Pa_!0f˱f ja|>'`!0#e􍛍0!!MH58_<}W*|?XtP;+/|8aWB5I+WAwXb+IhX@n ޛ1*i $Q߼DO~A`d *CeFs _ᆇs`(yJ`~ ퟄ #Vb}Ω9{r~G:+\gՁ/CN|P/Ps ' CzkƷ32ϝ6j-F-!< H/8Uę* 'H0 py8dsH3ٍ0y "R! ޯ8| ~["pϏ%a!;>ObB!.,:w#ÌV{qYnD&O>o\i 'pI~.4)憡j8q=wE9AG)Ka7&)(I6 >Nk` jhYG/!,:r='sC,`r9V;D3m[]cK[7wxx "Ky'8 (=AkC CB9Z-ӮX48w,Hòӥ3ݱg-? 2&?qYkh.wiG煈񡟏}*W("/p+.~+ m `'jl "pH />fU $0ot)Y[RקK4 e 2`!UzOSW/L&`a~rNk'= /2AL&vrqsB< *VF/@Nt&  |THoٔΌxc'u8gF3zLI0$0O )"i#<5_"o'6'aدe#K1&D @ǪGxhs^pDsЀ4OT_Fw 󝟼4y Ο۠ _&| ~!cդ{#dwlc_0Ӗ`mlhT@u(4Yɛ_]>棗vUQ3B_'O`PFc>Q'$ c ~ATOo)c 3  $mYy {A63/3 LГy7#$N5Ҍ]kLaf\yavI@ AuJa](l`lBa=6T$e NpnfX~($P4#uI ɐ hnoJH!Svg@  #Ypg`@ $`RA %LBq@J"Pi*wvV`PVnlh!()4!!LA$`% /,"ˆ@0c>(G`roxzV0b2`<W[V`+5J͠]ĕ#iQ@ . ͠( H15JG)q@N*.$ YP22'xFp*79F9TNV lAUM/Z!P3YPhX@E|i xD%@'YF< $ ;:eY'rvzB"0K YѠ-hm+ؓ1P7 t"-7&G`I$%V]c?XA~ giUhXBG;A ٌ@v P^X!oƂ VUsF\}E#]@8A@!{YE f{J Ty,+ ֓!0u~O`ߧmP/bB,Le`^ ZJD<q|>~M+e%| _+ "Ъv.ZzCz5HuͨVwLw5Y$&v# .;}F 4p 4v AC*R;g n2P{IENDB`.wordpress-org/screenshot-1.png000060400000104305147177171730012476 0ustar00PNG  IHDR.* iCCPICC ProfileHTSBzB l$@(1]Y\"eEWEl#mQ,]ED] 6Tawy7̙Νf{t@&D9 ?v|B"D:l0[ƍLFC; CP_EC$ 'YôO(vc~ӹ9!1S5!N!Nf<~8&:&Shf+L1v$Rgʚ- VX I[deN U#{$[)~-YBeU4yJ(KDÜea6/qEP)a" +GY5ّZ)rw򱺊?MWK\IQΈ )rE4onrYٯ\ܻ`;3;^ٛH0)k2# ?;7J6;ck#0]1AȄAR Q͖͗KRr\얉|~<`ΎwỈVTx<1 p8 Z;泚pP! ]' Ԁ ``v !ѐ3Aiu>2("X v.I8*܀;:^B|AHa b"NF0$I@TD( )FʐH%r9C.#m}E"_PJCjN@9( Eh*:C5h)Z@sUځDqSp8;Åq)89n1WUq-[+g<vxO|0>//ƯƗ[N|;N'<|B3Y.߀/WBB4BBBل'C&ohpoa1'TԈSE:F.lbD͊!/zmELSZ؏qqq_MK$4$c$O iZtgXΘ7L3OR%u4? \P!O'oM򄛅/E^XܓR<+uCjoOZI+ OR&y#cFxތ̸̚,rVRq4Ckwmn#{cfm\2dffҰ҆-f[mZVvܯfU[?nmw{E;,Πu%rw=/{Wc_JVU8ڮzg Rzq8p#MG9GZ˨-Cէw4$49X{ޓ'OiZ{z:3geg_K=4󷛧6^pb-ܖ3.qΕW뮹\Vֺnnhlvso]Ϳ}Δ;m1NqOto>xQc%OTf[MkǩNkO>v=Jzz*;=?{Ŵ/e/^V絾77oW}MO>d}XIӾϜ-_ JZ[e`xa @O``3uL=,0⑹{X\134b)/X RGY}H ihiiAo_z [+AeXIfMM*>F(iNx.*ASCIIScreenshotita pHYs%%IR$iTXtXML:com.adobe.xmp 554 558 Screenshot k-iDOT(9L,SS9IDATx$EنkA@D=Q %DɊH8 H i d毷~:}{;39wr=5;NW&O\s;Z @@e CTo @9!@.KuA #KΟG@ P9u  @(\UT T¥*=A= @hH @ KUzz@ А¥!""@ P @!KCDD @*.U @@C@@U \ .  @T' @ \"" @U!pJOP@@4DD@BR 4$pi T¥*=A= @hH @ KUzz@ А¥!""@ P @!KCDD @*.U @@C@@U \ .  @T' @ \"" @U!pJOP@@4DD@BR 4$pi T¥*=A= @hH @ KUzz@ А¥!""@ P6{/v>lHꪫO|mD2@%w{'駟vygY5Xq!s9}K_ 'PyꫯE]4_7|?䃄+\p#\F *F 5q+VSyrg]w5vm6N>lFnYuQnUV=e< @BYg7qP &:Bk*.k2-?~2~|@t&yA@7 HH9~v.O?W3^zef$UqSO%nL @ hi;찃祣J c=pd+{-#:G>Z$uSɓ'qƹ%X½i{p{>0!$@$|,v￿;S+^%ԴDVLqaw:ȭ!W^qᄏ;>= !@gRio|#^fO/0 { ^-gɠ+ XH9cw+(e.++3&\$]wݸm;xg_(?@=U7{fnZ\.GZFHh6F` p/4stE ,g?Y#8 s-ӹ/jZ-:3˭k_Z4cC\2_:bq$<%[KM7lf4_҉oI2Wm^{4l[[o=M= ٫E6*erE[zuJ+Nԙl?#tzIcK-k\EqCFdOk{9 Pu.^x~[⦳]6l&/\t(OOouNOv> 2GכqIwhK^Yse.xL+%Wl dS}Qb4C*Ejƹ鎞}'n%wGu9ْ."[uҤI\sM&hIlż?Im\-_qv>i;dl.q繘wK^x!^p qs=Lӝ8y׿2q~%oQKf%E;uL4lvѪpXuEmJvcf=v5iw ,SErz衇2<@HRKE:R_MMYF^`]v%];NhNp)~H1t~o-wqo1|OW\qEx@E]qѻdtw-PWwtw t@˷@Kv~fa&j7ў{ZK/hmg"cXJ ߌVW#NM˲{gL1\qL?3' @  yo.5F55od+1/|!DnNm6 yE\N6+!?fJ8N_LrzoВK.Ye*WtqAi hQ:,ٻ+ܓO>鼭3Ƹ,z^{wd  T@eX!8x'®!Yii7|դMײ7 KYSM5[;G3<*CDs1}ٛ @U"0¥J  @ \#5 @]$p"l @K9~ @.]MQ #p)Ǐ t¥)  r. .@t6EA P¥?RC E.¦(@@Gj@HE@@9rH @@ \ @(GR!@"KaS @ \#5 @]$p"l @K9~ @.]MQ #p)Ǐ t¥)  r. .@t6EA P¥?RC E.¦(@@Gj@HE@@9rH @@ \ @(GR!@"KaS @ \#5 @]$p"l @K9~ @.]MQ #p)Ǐ t¥)  r. .@t6EA P¥?RC E.¦(@@Gj@HE@@9rH @@ \ @(GR!@"KaS @ \#5 @]$p"l @K9~ @.]MQ #p)Ǐ t >Or=p |q|gq67_}UwW[1~b>yw݇?ᆭ4iC5X}Cj.:.y T@˯~+omfus1g {ƍWK.q'N a?O݌3׿"e]֝vi1[lᮼJRK;/pwgYfp?Z^1qݼsusO{ݬ&LYdZkao){C馛.eLwސovi1)L!@:*%\4(vmnfpw_v -P$}s9/;#M7_p-rSO-=u,-8  @`TJ} M݂ .8_x㍣~μ1}wᇇ4Z9묳O<bW`3.+'7Y$ FXJ얖$*͝n%Gp( $0y<N?*1z;xrK} =7|fW1o16(;sl!Rv#yVO>9yј 8@|qyܢ.~oMH]MőG`zdLx^p~*yYf)/]ГO>fi&7sgW6,Y2w7StMݵ^dя~4כqy[o])_ګL;ST]&26.JherL3MJϪGfۧWK(SJki_t/R=} TjkQz|ޠ]kc>!J@-fm/wTQӯ=W}:R4 k~PE1SO=5hy))Svuךb3NvX$K/tM3H+fնnLJBx+X٦|뮻.y3.~ɯ捘cݔ~1M檫1X)Iy|l\f\y[~X&9^!tU[_~YG.(;.L&<@h~1VJ G4ώaXlPox8/e kU#<g?яj௺>~Oc&bV&l3.$ qSbmI&_҉!6" 7qωDL4Zڢ몫cFrYQ:)a:zuUZo{&GQ"W߲rXpicQ] D4%bRۆ0}ó~ N}jv uN TtpaDmҠX~J=õ;/u坊>TRN:)rǫ -!t 7ԞPu]7jG3J o \̍#4O ^3{2ޘğ7qbm<Շ~Lΰi6IQrXi(u>c/4[ki߲뫙.,'YTvC]Y٨v9f  TNĐj_T+ g?mc~pywFiX׿ x`&8oLai']WN|~]k /~Q kf L߭/oP `ޥ"?O&XpH1"Q"wS~VOqgJ3}NbDП>g>U%+żO r֧²e_Irɜ^]ѬvZN0Wm_b%B:XvZc̈"w;S:rg. )J UЄ:'GN[ GvPѻ#2&6Z=ǥ^^~6m֙Oy/:p  ~Ks{"1g"+,۬p~gQ*^2^8G&v ?_,$u~۲[iW/w9?+ҙpϤ/Z*yby7Tduٜ?PygS.tHKaE.Np,*! [[ٸس]{~ t ݌mPzk.o 6i$fj \Ragb=n$l.s ; m9lD,ϋ/تiyDjA[\sTXz禢[XţiQvʵi6# %vۡ{ P@e~ԾuӅHw^Xz.Dy#V5  \WdNؙ1'qi.mS+3.f-N'BpJ/huﴱ*폵m?#bTıKCR2uqN:7sp-Sь˥Sտ]<Z$E2LJ.jo_5Z]ZuCh7Gi011:tpU-SiJ;: Vap ΔiOe02یpQ̐/@m#vg-ZӌSZfO7N0Z"gOXk FҲb*Z G\C\K"$Ra.fK?&P$B}$MqLIo GHc~gEAX2r9LDG?9?zyɈUi^觝/U1NМӮFk_ZH5 /SoWv?GkQ\=ܢ,3iC:YuGBH s~3Nuy[o",htkG7aI@&l2N i㡣?&L2rd1SOC RoҖJ(.(zB@YPv'ċeKwqǞk EY \(@tJ hGKO(IR !0$ʊa-( \?k6DqݏU!hW hQ"\*1 0LRҌJ%¥{ChV4o!\7i   FQ5# @*ꉓzUX2t P@VuܗzrKבS  @5x8+¥zBȋ'|r(Y \i4 ԦVi;HW &m #P$Z(^.\!@#-h-6p @""\'a/ }H  @@F-FhX >\!@ ЌhjxAXs @+Ū:lb= C0:W@@䅇v!nUD͖x^ҧl@z̫pjP/@xc!4"*u¥JA] @`;Y R tF6-6y6*nP @:Bd@@7 \A2 @KG0  @ peʀ 0Dt܎;Xm#ղ+GR.B@zlVwV^; ^ WpC@# ˴Q6up \oi hW|'О@ =C\t;=6%ɓd|o?j@ "# \@#Po H~rFDah \i8 (/-y"<@Q:NhY HpmD҈ Q ,E;!\i$ jґV_6~%@@ p@@@MWQQ@.| @** @… @}C7]EE!@@ @o \( @>  Kt @g !p雮  \ @ 7.}UT  @¥oB p3@@@MWQQ@.| @ u\}] V{??$Yj[I޷q_}UwW/rn9۶Pq@hLrwO?tage7s|3n%pSM5Ua~wyCշ~{N;Ԍ?nE i7~ҤIN+;4ޟ'WU7묳?|'T3t,L/C 0*'\VYew6lpSLq>{#NqG^ \zI!t@e˄ Yg5;1l 6p_|כ^ >;#űVotAnho7|^ \zEr!@ ?m7xwJ՘mSO7s/^zi\<7 he6+\T^x>Nk%]**.E.?2 % s38'?YK]4@L'O*nWyaP[{VSN qm)Fm=W .`#]}1؜|5c%)ꫯ^{G5Gyf(ŢeV7kgi /Y?3,Iu]M8qbrȷ_LՆ#c=0!TƶN|7l<0"x#/ꪫּ@0kok]b߂IwX:*]vY寊фK~V*M= !.?я`w}.dMb;Pӌ7 b6a{GLTh/.¯̭*߮-1?񏵇~8Μp 0Ikt^ iwQ{衇j'tR&OK2oya.~&+~vQ;d/r K.$$bq ^s_es&$6k4ҌaR%-cNEӒSޝ~̴gu g1Lcyw]w.VO-.JޥK>ocppIgnEˁ1n @pIm4=l_ۏ=Xw0Ŵp) xGǴX6mtڢs16ˊ+rG='`rEfFRg*\?V+%ђ克ld,/m!}O]êQt p;a@?czN0fP.¥׿Km=S _5ڀ  _^1Tp09ڗIm\e"-RGV2./q!#]F 9#.{W`"#$kG*\g^HXF'Mt`k".~v,G0uֶVvmY<4填v!iITh @3^زgy&E"2ziBHFڶml'nprvmgoUz1-nͯ'\TYڎ].cǖ!@!ڴXltE Ro@8E9b P1yboֲa/y (-2ȕ8qVpЇ@D`4bU \ P͈0>W@@ "Z&^.\!@=$ЎhxAXs @^xh6[NlYp%}ʆ 'Iɼ1  '0Bc,RG \zL .z@@HhjҨjcg2peʀ @#.H& t¥) @t#@ nP @CD?~|Vyngve)U W¥r]B /.&:tmM2IpA > 1pL[e[\epA vGzH KS0 %_QKGyҐҤn% 6.@ 1#H H PDRD?@zK@*@amV&@ or@]#P$^#ZDx."p) t@Ѳ=ڈ¥!!@RY:v(2C E7H@"`-ZAVh @?C K+ @@O \z!@h¥Zą @.=O B -B Sp@Z!piq!@)KOS8 @@B ¥) V \ZE\@zJS@@+.". @=%p)~  @Vh @?C K+ @@O @IDATֆ DJP0 bV (*(ќbƬxŀ9aYb1_b (Hؿbٙٝ<]ݕf۪SʍmA pIlP1@b.1 !@H.KrۆA #p!@@r \6  K A@Kܶf  \b@B \ 5 @ FB @$m @1 $%mC @@Ā @ .mj@@%  @%pInP3@b.1 !@H.KrۆA #p!@@r \6  K A@Kܶf  \b@B \ 5 @ FB @$m @1 $%mC @@Ā @ /\̙cfϞm7o\l޼y_5/_~lQ&0|,RfeYg D tM7Ǐwr˙7>fp7|=zt Guvmޜvi0;C}߿4n߿ +Stw>0W_};?餓Lǎ+?SO=eW$'ݻw7}͘Nq|=tZ L͆n޳VZ9 Pg$N7~_~ Q闱7u:32*'~t﫯r9sGR{̙gYis=u]O@,i7S[u+gjjԨQ3^ӨolwM75=XƸ2PgϚƍW/a[tZ!R rJ>䓬#/$W^yuw5ħNj:uT!ne$@_eeYLoS=84>񑺰_'b: Hplu}q+"O__=z􈸆>zdw4m\pyM֭EȮM.]"Avu|ɨҽ^zg'x"G'UަE\?իFBQr/DUW]5Eў{}Rp6m M{^΋.f2 msj+뇷Fڶm뮅_E#-={!駟;{Eu8SquSNI,Y8ՍW_}լQN  eeeS=嶳tlUJotߊxt/F%/2Jc$?(F . J׭[r뷓.?묳8v#~Qo&UйirQ(_;U5o_B)SDYY~ Æ rXȚL5qWDd֨V$DRx/Gy><-ϰ^vڰNQz=_z_VD+{2%@ ALˠA_vT!#Nvmi+1Jة2u6J3_ŵ>2 ,Ҏ)\JT7/bvVf$\$z^XbG\$VBcS,\Ν /Lb'\e r@NHp /U;]Q|-/LJi8LUH)\T_֧& ᇾȴc(\H_'bƋ$v) g)孷ފO1V8ӎQ\ r?1cFv} r@NHp/Uu|ז3> a[L4ZX(AV:;暾dHHdzCEI.jw2u2“jdwwFNRqrox>?£O;=@mHpbGga/bK5-o7pCY5_.X]Eӄӛ yqᢿ~7 wI_NI[B_qrCRwcx$*?X(@]!8"pY4 _ayJY|=YUp }y 9:ƅnfge])Tȿ4p/c].;b/)ۉ<#qL|!$@"fGBM?/E_v#:_ؚr/.v.Z!] R8RN=@!\N7Hvs/B2 E ]@]pEk+Tz?BKpsg'!G8#X /:J+9 bZ59*FCdUp J hz'-A-pQM9iy%yuơi/J;Roʬ~ѤFs~iA8%q1 @ &(/eMd~1~ag_+pQyvw٨ѴW=Ze< q f1tUe*.>|K8ݓw8bw,!8qc) a-UT-QLuOyK.$J< @]$-G}Rv.u&Enun;Iqu5+no sL_o[vvOӮ]LI\*[YY߇A}2@wv >ˌ.NAD2ƅ쎵fVG4I2=R۩h{Jʬ.^U6Gp3y[Evd*~>p=iG] }:AOFx czN+ܖ7-gfcǎuߜ}}QWfW'T>3nBXgV4F;Ve{&DOG Q@uPTIesML0!M(ifJ㯅αላeцLqO<'i7~ԞY#.!cǬEُ'Fmn2W#iDSq 2 )W9U{N>^GG\lua:aer (1ErmOK@$jѪ aS>#q ;0~ O*~42 =Y>eɾ>>hI!9f20?_[o8tV\dʓkJI QSE!*cGElꫯnڴicׯV'v3`Mh}QFuY\I&M ښ2Zr%\ݴݰM TK#@`q"h85 @@n܌@@B \T . @$! @ \r3" @ !pIHCP @r@fD @Bᒐ &p͈ $%! A5 @Mᒛ1 @HKBj@ %7#b@ 4Հ @ 7KnFĀ @ !. i@@n܌@@B \T . @$! @ $JD3f=1 @() v+t_%s6kl2ǙϦ,9  @0Z75iݢIa*¥QNrt%܈˜ x@ Pl @$ Rx{Mպp-if>4qӿڦҍPT  8fЋgN6.K ;G\)78;eqC@ Ht}vG]ػ$uϧ=;&@@VpI޻@ @'pI5#.W  @ \R/…  @B.w@@ \RmpIJ !@;p? @ .6B$e K@ |T!\RC@%$]li'Wӏ[ @Xl \RMpYl P \RpCo-U Ŗ%@u%X:RU@Xl \RM4MٷG7k(@On7o^PŤͷ@KT{7L17Ǭj|ٛxӌ)_lMg֝z.|YU!ĉ_U/&mUAh*\A˯&\ܿ9my_`{D;p(m(\k9Ѕ."N @ hdرQU/^;v,xpI)TafE|Ǽid(w3Gݎ o3qj.)%\wa_oݬ5dfDžmw 57:,ݤL"@5M2aRٽ%EXW_t7U)L6|7ڢx]ǟ~;!!C]7 & @F d(*P׽VᒢXp^fZnMM+@?4w]#3N; R @ )%WEFZ:Qb^r'.q;-wK2wn8$ (KmAA^.g~9GUZ6>o7ݤv]qSEO# $ŘzeeejmJ;UbhHqCiAf7Aa:WG'~czv\}%ɜ9sL;?f6}ߜ|q! @\Ht[ %E#?i. 6Z4Ͻ9ݵ{ȬvUwpq@ #I¥ %Tp5k٪kq2G~&n涛o^OK@HDb>q|<"\R4S(ˮGMM_c #+v]upPp@ PARh.b-[U+Y"1 4Hp@p@N!RHbᒢWE=h3Ï9c:a% @%ӧO7cǎJm\t4o<ʫ:O.)5!\iN;ܨ4ҲQX'4 @ xR[LZG>GKR;gosƩҘ\ӥ{owK/L.}9ȅ~0{E2U0J@@#/6GCH*\]l 61fEz@@%pI5¥ξT#Tc#\G :Kj:K}8 ,F.F,Fo= @u%tI.u  j$pIDT[EV "pIEF j$pIDT[EV "pIEF j$pIDT[EV "pIEF j$pIDT[EV "pIEF j$pIDT[EV "pIEF j$pIDT[EV "pIEF j$pI7Ո @ þ_=-R <++++Wm۶M@qņp)yʁ NR8;RB PZN @R4@ P;.ÝR!@(¥h$ @v \j;B PKH@@@wJ @ !p @@.@#  @CR;)  \ V$3[޼7g3oFe@@" \,ƴXfIۙFK7Cnek{֫5ZL㕯Ώ @$p)Gt"៛_N˙kF le٘ sOw~l3{lj[6 =ynf-ifϙg^8lj5]k]1{yU`ji뵶cS[ϒ;2Zh$ XL \l:AWS3?z2M|L3ׅ~2a^E9kԴ#F~|g}EJiT/ oo~ZL{K L5+6ml&YCm-g~sd @xyFYY:r4?>'T \*2  ""pQ }Ǽr_@#e;EtA[nG#9)+h꘽iF!NμqSpie;Ob$LdC^ VI]Ʀ E:G9Ƙwp:oX*"bvELd^w]MMd{N ։:meg?5.iqks7t.}c仓k&K.vYso>L?ݴiVfXߔļrsKNDDj¥Hp`}tsm+~6kI7 WUwfM;"͔5oN[6r摓-Uf}S4mjZ8?/Wd.яJҿۮ``TSlgV#2iL2nzؑ6Y%A:㦸x;l\0krb(^x0 /ny sk_Qꭖ1;̪G\45$㝦5jS̻v:+lmY'Nw\?.4^¼rnOĘqO.v?3ٺE;Bm4eb%Vk+~ \2@ "".9l; }uuQ PG#9zhsQ[F.aGwLe=9<¿E# bN[^v:n͑۷w.v鰂~suaoױE"No|9%=UB.6Ŏpˮnu\5p]7DǙݮz5ͿDQp2U,yvuYH7iuN!S3v[hI6iH(K ./0/ߦ]-~/o}[d~q?^Ӎ߳0]^z=S>pɇq "p)|\iY_+9k};>Kvֵ"OaZ%\nߟyᢩ9v_K--ݝʐi&Āߝo)avvE㕣6:ES]ۑjcLa۵3t_O|l~o$\F,kyT1) G.e~SB~n P.E$\:oin2YC;%=Rt_KU5켎g\2?]ZB,t;L%QiCֹ(5Dgۛ-lфLC%a,J}7ngk9\y:BD8*K-I(KWȏ)t%t6̤_fsCrd7;ulP4)n?QāOi\$\3JHXMv,p* u_kiKt}޺]=.W"Q0}1猸C@M@I8p9}^[,\ѡ!!!+T:<Ĺߠ}oF}1OshS=N!p /=ҴKU- ~/6k,_$hU71|.9z ~!;+^Us-oGw|:ȹKN*Y(mTaU9GTq!R@IX6eʯX1孕D2 =Ne.,2a_=Ъ-m$8׮H;jȘ ©Љmv1δZ+}{qͳtDd5@ ).ED6lÎEauLۜbJPᢼ¥~:m>Nf׆+G{Wd.O˝o;S$W}eZiE+47d1Zgqqu~+|yc6aG'o~(\촎w- v 0 ÷o%RBO#M튭:O)ڗOi-6_5>.? E¥FL+MTL|b.3V4)W>!M(Bw֕3_L!2_=j2Y8~ǼϙVz2~HhuZ68lħa:_ΩZp gõP3Y #+^^{iqɇq "p)[}(S'wuU1/kI:Qo[v쎯)-G%: vW")ۇCh?'a3~uvuqt 7opWIBoWB{ȹU^0Bw@r~d s=E{c. t#OuU.p7c}[jEޕ+>8<}Zᤝ:D#P:vv0_ѢtQ @$eP/utg}AM&M+Z䓡/J};hrw߬9k]$}O# Ɏh$)>ʒb~όwkGͰiyX>& ?.ɊB R5@"p)żab}@4~eUۻe1WG7AU$p"0T|y/Nᶮ16Kyέ*IvVB땕m ~Z-xpr\-&}uĒIvVB9 9ߦ*ڿE'_ Īnr>SꃕWu&?@b @7A P K1H @@I \J @(¥z @.%Ma CR =B PR0@! R=x1CZ@N }[__8 P K¥׈ @8#\JQ  @=K1i!@!pIqF慣@@1.)zb^#BJCp) G) b \R.żF %RR @@!\yH @( K3¥4/@!pIѫ ¥fV0/I @.fKp믿̕W^if͚e5jdN>dӼyZ}$^u3uT;AUp@X \RM\]'4W˹{fV"͛7iX@ "pI5FM e)N:em_~\qDžK߱Ghxe>|x9Bv' @ A.ƨI"SN9%k?n4%!.7?Se7 6™N4e9jZ*VLLȩxf%4-Z0K,Dh95e]6v .h[Yg̘ᜡwӦMKK<'+8g#gߥZ*[J{T 7! K nM 1`+VhJ9O#B2es 7[3k Kh:Jn9 !ud޴I#?lŤ;w9]>rtU /8޺kcJGߟՇu4;^J;/̝wޙv-[,gy|i5f]v٥´w}gn&?l0'[o]:ꨣLv/4O^\IH}qcp9蠃̐!C\lRΜ9q h>p79HK$lF#zѣGzTVp G3?69iN"ϛFʮhK.N0ijIl%dN{E8|Hj.쳏y뭷p3oqAA]uUB S<\wS uP*i+.RzN8^6wu*#tFw5ʢ5rqUH ߉kt(\ѡLbJH(믮S1% '~ mM#=^pjY<腦NSH2v)EdE @ \R PSE>JYeU5K/dO^vyhG .P7Pq|&K(\6p(R޽19uh|w^Hi;[?Zk?xq3fT[5Z$Ffw^p Ǵ M>Lw*L{饗lo@m@ZW'*;3ܪkƯt﫢l]O6- \BRմلIW"2uYǝ :]|81߱z ټwAMHHT1Vy普-bK|lΟE2*Ҵ!Pb}眾K"&|." P.)5%\'鉷~ەۺsR[ E""\‘ԣ"_ve[kjc sWwMWB"!m9WfEHHh9>7h e%+"n@Lj.# :h-ᅴ.:Y2I(sΊfآW6tE(⋮B]jL ϽӭF47M?IDhB,aj.qx_M#ZXj(HJ+M'Q<]y啝3wt*F~s&SZJg0F\ $%%\ӴɪDD:_4l0YF#!_K$O$_ Ai#m*g$\2fMi\IG2Uu..P#  PJmK)_;J*KR[zA%EX/ֆi:d%)s$pYG"FjP"f8@D@ \R.%l3@S凴vX9d @P9K @#pIF$@@.)rB_!AJGbp)KGI B \R.B %R @XlK ̒ 9sgu7͖ B #0㏿MKGF}wͨ {W_T~)\ڰGϦ4if>4qӿڈh ʄ  23c'G}wMͰc+~X8GVݮur͠៛Z.cӍ$$ @d4SRLٴYA۬Qk])ҍ0~S@@H[_揿9R4eʯYsSFUGl@jD˥nlZhR*$Bմȏ9b $q5}J6=Hp +9 @@ĉ @ .m*@@%N0 @%pIlP1@.q"!@H,KbA 'p! @@b \4T  8Ka@Kئb  \DC X6  @ N'B @$i @q8 $%MC @@ĉ @ .m*@@%N0sWIDAT @%pIlP1@.q"!@H,KbA 'p! @@b \4T  8Ka@Kئb  \DC X6  @ N'B @$i @q8 $%MC @@ĉ @ .m*@@%N0 @%pIlP1@.q"!@H,KbA 'p! @@b \4T  8Ka@Kئb  \DC X6  @ N'B KbkH @@…W :C .m۶3 ,Z sOIENDB`.wordpress-org/screenshot-2.png000060400000471446147177171730012514 0ustar00PNG  IHDRVB iCCPICC ProfileHTSBzB l$@(1]Y\"eEWEl#mQ,]ED] 6Tawy7̙Νf{t@&D9 ?v|B"D:l0[ƍLFC; CP_EC$ 'YôO(vc~ӹ9!1S5!N!Nf<~8&:&Shf+L1v$Rgʚ- VX I[deN U#{$[)~-YBeU4yJ(KDÜea6/qEP)a" +GY5ّZ)rw򱺊?MWK\IQΈ )rE4onrYٯ\ܻ`;3;^ٛH0)k2# ?;7J6;ck#0]1AȄAR Q͖͗KRr\얉|~<`ΎwỈVTx<1 p8 Z;泚pP! ]' Ԁ ``v !ѐ3Aiu>2("X v.I8*܀;:^B|AHa b"NF0$I@TD( )FʐH%r9C.#m}E"_PJCjN@9( Eh*:C5h)Z@sUځDqSp8;Åq)89n1WUq-[+g<vxO|0>//ƯƗ[N|;N'<|B3Y.߀/WBB4BBBل'C&ohpoa1'TԈSE:F.lbD͊!/zmELSZ؏qqq_MK$4$c$O iZtgXΘ7L3OR%u4? \P!O'oM򄛅/E^XܓR<+uCjoOZI+ OR&y#cFxތ̸̚,rVRq4Ckwmn#{cfm\2dffҰ҆-f[mZVvܯfU[?nmw{E;,Πu%rw=/{Wc_JVU8ڮzg Rzq8p#MG9GZ˨-Cէw4$49X{ޓ'OiZ{z:3geg_K=4󷛧6^pb-ܖ3.qΕW뮹\Vֺnnhlvso]Ϳ}Δ;m1NqOto>xQc%OTf[MkǩNkO>v=Jzz*;=?{Ŵ/e/^V絾77oW}MO>d}XIӾϜ-_ JZ[e`xa @O``3uL=,0⑹{X\134b)/X RGY}H ihiiAo_z [+AeXIfMM*>F(iNxVASCIIScreenshotz pHYs%%IR$iTXtXML:com.adobe.xmp 1518 1622 Screenshot 9iDOT(~7@IDATxUD1P PP.N$)QTP1QAywfg{7ػ{ww>3gwU9.\_     1'E  \`f\9G8-PC#    VC0x\    \r\`%r#Z     @ XIKD $-      ? +q9@@@@@ +!' `c    B`%Q9#=gyG_y)@M0#    @x crO2a iұ]+yѬ۰!?xRM&y9NޭS;y)ቖ*:rÏeK *L/3 @@@@@  &C[KLw'|&g~:kYml,D_/ gɓ'g~B^I,xz{C+g,=6Y6oyl5f 5C:؛vS|Rυ+a+@ C@@@@[2u9zS-,ukWwaX_5MZGi_һPs5^ #%mڛD._"f ahϕqM7۹vJdJ hv!Ў|t4F'ŋMbolD[@@@@U ܂]zs{hSlj~z's|on<~DW#Ο7Krw -ulg ܹ$7Id.kp矍IE6j+~sr㍩o%:Tڅ JLwFkҀJ'ג&͍2|H?Iwfק!#!ڞ-\P7j㵢:}<~;nwec3X?/vz6ut\G2ugo.όJml=a͟S>z\"    @[Һ}7sȩ;3aٟ07?+_(/W :-7RFUWh!G^̶ԐdҦ7Ҩ~m)l!sYdŪu:]Ȓ^_<ЃzʾdMv@am{\Ҡ^Mp-Vyeނ򐁽G /^hS/4lEeKvo}_tRƘH{L6AkUʔ JNֶ|8xX/z9Znh+P     8{A|t˕+WdqFo_HmӚmG>l=*ܵ3X9e1d8ל# !Ym.kprzB{ ŹO|E_*.%V|WѰB]e{|M61`I2¯ʨ1gΪ/Gf$=v9oF uACsU#)`yKsm^]/'Xkq·    !`EoRÕk7ʞwA׍*s8|6zhѹ2m3f9x}J{%ho g(أY#}Fl,ENޱCXU,_q_aW?/t׬fzT^`E{TJwXykNs_k>s%klo~Fy~3h0f+41hoEL{e#NΓUa̴Gˌ) =V4pg[ kvpk˜af \4xcOn͐ʅ`Cȟǜ& V+F{@@@@Kp V,( Xn?95]{:t֞Cubu/njo}Og(hRWtz2gbs*όa&Ni6/j d^CY1u(*5tQ̰};3:7{.Vy-vmהóo_~e i6ݬ.i UKyF_~9\Vib+~L:Yly(aRvRzyf8 +/ccn{G$iԠ"ˣh:dNkE--_l*yaX3 378xi"9_2~ w-f|/ZDtThl!:m)r>ۧ\7!@@@@@pHH/GdL:kRpkMzLXq~:C@W_#cOw ս&͍͹84XqW{v[y^*XCciK{9 N{P+%g&|=Ox=@}sO9dD:M7dUڧsH0lvX:J,Ar@@@@_p Vtb. ӥҗSd:{[ 9N~Kw"qk_Og((X@}^eJ5yʳyVУ2TիWщ5QzUph 'VI+@@@@[ +FN](0BqSǓL?b.|}`/b!:_N4>q0sx&g(,Xщ;|<~u`l?tSm*z7nң\x<^3PzM:-yVRZ%P|{;rzNC W4:SѓcȈqPYOp=\)7m (Xz {Q>.8;P(CiH7}\< [ƷtGtN G_R-+Is    $2p Vv¥r\Ѓ)ӝFm_`cŗ_x$CRhay,CPܽW94398t= ==63Xq=4V9b9{WPa͘ =|Wf+ xmХcy<ۣfP+zu^omKx\FrwL,y23 پc(ibk]Vey$s:v3lVpI^ h}W{[%K&)!G9gClysy\ 4|߽`E{=u9'W&1oοϿȪEKKդT JR}7    L ܂˗/ˬ9 >TZ{h>}:W[}>lxI jzt`m@`Ej3jdׅѽs{I2kSÕ+˗V:Xp`W;s[(JZfl4Io{gk9OD'-=v!-A=;{e}Z&xdeshnymX V@@@@HbX[n7fS{#˛[=&RpV~]VYetW_jVVC@@@@H X:lD{,<%rKzksW^5d:gtxrS4:iET&4o#̡RJir1پ Plw~{ VJ,fW#놔)SQ):_]1pi+n +!G9kW ]w1O_@@@@bU ܃XYR@JHOJyT\(     X öDG+%XIzϜ;F@@@@ Q $/7E/ + Qq     L`%ۢ#pYfK$Egw&rD=@@@@JRy'+@@@@@bI`% 9  X F@@@@H(+ Iq$lz@@@@ ?  +q9@@@@@ +!' `c    B`%Q>*ڶw׾mkiX.+om. s$}t:V'p~{,]B$ҝϖM*/+ʗ3Fڞ G@UV]\b|"WNyyтsQW^$u~oIe,@@@ X U V kϐrʙ3?RDq4~..VrAiٺU呬Yc̷Weo,UJg~e2g|%zhի{WWH"+iw _|d{1\A׎  IEO…3@Ry'q,c{3q|v]_{#ҬyK ݵmz뭞BUG*˗,7 Vb3}>`5m1TX ho?ȾԩSK^k-4oVzM5n]:ՇC?#koWڗ7O7 J0!  !_ʕ+SO2*OU @㏋rÏ%uTO '`enFOz( ͚Ha¢JHUtnIr߽ʝwf~:+<_M )mMZ9_'O ɓ|jO{MΎm2eJYHb%]б}[i|3W    @ h_߽d @ |wƻϓ{{߹\J"7W-s 86$`Ey}Ir?tVM_|*u6oVԬԯ[G>녾 l*wdazí.y 3L2I)p{|m X/y΋  ^ҥ?wZ 7g@ XU7ݔ&^ \eҳohW0^6?MlnL]w)V4p-2hqy6\5g߶|yȨC4_x?hQ];wf3Xѱ$+UgR2e葑H XcpN  ıko4|!؟!X4Tr譢 .Xiݾo37wnꛯͮV͚JՐ&`EU,#Jviد^_:XRJ-P˗}箞ʛ_LwhWgGQ\W?[nIU++8?   zwc(h-:,w.iĄ $*rŋ1қKg|?\LPʙ3?I]? #̟,~y]so߲YRHaׅr!+j7qh)]=7B0S`:okB ] 5D;{k/W +ok5mצjg3X1zZ־RUbb)Y] Z5{`%G@@F7g, |ϫtNPʢ/S/{wn}/ 4sϞ1M 懲ʱO>oO0ܹpcLЃƜo_oߛqΜ>#zD6~VI.~mjSO˕+W}&u(Vۣ=)_bkW?hvKǮ]_઻vϤ}ԎU4liџ ?hsڬ{\Rt)s?@@@&s7ŋIh"@ $KLRVn5-* *XR8}iQ/f9*W # FuA_0c]|hJ͗1 V;&.d_DfVtRYsɞ.HB2Ø[#+1 V7ɂŋzW8ϩAO&N͚zmֲq _XI׋bEi&XMb#G-u]P- ~>+}md[VZcL;wwk]_wYt,Xg9R\EgU:yN"mۥ[>C[\ɚU柊s 35vu͑h U+L,\= uH{#|Nӿ[2XSԭ]|ڽi<>]oOgC,%)9XF@@@=_}/̞;OfΞ",y/` MtA}VF ,O?Trg7}۫+Wc¬nZҷW)Q|{Kͻo{WQ0K%bd%&n߹賎j.`M |KˌY/+7pιhnC!W_I:WQ}A/R>3זR%KFk?8"͚^CPrJl?wyB6\sdc1U|%k5JV|Cm֬2Gw]{EVBc,4e{+m~N> 40;Ҷc';^z+:[N=E     @ $`e̸ l/UL{,oj50 U r)ѥ{(sG'v0xJ+^!k+]:v0y.CYڣD%t!Z`w(T̙9] j5ɷɕ?_YdL2oӼfCEmŚueHwxppnubYp]ʗ쾗nCjLS'3O?e.kڹ4kȺe;`+oղ;BChD乨֯^厝SGR{=˳gW}{X!X$D@@@K A+z/U{B'eən&a~IY`Iʴ<˭?nΗqIֶH Ϸhy@rg;9 t@/ܬ2Xsh`w% Iʔ)ծ+:׹/|~#Db.wv:tX> ڶV)^sӭK'iڨŖm_H닍as|P=w&M1e֪Yr%30ў :gR!|җ[mpv1{yBe{QR}]xy ;=ؖMY9VW̛=S[39x=󜗌^56lt_{E_h5WA4V9_ƼJlܬIcک\ǓRs*{Y…宻7F_q~RjւWbm>5 wX9ߵ۵6    & "Xyqgo{ buRW~x+}5dP%tȰ &G{(8Wը[H3ba:!s~]T uWS/HjӪ+^/EäE\/|B[>~=jubwҠ>Hvc ݽXz%B5Wtf6nH˷ jcGOɷL6],Z>rh=C\;Dszy7͢yub>!t*E{+qI!c#gR`%X=W4dG7`|~>gIU$hg@MB~9-pKWf^hZf }\`@@@@ ,Dò,V b͢;O? De!G}:o^9pkW Nl./z+V~^jˋcUxhm\Zz],:dVoi1`1>8gG7;tj\پuLFg5 {aLtk;pk7a\ byyGe72|c%]璩YuIgF ̉]] =E'=ӳ\`kAJ+F+֬u]wvұ\Oܯ'XѐL 4o:D 2a()S}טWg ~WsEì}۽zU V<=S,#   a./I2]7m,:߈Wi޺=na[nz57ɽxu{=|:/o VtߡcƎ!˖o=KVbL!-v]v2FojͷRYR2lKp}n3g~2+[ʗHdzte|j^vt:XT^e7}:Nυʤ9^֬X&=Hmݒk̙Dx\u^+|n&t KP?3k8랣(ZwLʴIXUegֻqEJxrt$KRgY8%Ϊ˽ [+G>Hզ}Ҳ `+7"p5`EOW_I:]וS&],Q Vtn'wf6zȱ-{۔(^>wB /s/ }7X2\/'+Jw>^=V|kH@mڴV_B=.D7̷i\ҥKgoL~B5NJWozM>S-\59?~yb3XJ$뼾 `;f[~~w/`%q]$+    "_|)BY:m#-^tsne!77q,]b[]2g}1GLgcgѹUz gUSOKJU]m2X/[Rƌjr뭷Q VB0 42 u"k;֪?/zOUzŬ^^m5zH:Gᄇmv% %go .ŽWx6x@s;`l'>*^/]wy VJ^}D_;?Bjo謒`s$`%:̑]/Yd]CCѱUVU o V f    @ urADz\؁ܳoٲMۿ zTz+ko#F$:/u`Eeyl԰JToO5j[ $KØ-X^yK:#w2ڈ~ *m2&4Z|R/kGwAa̗:eǫo]\X~yiѦǛΥS ,(sr^wS(z\pA* 2NٰQ3wo8+=L{HTpY`+^ft?uģ>NcLӧ^ol7f@@@@ l6XIK7OL%}_pY\9E7X;L?o{]Sq5>sFתA5V忉xMǹޢD΢Fwl׻ԭ]lq/p?KrC'W/V}T?B: KߜT4lTksn]!Pd~_UgYzYSɒ9")ߞT@0B̭͡b3X;u{Z+:Oڕ=" Vl@@@@-ʞJێc͛o;/]8`W~dojq V/Z,Spyw9mZW]d+- 4#Xk^>Ƿho &|4}!{w.=댡.[_//lmon&ΡT, BQX|+\ k=\ 5DԈJ(/?4ݷ_^5R+`ly<[6&qhTjo 3Jl~nݾkYE~V-[b?:,cũ2    06XzIv(7r=YE&:Wƫ{ WG~u뢽9e͒;*>/4k"Ŋ>kB.c)Svrvs3fɼ mgLBGϝ'3gϱ'#K'OI*@ a2oLɗ7*F;w햎]9u)\Ȯޗj0jҥJısU,~ֹ5X!9gt)`̹բ)RG:%'    2XYUe-RYtwmS߸8;s`+^^끃 }fD'gs<'g9ZtPCG=[Ę˧] sp5)\T'6rkBl U4\hYӦHBK99z9U˷WӫWoعK:uڬ= VgiӺtkȶWHև!L@IDAT}މg V^lTt`kW 1ջ,gfE~&M//sV=VJdoj5븚y0=;K    a̚3Wf41e82+}&|/ų|,gϒ; aي2fDnWcjpKU@/ٵa8+z^=Yԉx-qgiӪis.7oVzYe/{cmGֺgIm}k}̸ l*chH0%ϦKd܄o\U<jiߡϬ4Km}z%+X soYb6Ny&,'Oujk]o񲹞7P=^\}эw_^~\2›)gy(eѮ{ɘ94@ J֮`U:ڪeK\upf΢C1y[NҴQCgh-7@6o7hgPv]m^e=V|:WsԪQ]nfWo~v l+@A@@@@X+:~cYeN2~=V~&޵mza7 :^w.9?npҟfe`E~7EoG{ {| +z]: +?=s=_gN,E @?Gr)THҥK'Y>,%[-!.й5X%.w~+V0I,ԫS[nIdoC):K(]Ԩ~)3N<Sϟ/9FW >+~$T     R  64pȆr sa8ٵY{;KqF/6^m~M VL:N<|_8+zT?n 趟~:+m;v t[T$^sjwx^3Բ}?&f6:O//Hvbl㼮nUfLlz)fE6!ޔ V |}|T5{!FfMsʹ^ӝ),ӧ<~0rT3E84+Uwvl3&q<ߢuJKJ9mqcEOui8i_€v>xP   $8 Vt.wK[6_:Ϝhʴ\m7ǎ!C*Vj,Xц?`,wdE{heʅuڦo` hcRJ'aZp_6{TWWt)?fTez]Cc:_=`46^rEX%:izLK2w~C:3~ZQ):GiSǹ&qC܏;&=س }uQ5nhYRFD88&ʜy dٮC Ojw#v J @@@@%6YeyU1^zώIẖ.[9־V'%nڸN} M'p?^V/:/yMrg**ߚo'3f4um:7HLGHV-G^$]{mv]ߒ Z9G MlK&zgʷ}'_ߤn6; b|oO>?Jڴi9g[J%.ꫯM? 'tNo1l~w9y꿹4]2u;; s!    AV@@@@@ X` @@@@@*@      @JK      @P̼" $@@ i ٻ߼ٳI V⍞#   [EO>=n^J= Ό Q?f+k`%jϋV   $*D8@Jx$   )@υB@+m؂   ! X 10G@X XuR   Q X@@ \VIp   $A$йe@J\>    Y`%!?=@)@4;w   @Xc"@@ +)   ĮJzr4@J9    X C5 J>. @@@/@1w @b XIlOA@@@  $ť" )@   ěJsb@J @@@_` 9 ĭJzs6@@@p80XD@!@    @ XIϕB@ 1 $˽!   +a<@ X#@@@J`%9 ĖJlIr@@@J@Y`%G@@@ ) $Ͻ# 0Vs@@@H+1r $)$Y@@@K`%W  DnD @@@J`9, L`%d@@@" XL  n+D@@@@+.*?.|sɞ-d{QۓV@@ *+QQ    D 7mɩӧ=O}{IjU=S IO`%=s@@@`i3fɤӣd|үwOԞF  xV@@@{ V-.y$Eŗ_mkBA@-@?w   @ GOg%og]ݪŋҥcIFʕ+2륹-iӦO+ @ 1~7?_I'˗/3O?ߗb`%,   @`;m%¹ucdvڵkÏ?/+_أȣdzmkI:<+!goOe1^u.\zUlo͐A2gO*dEXA*yWt{[ ]_s T4J2%;\Pe[o[4 Xz~.-\L6?ҹckI.]J?.@@@+kW6z6G.sA'_n]Up!y)ek֫|pCsLd9G꿌婼ŋvt/%.͜6Y*U(oo}k?H~Z6{t&ZU|"IBX7nob]+8u]j%d4iX7>/<7J?.@@@+{ߗuY2gYعk4}e-^ h0h,Y8g4)Wn-(R\4ܱʧ 7IcoosQRfـ$&Pź$P'ɲkGh~֩Oנ ~<ߤ-S+YdV*U!G}boΙ#pAmꕒ/oYeoSvM7j}]/Lv]ɄO?LWyަ z|yrmkۂ9T:V@&,T51+5TxL:[p 曭+qN @@@@`E=lhpuOB`|Rbrrw[+~TQZ5{=RPF*l 0]VgPђvo=)RǛ; 5^_`/^|e/mcFzu"E%{VP)ztޙ@ D%Tn31+5Tgrzccs}ȞM֏kc2@@@@o V4Q}`>   @X ʙ=,/\_3?$o1>F-g l֜y2n$+ڣ٫dr1tMdB3e}n=nzins  @BIP}#Xp׳.\RhaV5XN_8ǜFA@@@ 7:I5XMZox.{'#Tڴ喇v^'ŋ;3ftɦo]S1UF*kՔ'g):<f9Ȉsԭ]K *hmv} f]և3`s]4+ @$\Ͼ\Vnx$*:ik6Mƿ'ۈ W`!3HqLMXD@@@ A X#{6spVLJZnL}>DRHI믿#zd[[̶=s͟t|)ZmFQc VtC݆Mdf%KHV-f>۶lGf_yuإ)6  b#cuT•NVӎ:NfW?fU|}y%1qu^牏@@@Mp@?|%͚>E*/g;6tî*Y,;\/P:}cU]Ϝj^^zk569sd_YooӅgH<=nT:]9>w^"Ff$T DbX $PE ɓ_7\`%Z   DM \?Ge2`0%ݘOެx۰ѯ!qf[moﰏ3nU˗/ˀ!\=ZW?; ]DiT.MR^ Tzo 3nvBB6əK2{ߞ9qOhxIѹQ—nK~3-u+y٧ayhO>hPÂQ 58gjF Wb-TI <)W+)sn@@@ +`ʃMZ\+[nMPevJXѢ2mDqH_p!YkA`E;=L:]WC>|(7XÅmuS& N?.V )o*[!e@$o>YjlڼWW)2<\u9RީDbFM WUҿrEm   Ġ)~h]4!W\^_W=MSHwX~/b`erteu &bIȳ\zIU4#VGek(Tqe/.#Ŋ1*Pq?5\yم_Λ!  dS+XX|!sx몽TnnZ_ڴ.b@ $I+$}\   @Lyuz+:ٳG6lU֭`rJI9֐0I]ɁܹZzlJ;pm{=TYQ/S?# L"XHkE@@H3S.ؔ`ů~# _2F@@@ <]   `)W+   hS Vd(G@SL"X1P/@@@@ H'C9 *`-z!  Z?D?@@TSVLm! @@@ ~+[mŋ;cR`A\]Wc(G@@ 4TѣRrM7luh,͚4JqʴSځ,Jw˂rA7p;v\w{ks6}{%nN.nXA@@ I UR~V}>VB~VPziR/xZ~ Ė)WXڕ+>xOo W5k4xjׇX >+DnU~q7Vzm'ŊK9DnyxnzۻO'{ljwR+Il#ƒcGK*5&:i\(>}eCܢS'Iҥ:T0ϻҲޗy׼@@@ h*tdN>&\wrkµ%:X? ;a9g$X=z1 Vd(G@SL"XZ7X{{Pt,g][y0Z~cϩcN&,;K .r\xh2ot)^X>od=\ r˜`ECʞ_i\   AHN`}")IRIkH{:j$RZZ/<]7   `)W+V +`v4iqmHG%ʞ={.=e).޽{ҥ5O[H;IY@@%grLz$h}͘Z͚4+KP T4XIrsRR9.%w +~2# _X-$΋ݻt YA@@PBR㜩)\P%5R<]#   `)W+V I,X4QԳ=CRxd!*YBdÙ '_uo|0E.XX*$}&\.ZŻ;  +edrgCr-7`ݛg9z++ o+WHO Jqt}@@@ LyN`n㘨àbV@'z>. 0`%?y@@@ CJGUr@ 6C -L"XIOB@@0<PDW`%-c rE!W   J<]  @tV2)W+r   $`ʃPDW`%-c rE!W   J<]  @tV2)W+r   $`ʃPDW`%-c rE!W   J<]  @tV2)W+r   $`ʃPDW`%-c rE!W   J<]  @tV2)W+r   $`ʃPDW`%-c rE!W   J<]  @tV2)W+r   $`ʃPDW`%-c rE!W   J<]  @tV2)W+r   $`ʃPDW`%-c rE!W   J<]yָ, HL"_/&߯['m뗲?e{Qt:̙3IָrvCkwe};K')W+i^   F?藷MIW?q$|9dlo^㜝noV^j^~ eΦDsuER!{^ ۝ 呞ֲhƪEMˉ~gel_+;/+#',=KF߅Z:Aòt\@+4   <Sb=XѿZkɬKem8T^{]JugaWr||Eu#g&컯M>~ϝ=Ѫ=~B[Yrgac6U"+k!5W95~5KH];ٽHݝ`%  pSVNA@@@30߯zUYJkw_Ɋ {ڢ-{oX Vs|T3ɞ5q?xT S*XӃEw6c7yW&=% 6.ŗ U;JJ] ٸcO VPI0`%!   S϶ r+Z.+Ǐ7 汯rk(th/ ]'O}گO]H̕`%$%B $W+~r   @Lyj,+-z^m_5Tyl%GR^Ro=O+:RyEbItP`N%9&-$G%=9Uh>gͶe5 KjEa gCisRMj*%J4~W~JgI2ˊ'̟SJ[Qwa5Prpָ,Rr1߰ZZNT)C_=@֗@IDAT@@@e%ss}RXVh_MSҦlrЉefhx 5.'8`|:w|Ls8+w^&u+ o]j3g2y7Xщurz]~Z/I VZXm{+[cLx5nrG߯Cɕ#L}Zl䦗l^%^?~喿7glGEڛ/(}F/[_x:&BksW+i1ޕ/{_c[_$&{=9^ރY :G4Xy_ds^o2ZcL~X[]R~ONzh;R!{+ʎYÖ *[um>tq >f;jG΢>_/*/}P7\^:d8=^? u;䑆Rع_*>НGA%5zSܜ&@rh E@@mϷ#c샞u:>A_QFj]~YFZ.8o/J7G VT_jpPA%9ÒyB/_H9=OT+} AXiÃuk) ,#ct+'/E/uhj2%9P4ș۷O]/SsD{hf?{\M{W&pə-br&^zn}u˶N𮋆WY*E'Rٙ.terED( *—>w׳ bɦvë3_Nаv.vu~N}4*a{?Ʉo ehb7MqG-@r V׫c'G@@@H)~UM V:O|}ٳng}o>Zk /LMRd~+//ZP=`E{ټ}^cdxgThQT]4XQG0Yep&˿O,X)d 4ܙտTZ竭z)e旧o.O\v/NmJZ=(.w_]nu='V;ΚE^ ۡVJr g\[9Ad^ڿXi; V?3l{kp4IZ>;)}h @|s5}<;[=\rᦾcCȷvr`uMOd93~grAxS `_@@@X02V~.e ؗݱLq- "yO_{{85\pYƒooGh2ξeNIǿqo}} dF{8Kb4ٻ~n C20ֺn){{+t|{X >X}h ԕqsXCXyN"haCJR[颟~)YRw>&|.+)\] WD_.ӬY5ʙ.xjrz8O+z;~_qlip׌Xў+mowuؤηr]ϯCb)r J 9 )W+4G@@@RAK`E{ڞgCg> 5-y=NHĠȥo V=,lSp4k_`E/\OatI,XJ+.X="-_ʚ"Ξ3wLeRbAg:hT|Dzo-kStR{ٻXQ&>@;:%%ʙz*{_miT{rt4D#XIBZ+~sh fo!QB4ڣccoY<՛)VVRSfXSV2l@@@RSk`E{t}f9|,zr5zz?Wx 8Ε`EI@v/Xn 3jywrNt('#K6d:U'Rw&G߽Nf6Ԛ;kNWΆfC2d:}RgΚESͤػhY˙XIKԬz197W6- YlGzsvHω+)]&XIwo4ԚH)W+nFT@@@TS|b-XyrK9V"-/uc/=$VXC3mɽ- ,ቴz%Z=V\&|5z|k]:uX.d&ph=~hϑ'US8âiٕܾmz}ys$=;'>{X=bN8aw2= V9f a6!ifZsϜmJ{v /b [ϦMmƹv>L wA~n`*oUJƷ+:$gXi]<.~p7@`LHCcŦ)`J F@@0]?X V}#gL0 Q͙~םc&/p"#nfd5y[ '׍97蹽kg+ZNL\+g$t=ӐbzeoEE )tnoZ^ axC,gĎm^<ۡuKzgߗgeٯ{x=YJQ9Z$wIwx9եo/Ă8+~8Cc%7X~m!AET\oNi_df#  )~KJE'3tCNyIqHZMK[jCi[B{YO $t.V?X.*GW%i^\zQ|O^]z]N?нl播urI5|o͙՚;Ż3S~3l'絷ǃ-`sL.)"%hÏ-\SsVV!?K:Ysoxgx2-^ XmdR(NRʙzy㱚|4cݞtX j:.j΢.s@>NV[s,tK4~C=_`+Ԧ~)`=(!?CNXC钒`GXj^h?6d|k9,+?)W+mC@@@`Sb)Xq/R=>ޚt=~rk! b]40FT#]_ `t V}|IeE|X\(5=qrH,}h w\HZ[78՝޻}D&RvOxoo -3z_cûb9=ySuznٱk_Aw̙3ɧ4:XE9jYCXq=S4t?o\?'as<~c]:J~U"n+j?a7) V{-JbblC _PK@@@ +1ezn-/^ =ٻz=EWE^'!E*^h\ϫb F.rvjo>wו. Rc5qyϖ{[V}𝧗Bȉ^x' Ș _dF>:yY]o qBk[Bj ni4yײֹtH0]ƒ-FֽaV`E{u _‡J%yޟRt +2F 8_PS@@@ G+\x׹* [_k/ lؤ.%zb$oάnI=4/.~_sy+YC=gJnyfhϜ,gNvCzE+&R=ZaO؁1<7Ȗ?ɦ{Urϲ5ݔ7 h]L[ȴzQ(`J[uF@@0^?(?@ DדelSV2v;@@@RI#XJt=9[0`%cC@@@ Ly<?@ DדelSV2v;@@@RI#XJt=9[0`%cC@@@ Ly<?@ DדelSV2v;@@@RI#XJt=9[0`%cC@@@ Ly<?@ DדelSV2v;@@@RI#XJt=9[0`%cC@@@ Ly<?@ DדelSV2v;@@@RI#XJt=9[0`%cC@@@ Ly<?@ DדelSV2v;@@@RI#XJt=9[0`%cC@@@ Ly<?@ DדelSV2v;@@@RIK`n~աI,embڸ(C+yO@@@0:;ߘ%W@(W4|еQL^@zrE>      ;{߄3"  A VJ  pZ Vd 5}=Nĝӡ`%-ǎR6mbsJٲI,ӡ6%  I8~/Yf,Z>Dbr}kvC"X1Z  @ V c}ޝC_ˡCyƒ;wgJz{;=UtkZ6 H7]@@!fi++Ql @0H`0/ݻOv!N9sʨKڡC9LIb'z*c-UY@@I@Õ#G~Ss`%o s|3;~p_ϒ?_K\,n5ke޽lٲIʕmޕW֮[guq_+.})]ZJ(.guwW{]'Eϗ78xP~ilܴI;)\Xԩ%9spv `ȑ#ͲaFٰaW\3e 9}d5n){qwEl(^<܍$[魢5n@@LB{X Z!X1UQ@@ :+cb2hԳ!H^V-k}C{YtZcYlMW<$={ FR^3 9n v#g8[|ڵ9sJ6CER'9^;5/]l{,ɜ9|O>CF~{I&׬L`vPGo9r4  9N|;SdԄ`%X H`N٭2z8Ϲ V4iߡ[o^=Ãvmۄѳi+o(9KR%KȈaCP-[]/XՄRb?~\*W%wTgf%e 'NÝcQr4  !:}?}*y XI{# A X>+cƍ=~UTcĂ#>gzr-_W8scd٢aƒ$֊fΝb3LrݘXOBqyR|yYv]yf>{aGH^ϻv{a@Cϲ?u׷siy׬\~X.K@@H  @jXI VVZ-ͯ=5Ė $`,;{_ N@>To! ^~=!HWگ#+|{RX1{[ۛ:һ V|hKW_,:L9/Fj2fHvϯUM{h=aGԯ< G4~3@@ ~K{m+B@T`BHJrQ)]rHuJw>Ă6-[j2ryCu.YXsdʔ~)X=}*U?XÍ]zIU(ubNXaw\rJo~\伔 kVH\,nK~3yrAkpaz=݉ 3E  1+\m\ dp$%X9t萔tIHsٴn$<3!k7Vʕ*`e~v״U׸ۼGb{gE}{ɾ}d_wLjv2ɖ-}ĸ ˣGy%:LYW٧O n`%EALs0  @ >`%f& \`jI Vtvy,/P?y+K-Vmot _ZV44)T0~Rxg`%&ξt.cOp^gKRigs7X%5]5m"?ؓOƏ%Vf%:AgA@5Zz@@x!)1['vgD 뱢D?[^_.&mZ$^3rbwĂ{7Kcu%|`ѣRFٿ}v4AH2s$)Styy?pFG  Ě@s VbEr=  @XՔvoop`䉒9sf/Xٽ{TQD )U{❣$`%Z$׃  $%hOG:$`e-βjHe:/JW^-eN\?Ïd׮]>=&J" osPi:|NP,[FnZ5kO? )Et] Ά  +A%Xu  ++ R.$*%m)ד,Y+m]9"+OLУCU|X-"=׷:֭װF{I(W\IsECcǎZ,,ٳgO~~tkǐc-^RƋ 3 @@ V~K+-@@BVB={XbZegM^Sȼ,=x`% # >+>0ϙtn:&JzeJf%u:@@ A%X jˣ  @+5 6l*XPdɒ%AB@N[J@@Wu*΀Sm@@T}.J*7N J:DS Ѵ\  #\i\    Xj@@Pv  A%XI@@t XI'xh 3 @@ v~K;m+A@+^ @8N@@RY +@8=  N+"M?pFӂs! Ď@s Vb-r%  W`ū:g@٩6  @* >`%G@I`%y[)hZp.@@}.JE@ x5XG A (;F@He%XIrz@@ +U y6d;& DS  A B/+VM @@dTX^2eʔ#+Jt=9"tAM@@}n'NȊP^D@-_UPN2gΜn+F#=?pFO3! Ē@s WڅV`e5fHJ! I_e`C?]f*qY}x9+.N:@8ˆ@@@sMy Vd(G@SLʰJܶQz55rxp(S=Y&׬ ALO;@@\ P  rErtE:ɷҰ?p@H@@ })~-   `)W+2~(jUOɩUS'ND  A5$X@L0`B-*S's4~`%   J  `@sMyH Vd(G@SL"X k!ڶ_}9T$9ʑ#GMeƍaFɑ#+{\\y έ۶m;w.!}lڴIJ,!kՔ p;vÏnٳwTRYV,yv[ٺm,^D!Ǐ JJCA4SZ! @sMy Vd(G@SL"XBOZh%ʜOʮ]Bw^Խ3h@ㅗ^!uvsf2g>H6eʕ^Vq6?5Ґ(ҲySՔ6KD N)4F @R@@~kʃ߇J'C9 *`J3gN9e*Tݚ`cVJ,!# 9xҾ 2j~a=h4Ǭ)w{hR\Y|pɝ=_;F iĻ  M <}+~2# _X-+_n{U|0˒. V6Js*D*jsוו ˚],w~?הϑ`Or@0U+h2d rU!mFKVI0y}xrrםv7*?y)#הϓ`Or@0U+86}.O>m7ŊK9DnyxnzۻO'{ljwR+Il#ƒcGK*=gyekNMp?uѹP+}wE3N2Kۯu25awe/e!ya@8F  &>הϒ`Or@0U+xEr۵^z!I5{7*;vtNgb¹pB!Dž&fMŊAY`ECVts$,+Nse  @z >הϐ`Or@0U+xm0[6w#ceϞ=VO2igL`e޽RҚS~~$, 0XN8!wOdlnE  I8~8X2g,]/G)~*+~2# _X-$΋ݻ|XZQV^y~!5h޽GT弴ulnyG5}̛@~ћn]ǧF=s^[ȊN îiٌ!  4T48-U:My3'X@L0`j!+ڀF|:JzgH[ :=L:=dR%KXLȆ/:Xѷy`t>CUP^V\>|.TݝuƎR6mbP+[<&73j  ":Q_5kI6ǔ?D?@@TSVr`Eo6~9k۞ƒ.C;d׮]>ޕbEJR%eynqz+o(oe~)7Tbh  *ދ3[':Wu@)W+VkyFtĖ]-MZ\'8h]m.OvmH]߀>wYrd͚~Jq@IDAT2!ϑ#o[p,)\ZW z[͞>tkEoG~P&&{MC!`#9WVZ-[nP8qD M%@@2@̙-,ʗ *៞)r^8D@ral(:犆,ǎ" KSzǟKx]@ְQY   /`ʃA'C9 *`-z!  Z?DS2wO>L.]&mZ_'W7ovj#k?6=r{fʔ}  )0`%%""   #`ʃO tػԯWoר_ov"E./^\|}|s fߖ+wޘER-t94m/ ?L n+A 8*ާ%cʶۥ_߷kX`AKÊO[W+    `˃:C;tO]m̘߱9˧-o荕7%m;t6u 4˥KnhF;X1D:/kMʕ*u6bt}omؿьHvykcJ;Wj\|\yeRZN+_RjթQŧ|\ni|u3y"!X`*Pd W5Tk5~YrE\4i P.Ҿ"X9WB@@H[Mth&WqU~'F3 VuŽ:]Sk(b@?Q~ s_M۳]e7XT *-fs˖-ҤΉSH['Xʔ7>L'eo =eƱ!Xd0*[l+)>8%C̡W˿]j굼RJe=d󶴯V%@@@RIy+A׃kWOi2 VnN`G˖,EƎGx[jj<;Jjgcv%K?0ݱSgnn;oD<e2c 2]o_ˇ}p aSN+|t~xK;M+<.$;x?BVl  ˯Vd"U(ɖʡ|   @Jo¶!X?nvk[yS֭}ޢt{y:|9R7O㳔?tRj6e_˯vR}W™2h;L,^)&Ev3jPYb980?/"Ŋzl*"o p%s52 Nh7'A2FX6 A*dgjܨT9oҾ"X    o m狍^*:Ή7=`{iyAKN+@Fʕ˫s;3 V.ymp[ofcxݞ"5i.F/_>oSN' )=G.Yҝ?XDw&;J'Z \K~]3cT({CyD+s9_fO$:{{•XGIPE; . .$ڴX^dzlK`%>   d"`˃ Vjթ1Fkռ̞3_߯WurN+Ffz<1PFeN͌8IzqoQ\{]i۶m]CUXQ翐_{ϑm7t+Wk߯Y6Ӧ{ V9㿴n_w}ҿOtaWGp?/88F'$K,:XZϤ`j}Er8   R<:л7i80Wcv4c,iٺsRlY,/$=?ꫮ_E&ŢG+]y-hAě$z=tO?-k~iI'-?ׯl3 ]#:?ϯqOt+ǝuޟ3K˵ | toޭ E `>~7ofL{JD@Z9!е^ L49bcJ۾jy.tfYS  %[W+Y\l   @ly7՚`$_9J|nomQ>dQ_rEҷwJ7c @.`K`%@@@HF[M+&u<wnu_s`{+o>7a?AZ"ŋ*U UD@ Ҿ"X =D@@@,DDb@@@ V s~  (?ٷoz{ .D] >@@@&`v9 䐀-+Xɡ a@@@R[U `$E9 "`K`Ŗ;z   $-&T   `-+[   j[M+&@@V[W+! @@@ < VL2# VlC   @ly7!d(G@[li_zP/@@@P oB$X1P  Ҿ"X^   ߄Hb@l}EbB@@@B-`˃ `$C9 *`K`;z!  Z"Ir@UwB@@-&D   `-+[   j[M+&@@V[W+! @@@ <m Vv%;v쐝;wɞ={Lե@ @ZZϟO ,(勱E$-+亯8@@@Kly7qlڴImn" (\-Z4{)}E{#  @U 6:ot7o^)TɓT]@bݻWv#۷/ŋcKH[W+q?q    obId|Sh@%wܦR }q•VB/`K`%'   `-&D+:j[* HS0dI@Coڽ{lڴ],Q8cx0L*[W+Iu[q2   oHT⽭+:yTg@"`,RҾ"XI{3A@@HIkɞ={[EUȚ+?ﭕ4)YVHJn   [Mb Vs[%&:T!`1]-@ޛ* W=;Q@li_&    oJt%x?M@ Oou Vb{Qn[W+ᾏ=   [W+]?B@@@ C[M$X1PO`%|׌'`K`%^   d(`˃+&@ Qli_w @@@ ly7U`$C9 >]3j-+{!   -Jd(G'@kF}Ec/@@@2TI  @Vwͨq|V~   @<*IbJ5OJ|׏@@@PS% VL2# X 5 Ҿ"X    o$Ir@ |+f8>[W+]?B@@@ C[M$X1PO`%|׌'`K`%^   d(`˃+&@ Qli_w @@@ ly7U`$C9 >]3j-+{!   -Jd(G'@kF}Ec/@@@2TI  @Vwͨq|V~   @<*IbJ5OJ|׏@@@PS% VL2# X 5 Ҿ"X    o$Ir@ |+f8>[W+]?B@@@ C[M$X1PO`%|׌'`K`%^   d(`˃+&@ Qli_w @@@ ly7U`$C9 >]3j-+{!   -Jd(G'@kF}Ec/@@@2TI  @Vwͨq|V~'dqrIۚ1Jy$vC@@HF[M+&@ Qli_lc?euʝ+(P|_zUWʐAefHVˊ~C6m,sMt|@@b Ν[=õRb95[ckIr@ |w?su {1;j@&R6X9lL.QŋO>t _ Mj}- D ̞3O-[j  -PjeⲚqoˎ<<VL2# X 5 Ҿ"X+\bΝ;ȶme kdzxK/]3j-+i7_ÆNĺ嗊N_M+]GT?aMni@" $ WƌFC;-BbJ5OsN8x`{Y\%J2'7+e֭rʕmW~|d޵[j9ޗ.}s򭳍7?=сt98-_Bo!ǎӦ=E*?].[9X13+཭ո=Q @@ e|-XZtd(G'@kF}E\+;v#_ב{˵u-8T)2qԩwlذHti٦|K}pFد[OK_[^R1Q\#F[x[%+g GfM–Ir@ |+f8>[W+`EӷY/Yqxʒmm۶E^1^ƌ.g^]E-}նu O[G@F@7%vmZly7d(G'@kF}E\ Vo}e-ҿOOKev2c,.®*g22 .wrXWownu)9:yr֙g`vD9;@@{;זMCbJ5Os_x*U4jg+0xǝnE$85/! ﹯̞3/b'RXQ} gJ_NycE[ɇC3Nq%_$n^2)RHVґdA8Sq   k˃ `$C9 >]3j-+|p^wɸ G~avL?F*V JG.3e/'  @۹< VL2# X 5 Ҿ"Xq_+ ~(s͗E.Ypeч#\!XIǔaLɋI# d*v-&h  @Vwͨq|VgC}mظQ9U(۶mW9Lj\tL(P/744ԾV$g^N @@εtVL2# X 5 Ҿ"Xq_u-}k%8J[2'ɠb#u7(ׅ}zIj+ |W3B@8aoo V֮]',{$nrm& Y;w_SQYؓM-+b{|?Rosr7AGVBu3Ͻ ~P˥CR`A33K^3. X *%|8pv   k˃?QʦMd۶7o^)^Hz+D9 5/XٺulݺM .$EqH6[W)zCmڴY~WFe2'IBU={]j?VKơg(ѩ4  @ k˃B%*Xٵk_֑G!s WLWr@ cPE.Q׌f-}E"S 1OB@@{;זӍ`E㽵EvWDg?2tg@ K^ƍJ(VBzQma   xaoyFLduٰaX:ioxo *[lݻwU^7PJo@@8χe@@T \[MwSWS=)GȚod͉-`K`%G'@@XaoVlV;vp^%{"&@, I`E36 -+pGW \F@@b k˃,[-%X1Տr@@ ZJa 3T@@k˃Rd(G@[li_zP/!l*" @۹Bbaaഀ*  X(v-KKb@l}ECޜ=T$;ʮ]䧟~Q~G)TT(ZuTtւCV^;j&k֮?T~g)S$99rtɒv{E>A6o"ժVjUHѢۘf~wY3c*ٻgs1Rn]MPn@8TV  {;זu$X1P  Ҿ"Xq Wj_S+bMVyHNˆ ".8<<۳#dһT̛9_Ybtp>oVziHkڶ}t|1sVrYgRh@8"  V k˃d(G@[li_ĸC .,gNc=_`wo>˜$cF8~tҨM2aCȨC}GwZWEcf] 2*V(/ǎ͗úC#Cħ  M \[Mם`$C9 *`K`ŹCj^RjW9g˸FIZK>U+ %-&<   `-+1+;w߬Lw?\%׸&+ܴiT=<]ʫcu1t\viMٛYCYfh#h+VR?W&K/B@Ȳpsr1Mo2!X1P  Ҿ"XqS7w/WԪ> ':0|3˶mfM*+wWY#w5o!_-_יC,YذqD&->xs&LGx&x~!3V xohVt fUR   h2};qZVdNb@l}E!+z7AyKĽ8w9݈mN.s3xDwP+:ʕ*_GCjU3o7ޒխv V|Y)Q[|ͨ  T~zY{/59zׅǖ"Ir@Usdhc{[9s):Xš4S6lo9ȼ D+ ~^a4Ծi5 xoXZ=  @aW%xr<'X j0 a}E-:Έ7ѴaFD !vy*"< ד۷_tښ݊e/_>w䥗>^8O)ُ ={ˋ|4.}3^}esߝ:~3'+Gȏ?\׫{ksbVR seovo߾PԛJ" @ܹ?TX!cD_=[-xD@ҾJ`%'osEC={vqKKr>6׮['/u%K:F   _ X1P  Ҿ"X^   ߄Hb@l}EbB@@@B-`˃ `$C9 *`K`;z!  Z"Ir@UwB@@-&D́_A-^蒋/… A9),o˛fHSNkj]:Ҿ"X^D@@@ ly7Z""v+-7XT53~]NMV#r効 /Ԛ|*}ҭWIN?ndgsɓmܰEoܪدVդN pli_G   -&D+$˾\. oNt4ߎ;u7#('9_߶||E n3 Vm|LR3' dm2nKCe7S?{F4دT\)}lE#]*N0ZJZ}ߝϟ_L0Xyi@/'Ӡ pli_!@@@?^r"N_u0|@92^u>]"~_nݲy̷[N}wTOg_G V.|voNwG_VJey٧7Y!X VqȺq,]}/p6N`E{kL9o5W_?@ li_)#  伀-3MDҢu{J۶]z^&&M͍=/{3}L=C+/V%gVӫU~KW5kJDvk޻m+Ŋ Jf]zVG2+'-+ 9y@@@t~V+u5wȥ\,O>9]ny[;3H#8>5lҸR"ž={dÆy/8X_LG?vNoݺUJ:Z *~ @/\Q^VIJ_|qxnaݺݬ(^\=1!}V7   @oLDutwAuN^hؤ[7Փ~9y:_|)WZ^9+vꗪFK~un9ݗ}H~)w[o#ޙ-[ on¤7dkcݐpף}w˦͛{]X5|k90d2nr%!/ AüCACfMHgv%xU[ǿr}k#)SE^& .4wx1;X/ ".YqN-wjq^W刟fE|X`!VrnݮEj`yO䭌5REz?+?U7/5/IoӢ|RwʈQci7]mY##ǃpz7ozjtnQnk(]iuގ{xbN.}VƱ6oSz?hsL6C^3 g|}L6, }Er=   <̘Ы[#^?ίL'xGwYlvw+7ظ޻.Rv=w讲v>:S?O=v+{sy`ڸ2t(oU4Jf= pҀ`y/p/U92LW}a߸']JN7i kGu~Y`:|V`Ss׫AT(Ы{f(â"#_nΛ%NأwwMnv]V4Ԁ3Iæoؤ]-L45#Pխ{<}kLhPߢygNf~ LKGѵy;}Geٗ˃`턺ߦP߈8Ve@@@REw6m ԡ^>?w_(WE;/[']_'Ho| H.YwZ-i?/huYC+R|9`7_6/g^Um~kc'{xo=qޙ>;g!W\VkΛttƉnw]Zr]s-_ 98vw8?q4d[/rPBw;&|nGNs?iݲ8>;;3E1 ^`tNtc?(_x5Z<|o7/ͧL- t~ b]#C2'hyovnثc?>=s=͂ Έձ}\ڎnƛHGyWZWJȷ~/3fotx\xy}Ųܱ7Mt Y V*VniSN69a1߃@PY\/@@@To+hENѷT>y䉮_%cO!tgevؓ:1\P t<~w\9D7 +[n74t˵rj N_-ڭ;n:akC`2 |&LTǺӷrZ3Oʖ-[c+ 6U1[4@SݻJsr`d7o&ːA}}+z&77wߡt7]4i`Eo!V?^fν]E#Z礓v 77z<gDr[W+    `˃:7Y7} a/m۷˵7pOcBΏaާdz)1Ha/B'}fŝl`Zop힩M7quNo蔝`EHH}qJhb^/Ϛ巷 gܹry^+GypMC'ZӌfuE<$X ;o6=qɛi50Xw5ʬʶm;sw{ч7jDB߼з+ wJN14S 8͂ı#hgǟ~froN]Ai[3`gXݹ遂]+zҭz @e xeG qVw   I,`˃8GD~|(޸ޗ^4ѱ1" W+juO+:tծXu_~A=}KiS m}F'S봻1oփSkkIC]}i_" Dy\p?cx7:y@_`gu@BBӒTxe&rZrżlSw ~n:HF]iq^Х_׾j9jnx}152W(~<Y~Wy޶&Ļ|c~FMNWv S$m+@[7D.chءS0X&V:]5o]qj^r;/C~=s:*u[]']Ol@li_$V   (`˃6J{& L{ݵҾx׺Oy- RS|+Ei<Ծ*ѿ7MV }i`/h8\5ȵ˫Ώw=/hu98>`%Op 4;oxox/M_n}2qGt]v9?'~EO\{ruE][0ѓTu 2 \S_r)`euҮCg}u\}erz*5nFe0+XY#ygܽ៎aӛƸaV0L`#G  t7[E3M[O3hwl-[wW?y;`{;oB'xAmz 2\9]D˰@bli_$   I.`˃9 R4iy8ݟ~\4Hyk_rjВ;wnw"X ~AWߙ̗Ͼ.ex_@PT9+:PK7Sցu};Yg=vI{x{c^xTRbpB^S{ΛKbhȠoϜx<\׿=mDV~ !֛ :>^$̞34jFiN 5E=r`eVM77uѺ6tc=ʚ5kEoxl6GU~aAN`E?4eGֿ!2X9m[x.{eGDð@li_$c@@@[rc&+#^uDŽxuKXcxk7G˾Z~1~e5G:FY0Lծ렟m VNVEMWtY2*z q:^%7_뾱sƍӥ2yrWet] #/<#g_.:>Ntрt$ym8{15?0+XMGvצ8}MԾӣ(@qCw"E ?{ˮ]6+ _7V2 ~{unW`nzcEǤѱit1E9I:1۷Onlx{J $LJn>@@@ ly7':X/u~`sOE]ፕѹ_'o@v-hy /h7o"9Y&m]`EƄǪwfeͳ}֦CnkzN…"n4箦M0;oɼ3cȟ߸}pg/v>â1׌`b͛-:o-/Z,,;&vM`V8}뾥QjҪ)XѕƍG;n߱}8]+^M`~,} wgӍឆ|: @li_$V   (`˃6e|zA:jXQ=88v]2]'_z屇"w߽{%gPGWreOq2Ɗn_j{xqE[)u:O3b:c5Ln7z:3upo7G0Ю=~QCVxчrgIzwߛ㮺K-:aɕ;4w™*U8FC5}s2Xx!uT ^ MfoL|M 8yZ>l7-(X DGC}DHEk;.OeOy[z.=WNo@@@ToW_{eSǸ].Ue5kI+^ޞu}Y`Eu2V'}#AZ9m6%2ձ:D+cOoi=t ʔ9I6nKmV0 nnov?F-D*?蒲nzf8:u=R׺]#eN:12`C7Ixy&|;|d|;y51_9>:p}[p(Vǟ~~oAx r:XY]7Lޟ#^o|]_ǫ|Ï2~7e)`E ZWJٓȷWzylF+`(QH|W!/AQN+Zm۷Kv,8=s9gaJPy'`K`%q   g)y^pMo]n 5wnrՕI{r~]y\qYMiӷPS0XѱN=%7skbL75zh3ܟOV~o<Գ>atMe5=_hQwzƊ?$\Jo*   @@@ Ily7d(GX96v{יW]ent//+G<ݖ@ qVw   I,`˃`$C9H`E6bL|X얝Zt 1 8V   o+&@ Sʆ|rRbmb,c5.6M+N~sWYz;QHSNjժdy|!Ή V@@@*`˃ `$C9 *`K`;z!  Z"Ir@UwB@@-&D   `-+[   j[M+&@@V[W+! @@@ <mVm&;v#{ r咴-+s=9    M&@ Q7W8A/o$ d_J{    -&*XYz;Pŏmšq_ڗ*U|&&`K`#{#   Ss ZƭRq'XaB- Vt:昣]> `K`% M@@@Ȯ-zd(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d(GT XI͹&-+d8@@@ly7d_.{uw̝;ΕcٻsIܹ[[^R N`%d9.9#`K`%g/GE@@Hq[M`$SOw H*ez]wg}nWP!rZLaXrٱc Pْ.uq+bS,}Eb@@@@O,I&+tc8M9[4R {T&zؾ˯VjܫErp=99-`K`%4G@@HI[M+&j;V.X0,{YnQ+9$+~=~|ӫ? #X9[@NҾ"Xɉ1@@@R^Ӆ X1d={\cP5CN,r^~q)ub05HMٷ/JL2)$X)F@ |ERa/B@@H&[^ VdJ^Vի+7nҡC;]'XѐdɒaCՓ֭[5kɲe(1w8Ӳ_VȚ5kM;l7aɚ5kWS \ڷk+5MK,\ &8dTE|5ueJ qܕz5kt?`pEMCEJ ݠ1Fj;eq [m7j vEgm.x+|3K,6uԖ֭Zyj-[^&> %X0j2`L.'A@@@ RZX"X9`qs`UsY9li]E^`eyBW8ݱC{o V;AnݺiӁB3HVV{3w~D Ftj"[̞;O 49Rل8uk`Z_]US׹R-LYCL3gEI7t1|ZCu{3(5-Uv)̃kˊeVsѧ[:h֬8i ڈ`%Hr`Z!  \ F -[ȡM&-Nr"\Td}5S4i~$V1z uoʵUNNU=gSL󖠖#ƾX!VkZC4q]}bZD2i&a ۶nqY/֦ ͏LK wjذh`[m5-oQҲEswS YjȐٛdq3ݢ-k%"*c5ǟ6meZ5CafYngTNSi شq5kYM럝@X` D-MRp_? V#`-W++@@@ ɔ<"X1?75>'' ڴi%33hRs"CǬiB if9sWԾaFi{GgqԑroJ·GtcL8ۻiYѣG7X_Ϫ&09kgwӽ\cjR[3:St3VJWĝu2 $]|5݂0 6Ǽ)c2-'o|i=>w 4Zf\f1Q]WipcJHcR?Nzz-2;=X(M@R}\> V a |Eb߽A@@@@ J0+` oܸΗfݯ)V 2ɴVЮtnol ѩ`E[(JvlV w-Ls]] OLs &:4X՚YQ_BCF.(?1chxZń4eٽ@8C<Glݻ;/ O_7 }::4̱5M |CZ`ZE[DA=/mLgٲNyS}v#un8?9_% V֚r#]ɨQ $_+.>%)IPRmKPgS=`%ߎ   &B´p[lw5?xkJc! Vts ;toEujv衦BB 8Ant^ahǟf2 V]X߯s̀[ VznN3ENh6n@BF?͛IRܙ`g괙k}ᖶjƁM0`DD:=.Zbv61ptX<~<$X{eGKW8Iq)w|"[VqPK@@@ Ė*VyjyDR} ; VtX~̛e޹s'IKMsZc63LKNZöVmZi[zwOBPJ{?ʕ3(Xс瘮t> Vt7m~Y,YL֙Au̬'m۴.,^fL磷+JB?)*m flEfG.w//?|׮]^.(Xі :vJeEOZҥK'o,餡͑ںXǚrvjwgg6{)S9WRٜCW'ժ5N$֫I Yiv>șXJy*Z]h@ |ERC@@H[^"X : ./Nv 6"Yk=OvdS֭ALw6].\-իUu_jmZE CY+;x!3̸!:;V}+jܻǴTRG7Xkܸir.0uܾ}U9MZZhc+eXkifmԮmcϞ=7$JĎ!Y+( JHn ~[V%@@@([^N`%H Va16tpp;(`E[|r2*'##C1cp7Zo CU9q9RM+NѨaE:X~y#ϩ~:֭D3‚NqJ)[n5N[PEV;y 2w[Vc$IjluMd:;:JA;:u(59-CӜ9 Ꙁ%͌1_-+:ǘ*΁}0E <_f   ?H`%H Vûv ]@?G+vk5oKZi`:HnAW\%+͟PD/Vŋu^wÄ{pﯷn:>ɚ5k |wi5a;14%L{6mZKj&z<7m4ikMrrv:$CdQ+1(?[Vsd@@@$?ɔ|^뒖-[HQ-BxQٲ}-R2jd"8+&W16ܖF))G݄n4XYm(ܲX+̏+waա};g,[`Z]lqw;´)8Ήvǥݛi˛^GAGƍ2BxD밶2}LŇP$C{Q=IUi߮@C)c]m۶],Z$;LKISfMk5n̵^YjU:]߰QCik3d5)`E9+`J^g   ɔ AtOjT-Ruz-uں%E21޳#>IDATӮ]e}㍤WKA:^mѢzU?gWu77Acng[ uR%[M'}> wqIӪWw]neq =zy1Z*HռX~ٽgٷٷoaL'@rp~@E |ERWC@@H [^Zm0{ڴLW7p{ff2=n<V`EGE`Est);]ܲXv&Xc-6똘pBD+*Xnt\ imqrMo%+={, Wb|:h+h[Fξɿ- X){!/[Vu    -`ˋKcai^ͯ%V%N%ݷdTU$ѡH3`3,]/8Ꮆ)Mi ߊ-A+   pPP/cRK/ B @+ D1   #`ˋ9PUȊ++j,q%RvN`źKB(T+B/+@@@(-/A'X < 1I)<E} XQC<_    -/AC$CyR͠f<J1`E  X)܇&`mwA@@H[^0 Vd(Gd XI͹&-W+p7q    C$C9$J2]m5ly"XIs@@@N  @ Vjs `J"M   uP$@LWsM[Vn@@@?`%HrH&dڜk"|Ew   `-/A0+A2#@2 $\A+D8@@@ly!X I`%6<_$9   X'`ˋL5k։~w̺R)r# ٛRJҸq FV+   @ [^cT)WaCݛ+5kՐ*+Ur@+۶nʕӤ~r>^+@@@x+;v쐭̴TUV. PZe떭'LЛQ@lly"X)Q@@@?Rx+ZՊ+ժW3Z20'^R%ggZ92!`Jy\]   ]x+yKQ*u6-8>-W+etA9    ~[^u3Xq݂rոև (oi-W-#P<_   t%lVF9  K+XW2@@@R X @l`;z!  Z D @@V[VlC   @lyB$X @l`;z!pVs+e˖GcW@@W %%Ej׮%͚5Y& +趼.J   `-WI_tJTImW%12}  $ХK'96UTu?+A2# <_%mҢmhݪ|ho*~q߳G7i߾Ϭ/)a=%  yy!{̛P&Nqs~곷?`%Hr@U+s4oL}Jz0Q?{wVt@op[h g;U5l5  @֮['|ӥm[tCP  |Eb+} 2޾.I>S9'>*w p  @B h2|(.?ctsP  |Eb[kB+V?v  X+njŖL$C9 *`C&Xϗ+WKdE{i0iwX[iv衒R99dE2w|86m۶MkȈY\֮]'L{[.pÆ E:fC׆˦M*q9K@@ V+u֑K/S?`%Hr@U+s6XYht2e괘Yƍ ڷ+^`_ssֹs\r TStGc~^tȃ\Ga hwuW1P}^f @H*a9XmWmy#X @l`! VƌV.ź96{,~6~<;lJ\ISCq$'  xaε? X @l`! Vu̜5ۻQz.6oر[Ȟ27e~gz_V7n$Ӧ͐#߉>2D5kך'{nR:fe9w p gr\%@@aε?ȝ`%Hr@U+s4X6}yyч.qVzwdgg{̙1EW,O[#]eZzWr-7y} 2o;n/[f&™|W3F@(@؟smy&X @l`!% VdΝ޽Uzu3E3O{FzzWN-+VWa;)Ō. G~pr!@@%\[^cjJ   `-W+)iҁõ϶mŗ_wFm1Gv?c|ӭ:V/'+]v`0\j5  @Qaε?ș`%Hr@U+s6X.;sX7?XqXp,^4֦NrY;]:uX`$I_Τ  s-/1qM!J   `-W+)i]=KuvݺrmqŃ.+1Bɒre_8q  E 9ז h @@V[VR`E[\u VVr K f͚?1cVVO?-?<^~4;閛"^g`ţ`f@_8  s-/l`%Hr@U+s4X;#Oy}מ7-Z^YPm`ft'ɋ/,_}k[L 3g  P?dM$C9 *`CJs^ƻϛU>cP2uoƌ|S:uGnv:{n똈+Vt'{[L 3g  P?dM$C9 *`C233eSzTV @xU-J!9τ)))k."ZJߜ1p}tigș݌#oyYr匌 ya^NSR%o3!J%  @Ikˋ;J   `-W+żC4|֯9\{C"Ě`E׽1-"6D[Y6"э^Ai֭ҹ{/w1.' g_!@@4aε?Ȟ`%Hr@U+b!`e˖rWI8<9]o?Xٙ#v3A̍7\'\}FlCKQ ]p<)Hlp&@@J+\[^ Vd(G@[ly"X)Vt]#g)QzS뭲t2[#ސ޽u|*3w^D.qn q7ܳg|hys%݌$ g\&N@@aε?`%Hr@U竤 VXr)6Zjйyy| ٸqsKocIOO/C+  @؟smy6Jv#  tjy^VRc!'pƉE@\ Ϲ+`T@B+@믢-.fVc{bRq%x  v 97,JEA˵   `PIIIT3&~b`Y.Ny  @k{UϾL۝E@"Xf@S.],E"YV|  @x`E[sgPS@HfmJ^P /eH@@H ϹaVۅn\ >@@vxuw!Xk0@HRv  Pa SRΗ#  %@PIVp&u@@ s.Jח  @XVz7>pNY@@Qj  `@؟s Vl  P+>͚g@jԨ+7KRi%UA@H Ϲ+LT@(C(ϑ'{$T$ʞ={dehbYhT^]:o';L4_ZbJYf]%--M֮['?;l;5 VƌVnvΎ]8?>|1yW1_SC~䕹3O=?l5{dky*S! bM;v[nC>ltҳGwQsC  5T@@*?Xu;Q@@VbPfddW}"[[`婧Þ iݪ 핈G+'#Gty[~o"kZW@MY;#ސZnRqXW1a%@@ la%X G}@@ O8^zSz5IKMuʢߜBmcu>HǬ,7A >:XqWh`:M:-*-Lt8irĺG_n2L9IRӌ+1xRoK1c@_8TV  s.J @(ʋS+U,\H~<ѵK[wY7 w2~DwQGtrϝ/Vg~dw?xe>t\8|oYg.J1^7_|/ I>Ә99ҳwٱcSݎOi&A@E Ϲ+I@([+J;w7k&?PW.-ʣoo&״پml߾]??YӤjժ]:&#f~'}Iy_/zE_DkY֮G{guQ-̂}aO!  \" 1+W]+m;?h7Zߌ猩z1? V~4mzH~ѡɷ_!-7C)Cwr yڴsɒa%&{i,5C@@؟s Vy  @ [7)6udzÆfwnuV^俟YʶmnGYXL{A29ϗJRSS(5C@@yy$%%E_U1k3A@J`HF+kx?ztr}ko o"[z:R֭#:nX_we'#.lٲYj׮,V$N;U|Z(keӦ2ҨaC kH@@(udQԥ *ΖlMbɅ  @ X:?<:XDqȐqVO2vw*2X/㬩&'L12},٣1?N@@o 'M.]:}O %J(/F@ X1DAݻ˜ @UVǟm_nٲU.:}^^yy{҉޲;wڵD[Ԯ]KN=dw ZFS;ZXz  @*!M{_6$XjP@@VeP .O;?<сt%;vGաfZWY:SʤS/oH=~y5ry߼m2cjEð3J`V^%*  P*|88-ĭU< VڬG@)@b[a^o;7 GW^{|6mZjiOs™*:Xѯq`t<]u%fωt{Gſ9 d_j`۷kF@@Dt d޼N_jҲEs9߆`%ԗ# +`EӟƃVA\&6͚I֭dox+O==LWg ~rKܖ+Vj!  P@U_y@@ qV̵qFt¦'8hVX)w{_Dx?Gnq joK*UGR׋޺#MG#'g懱_KӦx:3ʓCze|xfFo#/,^Կʙ?3e:BJ B!c̞3W/_tzSI@@HIIqwl֬t1UJ  @b$mRO\ѐ%7wڴו[^VuQÆҨQCmTjɎ   V@@ XIY!  Y`%G@I``9,   @r $@@ qVrf   q X#>_ J9rh@@@K2cH9 RZo   *`_$%@@ A%*Uč/F@@Hd0+2k\29w"_ @@}ԱVF#  $1UY[h2{@@@Iӳ%Xٵkt?XٱcGDUzQe,<eس{yo[f@G+@@@ ly +\qյy\cW_.PnCC>UGI.ef@dXxL8Y?KRSSXrourǖI~,^TthެLA"ly"X.,!   P&- O?V5ls]< Vw#۲׌ա\tyV+,s @St_~ l4`iݪWƙsӺ[W+o@@@H4[^\mVl*]zxrߓ䫯ufUjjuVY쟙2muҤ? ٳG,]&/EKեCväAC9fϖ;soG{m6RNo;~Yd,\H6l Z2VژWR˓)S^'6l`ss:O6]M!UӫKժUA)UzD n=&\)cސaInn JUf<|-W+q   @" dkC2n#E3wSvxG{uW_|+-36dKviެKwx풝g9<ϡRv-N_/c Ǔroy4m[j#>Xt(78Xz_(axf᯽"٤ʪUs o[n|WhУTvm3+, @ U*%bȡʬse[|rD)fJĭ   e#`ˋ;XYfsWK/Xv2B93\~$rp26ߍJz3\俟yecl 9u%np\ccV̛idfn:kyLV^#ǧh^RC:ie=ws ܩIأZz5_3JjNQtN2GWnj@ (NV&•DUv)O}^GժUsY{I+Ӗ+ |!   @2d`W^zԫᯋ:ti*aď㾑J*y۾r-u]-mڮ]:W/@@@?;ig卥%-5թntW]:AO# *Ѯ*j`8߃   T+Xߌ'Gx r{wO>%);~2lȓzDv16/ÿ/WTT{]x~$6koN*UM:M>oLQ0 e R*O•D UPAK3 :}EM<_T{@@@J x+{={Gt5g^ZjF.ѐDw3iZ̟.ʫjy-ZZ>$o7'3޲lٲUQVTcȀDs]ҩcdw)Ois6+3 `@y!q $ZnML))){`D@@@(-/AG2fraC‹=DyeѮy2](S'(UT K^O>m֬]+*v#VkrCx٣]1+k[VQrz@eeY9Jff=9>`g:JQoz[Vl3   @B`E.࣏*E@V5GB&}D]sΓ8+zW)P~g(oݪɂ #݅`%: rO 40 0.ր+~I@6M6;ɑ1YP=7 WF{Qҥ&P9] tP-W+I}r   %`ˋUtABǮ="3}x]VDY­%#G?tw]-ɧQ ֛Ȟ邆.>,z͚I֭̿[hsV lI9'z撋E'Xb@H[V" K   -/A'S_O.:Vff\z^q}7_}[֙oyǽLdVX)w{_Dx;8)78X }Fy`|Gt)nܴI}yc[ZLnwY|y4iX-ң[79愾rE)z 4TbB@ ly"XI滐sG@@(7[^Nzij\\ѐ%7wڴ:z{Ji6o5kJ}ԯsc @@ -W+1/   -/AgA$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`wB@@-/A+A2# <_zP/@@@P H$C9 *`uz!   PY%%%E*UTmr  PN+aɛ"     +/I~~2   a*R%55+a@ X] T? W|<"  N`__l;:Ξ3ϩZc{VE D8a+f@@@P hm'Bb>  PJ !}cB@@@ Ql1 ,1*m޼4;!   P+!@@BZ6@IDATu_.^{BJKhb)P4w@wB ٰޛMr3;sfv3|9sz|B @Æ /,{elk, P<x\y={=z4=+ qwQ @ PJC]  @ 5qt @+gJ @ @@;J; @@+"$@ @+ Xi޾2 ЬfY"@ @Th# Xia @NJwj Pt @ @`+cG @@+ wi @ VO@R>Sc @ 4J !@-# XiP @ ?JD @ VFc/ @ PGJq`.NJ @tF@% @y7ԅ @`:\s  @@V5 @U@RԞSo к{-'@ @ 4 TMh9 @:JY: =qv @ @J( @\ Vr=*G @[@u @+ثD @ " X)HG& V2 + @ @@w V[ @ @ @c, Xc:?$@$ Xi @ @w P4JzL}  @ @@ V35`E:Z3  @ @@+yu"@F& X} @ @@]+uur @::% @ 9JEG@P @ rr &@ 5 @W@RܾSs ЪVy&@ @9T-hq9 @JJWj: Pv  @ @CJ,  @ Vr9F @]@=} @+קZD @ # X)LW( `ŭ@ @4L@0z&@P@+I @/y V:,3V*EC@Ra^*J @C`=z1VdH[1A>A3'lcY{ǚ ho[ĵmh䬹k"@" XaÆ ^*,̒U{ @ @b T^w3#1<c /f.X Xn=5|U?[yc'Sp '{N 7 o7}rݶXi`^Y= @" T杧OQJO?}# v6 @4@^^k)7}oǁ=UkyfS7>_HY2OƏ+_=~2c⛃7'+RhB3ʿ#Ԧ<,W9l*7VB6:__u̎KrOߦ_}34Nld~>ĬmӍVѷ oDFmV% P/<_ VK @--ZЈ`A_F\)\Y砛ʟ K;kk5#')pqb'qǩٵVοu@\p9cƼq^i;-NL2x5<6;,}>҈4g҈- +́,SM<ڟ4Ku{#cn#k} Zyy} @ MyyF+789rvX}رFZΧҜ(6ܻWfzK;9_3bw=vtWұU6;z͚RnK%4w:KΖzd.k^OzG^x\t+ĂoHw\*IKO-14 rNWOf#֎&1y'a>\6Z4Q*)d^+~=&W_YqP#-Wz\yq'lb'*T/Įk_^*h6Zg1s/38zꭸ]~JG"w ,OAϔ?L^?E%nXlp-Y(F?kH{lVێZ7~2sTJA)FL;1>%c+KV /WI'@ @ſ_g[Q]O_9uyFYW 4##F,P:oe9V>7Oq) SHse*ǃn~8hUb'+{?+IX絪vǕ+++3jg| =oxT9Iuso%KIeVR( @^+i'@ @ˋ-F+>)\9Gz)DXkYcj3wHuz +xpF\sЯ#f*s`π@%+],/wNڰFi|XAFTJێ^u+KZ /WY#@ @%F+: ۸ʟKsT>;UٟBSw].7;rwyv5u6w;}'iRX,UJ%(<]mXgSeׯfs`|kegڇAُK+|741oK6>uOena>Q5yo.>7kۮ:wVJ>vKdV @@=|%Xg/;7 @@^^ku@u{}/ȓ?qR3TiR٥D]|yI*uH#gz\xuKϳ_}349r|(i^;G^xyzbrAA\yO*e`%(bۑVkqV3 @K|%Xnu2 @ 0\ //#J_ouY bqz'_t4TNPI瓘o)c$գ)"X7>z#۸cze%՟|",MN̎KeǦKJϟ<(3&OKKɧώU VEy}GWNQ>o=GeJFd(+Jo&@ @ˋ-F+_?ۡ8/k-_tKq-/`_F'g^8~rYP쾼tEQeA/t)~mU)NϮ/oρM6xgaXacIaǑ/s4ELF7X[UST*:X~k˛ H<_ Vy6 @4@^^k7"X{óOZ\uYVNٸ^V f)GY}? ŦQW+ЮŎ'+̽4Z9S(I՟2K|}ĦG~2$9dg$7v7Ώ[A˧sb>-~O,X7'dF\Ț1NmN\)H҆4H /W.K @-ZʍV=h虆[>(}jc>cq#)8O+b/K󙬲Ȍjd_ywpl{V3X(ف5VÞF058O ??l(9J~lO.VRyLXZ\.[8gyo7v:fV8N;4f0G`%YJ,';Wr%X&b +Ju @ @ˋ-F+.[\yf"vX}r8һ4_{iDْF{%M&z,Ci^cmW Nw_ ^, g#IAr+}/_f_ 6UZA_ۡboS-R֟|{廗BͫBTMo-oyU\xXl#M8 W?U}/.LiIS_M7i9Zz>v[sY"]3NHTK&;ň H<_ Vy6 @4@^^k7*Xy!qE?U:fvҸtUOsŤ9cҒ[=JYK>M`_kYyQ%G$mxؿrvdڿ\ʾ)l7Ej (<_ Vu. @4@^^k!7*XI4}Yr#/4OxiΧފ o)R9h٧*j\r/] FYgW?.I;;q>Fj*I:.ϫ?esmF~5_N+}],J*KZ:w _bJ @yyԵ @ZU //T_k駜8f+٫.|u9PvʉL>s%_~SXi2L8;4%u&I'owʁVϞ}WYDYfR?%4Zs0@^+u`%@ @ˋ^KR~  @|%Xi3  @ @@ſVS;XYԪ&;=z I P'<_ VNK @-Z X%++] ^ /W=c @t@^^k5ZPN@^+1 @ @ˋ* Vj('@*+J^"@ @B ſ`r @ yyQ ? N:iL3Թ @ 8ԒQNU /W;7ߌ_y5}4Әr)c馍%~XL2$UGZ͋wC7|UgƋ^ze] 𣎉TsODNX @eJ- @@^|%X)!'?N'6k\x91,3wFt_ύg]+/ymievG}\ & |Ѯ^yt3kjlV8eW9j @ˋԒQNU /W-|qJ-{O>d]Ofy.9gO2ŁW_YU)_?//0+d @yU+/ kac9戃_,Rѳgrr iʒBN8A(7+2sg}Ǖ^m[!@(@ U.ߖFz[nq•F9PIHeY}Օ:\Imwؤefʊ_)}ϊ{KLy2_/+d @yU+[zx𡇳#D 3LUV{_)#=8~vʐ/(wߋK^|ab饖Ij<Y嗳1ʿ˯gǟ|*~R.pV/)(J/\vypMٮTϹUޮ3G}?+6[5ҵ+M?ヒy4^Әw޹c>.RI!W9W\ZYEJmЏjJe矗;ai盷[o'߉Yglg9맕4b[=J V(;ǂ wich|aLXtMWga @t@uRz•Hc㜕z5W]Wzwz\K!6[mꔯZZ2  @ %?(~rm 9;~mʪ7.eEi~s>#N+)`8ԾqYmS^3Ҝ"wwYѩ'þ}tN'pl,XnU##[N;XoCRsQGU\_՜%7tsrQ~6-k7>0$ /|ˌнw0jT˨Ox%;o)f s#:ewL @tTjJ*/ x).JnB,r^^TmV0 @UK+Wge喍/}ww.eiΓ/[Q'탕7\?ꟍ^>nFӬ5^ow.*~].}Agd`%}-*fmuz_c{Iqd竵k>QN P'*K6cҬJbW}9c> 6O~RnZ ԒQNU /W-vёF:TsTGwB}Npff%\<P'N#9>Ⱜ}RّROO*_~Jqfl}Dy{?}6#Wg* iambџ/R^o_4zbe*}jHuYK=^_mM\*k0"XF}ϽmY{_UNG~hL6٤vR}LQ z纪Is1,3C?n_S;WZa)Y36Kv\Z;cٗk"}NB = U*5ipYCWW{ nkw'b6eݹZmԒQNU /W-~?F(?b{QsTl9ourT y[6!; Vvמ{D=?9 c>忣 VqgIL h/ߕ±iHM P[`t9뿧3IgMw˯&{~@.0|D к{ˋv Vj('@*竖 Vvs񦛳{4dL-~]<W8 ve心"XYsRJϓ@#'9ZJGk/׽ɪVg'tJ̾ZZ#Jw+i?B~Xf_f;X V`ǟxrvZXe̗ӏO8fVi+ @&dL~'>ojʱ?"ဂ@%+lF/;:?c_!Z2  @ %Ï<&λoٽow}qtF+ka<_QYO^)6lX6׏sVN=Xu*?{Adcկ^~Vc?1WXj%ή%XywcVΪ=&J{>9V6&f<=14dV @F`lmԾsgtf UҧN;O7xJwa{r;//$X%ȫ@^Z2X/7Ҥir-)94y|e2&4zOiwwwzSyG/^yJyG+/+ovgK/_Fo}5VYf9&tq'S{qf;lVLJ{KoQr+oVV4G&i @`"sQGG W%TI4i4i,i4}w-yy^J- @@^|Ւ'o|~IZkּ_nysØrPQ$7V_muVӆ>^ #^hi%慩,{<)=zSO?SRPϛ̿qoxע4Jߗ¦ )XioAUL<6,He3&.M9'm+ @c/ЕHWk[V # W)TI?zzDZ9Og~ZuԒQNU /W-bwcYfnS6١ͼabi_v߳Ђ W\iʒ&-jGEHz+'{tl5J 杷1'|j=㬬:XIs,پv 1ӌ3feiN9/+Ǣ?1ThN^yt|/k^ZstŧXbz29Ծqj36XoHX @FAH=5m{•f Uڶ8[yy%%X%ȫ@^Z6XyWʓW iΓ;VZqȊ/}HTE&񋥖ksm{kL?t`)^z졘r)E];/1GK*`%Iq:Z*CFr_RuTKnS?mv۴9;;;{W^}5~Zz\\l @ 4RȐ>ź&UR] WnXf%b/*?~JrLveCuZyy Z2  @ ts\KC}>%u9g٬ʏO<83+57>m˶ VXoMK9|bZrÏ.tc*)>XIǵZoO{1lOpU{駟<+yW;kuK,gqZL1  @h""ԒQNU /W-g[t˿j/뭻vz_F/ҹ.{s-brl.YySNuqgx4≪wРK/7z+WR)8¿E_ޱ"+XϽJHF?pc]FlֱZkRꫯEeWH.ZRsС?c=oZo,dJz;}sƤs:,s̝m/ܳ'%JjYiS%amle38w&@ @_TRKF9 W<_ V>8^}x!C'xMӟ" /TUա\4wjޝߤ!}bwߋO.=:k3߰Kiw-*_~䛾=4SO=FEiz @ @^^Q5J[[ @@|%X @ P@עԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-DJ- @@^|`%^ @ @`L杧O3z1&?o+uub @N`?i  @ @@C+ awQ @ +?tj`eel$ @h5r>^KF9 W<_S`޲E @#ZuԒQNU /W!E @ˋ-DJ- @@^|%X^ @ PhBԒQNU /W!E @ˋ-J @&0<}gϞѣGTMv%@ @f4{k (ǰab}`F݊K @])P`eС4Bȳ@FˈJoUu#@ @1{ڔ+Fʘ @!0_)X;5| #e @ @`,Q*es -iJr."XE @["+6 XE_ @ ERa @t@.j @ZB@ݬ @ w= @@VU @ @+-K`eZC  @ @;+ݩZ @t+ @ @@ VZ5h)JKu @ @@w VKu @+ X^oW#@ @HGk& rr &@ @tk @_@H @- XiND @%+-M @[  @4U  @ @+MG`e^  @ @z:7 @qٻ2 @4`;W @tk< @K@R/Y%@4V@XW'@ @&4ij  @ @@=+PuN @@+5 @ @&4aj @$ Xq @ @:V @Vr @ @' Xi>" @@ @ @@+u@uJ @@+9U @ @4_j @ V @ @::% @ t* @ @@ VO + @ PJP J:A @ @+קZDH @`NIȁ`%  @ |S-"@$ @A@RT$@@@NP @h>J @`}@ @ XS @r XA' @4`T @I@> @ @u)  @9T @O@|}E @$ Xq @ @:V @Vr @}K[ŰaúG @zM6i4 1Z4SO @ |qͷ?i[+#  @Eԕ@ 4W^S޻ՖUj8)&@(@ W.re7lι"X) @ P2Z%}ka U @ {߃ςyԊ`e @VSI`$^ti i2$ @ %P2nUW*+XHKh.Jsִ)Æ ?쾫[l @@ O{V3cB6ORnSi @(+$r tJi翲jH @EtF(``:( gGmRF @Ϲ0 @9+ٯZbEl\ @N 9WɎv @`uH/I @? V @4gjU źKs  @:)P\J';a @ V aK#pv&e @+Xq @S@ҜU-&P.%@@џs+h @ & X)X.H@IDATQ @(s`=LhNJsV@_8[4 @EtF(``:( gGmRF @Ϲ0 @9+ٯcܪCƵz[,ұfƄN/KK8zx㍗8p6NΕ  @,P\J.u#@@+Ag&pZsolY?f뭲yZ4 R^rK/Yi@_8' @y(s`%w @\eY{՞xjޣ"N3>'ꫭ7dZ) g0U @ 7EVR @@ VFhx0`@Y{J5mJFp Se @r#P\Jnn%!@t`e48[!XIj]$b?y,Bm+m8rQ@ @@+X2 @.({sHQ{DX`WiV^+pSU @-P\J '@G@Rry⾻﨏pY,Ys,|'g}.vXpb>seǥ^x1}xk9c駛17 oNW^&~;לsL3={lr]^|i`V>lJ`"E̗ @EϹIAZJɳ;$=M8ay[j/VY @n(s`n"@t`}r?kJq9geʙgǞpRV޺ki'ms/08جM7٨=t4oKehW^S'7+#ZR`%c)J_8  @&P\J*.DVJ'+/40498-fqa탕OmNqgcǝw?f뭲~8,|6To 6K>/3/[,ԒmJRp [e  @MϹnU\ ЭOGvHg*,?d]Zog9˻+x|:m~Nde'LlvZybm~ d: V'nVڜ JG**+ gՖ @+X;u @+ X)yy Vҧ:8ē;}' V:M™[X#@h@џs+ }\ P7JvL4]2ʎ޽{+iʮM晻O1OL2It˿ʟ$XHo_8+ @(s`ws @' X)ُI2&]\ceiSݳK#Z>LQv/Wq @ 9WR  @ )XYrnzʶ`㩧+EaWYXx'@@џs+u= 0J>}봓i'#Xb*:#Vvy׸Տ?x gϞW_ŁfDK:Pqv/Wq @ 9WR  @ cSOEC#XƁ)8qgkS^T$/ŕWs @z 9WRϻù  @}?v%ɚ-lʫ V2®*N PW? Vz{89 @aѠʟ 9cvrbZvZ};eex|:vZyb-w’_GO*ű/sʯXr_|eN8ؤ)2BƐ!CʛK/d3b}6N/se @< 9WK @c.вʘn|1SǤNZʫm: @+XiUc  @Pgkj y{F @FϹ}%@W@߾Q3( g@ @(s`nW%@ZH@B+P-#@? VƦ _J~FtZ/n  @ZJϹ]5h!J u6@_8g @`l+X[ @@~+5#ipv$@h)? VZvX @+-ٚڼElޞ2 @(s`elzo  @oԌ@: @+XiUc  @Pgkj y{F @FϹ}%@W@߾Q3( g@ @(s`nW%@ZH@B+P-#@? VƦ _J~FtZΊaÆv5z9 @@^=+z{k^9z VFc' @vQ‹.A>$zwX#@ PP>0.쪘bcm*d++6&@R@2J"ȿdzϾ-H, @=?T,|+|_Ԋ 0{9x+)Ĩt* @@eJ:mO7XQ?4Ju  @ t@edMkOu  @t@ UnB @5+ZM @u  @ 4e  @ @+ݿZG`u^  @ @::5 @4 @4`yV @vk= @I@R'X%@4X@py @hNJsV @+ @ PJP J:A @ @+קZDH @`NIȁ`%  @ |S-"@$ @A@RT$@@@NP @h>J @`}@ @ XS @r XA' @4`T @I@> @ @u)  @9T @O@|}E @$ Xq @ @:V @Vr @ @' Xi>" @@ @ @@+u@uJ @@+9U @ @4_j @ V @ @::% @ t* @ @@ VO + @ PJP J:A @ @+קZDH @`NIȁ`%  @ |S-"@$ @A@RT$@@@NP @h>J @`}@ @ XS @r XA' @4`T @I@> @ @u)  @9T @O@|}E @$ Xq @ @:V @Vr @ @' Xi>" @@ @ @@+u@uJ @@+9U @ @4_j @ V @ @::% @ t* @ @@ VO +M({ǀ_z', ք$ @fٳgL6٤1L3ļO7mS4Mݨ @+#( Pl;g}؍P{ @XpbW,`] @+($PLkgƛ/"ѧ1U謁WlZ @СO>_ǟxYg96`B_RSy @@MJM;K2R%}BaViX P[ @%>0n'm>rE&@4`9UZL ͩrŕה[ՖUZ5 l)\| ;`L!@ 4@eJ-- @V˟+JO4`Y{VZJ‹.A> UZ5 Q+SL1ylVl`ݦ @Q VFI8崳bذaw5Q}K  @:!&?Yѳgs];"X_ @++],p)gk=< @(s`g"@I@Pc(P1l @4@џs+M~j вz o&p6S_h  @@ 9Wu3 @$ XSo 1( 6 @\Ϲ&A5hYJv7@_8/ @+X{ @y7ԅ s g @M.P\JߠG`e^ÛI/B uEtݽL @< VB` 93 @&(s`oP#@ZV@Ҳ]$Pf m!@:? V^p& @@+y u!0Ef @@ 9W7 @-+ XyW}iWoCk1nXnc6 '[b( [ @V(s`Zm&@ZA%/2۞=z MF 7:Zo]#;6;+.h 2|K,W^zq'~uvǝ~ȁ[eV!P|( @@+X> @h`?_,\׻wx_k^V?vq'g}NVtġǯ"ӕF+ǖufUV_m8̾c@_8 @(s`7 @j\[ix230}]YoǡGUٌE^(lzeͶǟx2+bdc`bu7̪fSb_mױKg۫8m+#PQr @ 9WR;N}  @h`Î]L}XPٱNDW6{јtI۔pa&xxǢgϞY٘4:XI~W'Ru[0s/pVJ+ƅ瞝m[pv @MϹqK@K+w/~eB~8}7Ĝ.ئ,m\p˕WL3mmozq fc`edL\ @HEnSW @@Z2Xtp+W_ů۱;!Pޞp Ϊ1vEl @E  @)ВJ7,zW&p%)Gؗ RXr)'K-f<[mCVvQnRnKjȖ馝6CƢ͉l( g @ @џs+ne @@s lri?{w'Gu%"E[H \ RP(nݭ8=,,-h)PH0ݽ]nf;OM߽ٛyŸd+J&[l|r {|x-14HŖZ6|gYg%<+lEX~e‚ ,A%3tEIVΊX$@ P\ P ?k+%6)'~a~˦Cfƛg{8QYY`%}K{ s;-3^x&zɋ+3O Φ5 @W @)ʘ1cB FWműS"Wkp]-wn éQ\ǁ%tu’K*;֖%N -nipSaLmSNJG#:"X'*U!  @T\JV V>=:,U[Jxs~1Wzt9~1uͅ=h裏C1SW[5=2XêN޽{{P+& $/S#FѫWc8S9X-\TFWH^5aQ, Ϊ @=W0 @N>Xjk7|cq畭 ^c/x3w5p- xu[%#̵C8*ݧJq-7nQ5l䴿^~F1{$Svǭ7g!Y.pq'ipȁqjfOzl9أúkb4`X(e@ @  @) X)ǟ.>cmZ..|.S4(PXሣ-[_ 6Q/2; W Vҍ8h`Xbҭcpwqf9fU,ó=_ۆ[\7`%z_UvǬyxZ'2D ?p6 @ y+Xq @S@RhʁcS@ զu7$\rM^9`u{^x׬`%2겋U yvYob_Ö7eO߇s_nλ]'ᰃ ={\LJ-S.H1H}p7[o=Tͱ=4M*d @@޿ V @tbPO> GX~30}ѣGK6B76tӕ h B/0KovoP&ttʓtEq9?p6b3 @=W26 @ <2ձH @(﹂72 @>+ٮj`yKu  @Z)﹂V6 @9@5YN @\{ PlWj0`ͥ @\J+n @ Vr`K@V' @{`=LOJ}Z5@lR] @V {` m7 @@+9k0%PM ?pVu @=W&@ԧ`>UL ?p6Xs. @@+=Wʆ @ g5&8: @y+Xq @S@RV &8T @y+XieCۍ 3JLq Td @  @) XvU8a̘1a=v =ztoګ. @@= Әp9C{* Vrl M`eDv }˯>?a-7 3L?}  @#i&lV;+l"@W@^AȀ} /RXbE /) @ *J @G; @dL@Q @@ V:i @ @@`T< @~+ӖjB @d1 Ёt* @ V  @W{  @dD@P  @@ V: @ @@ @) XvU+ @bJ7 @j$ X @ @@c V՞_J @ @@ Vߥ  @5ש  @ @q+jNԷ`W @ @+] @ Vj  @ Иlw&@_@Rm @ .@wI @@'V:% @ @+jL4`1Y-  @ @+ r @Nt @ @@c VՖhJ㴵 @ @@' V:ۥ @( XDl"@ @4N[) Xjo%@ @Nt @:Y@.G @! XivVK @+jL @ Xd @t` ] @_@Rm @@c V՚ @j, X1 @H@E.K @- XU; @q+jN @5ש  @]( XB|&@ @o۪ n'@ @ Vj @.tq< @ԧ`>U @ @`NIȀ`% @ PkS5"@D @@@RT$@d@@FP @?J @`}@ @j XS @2 X@#( @ԟ`T @Q@> @ @5)  @d @O@RmF @( Xq @ @Vj @ V2@ @' X6U# @@ @ @@ +5@uJ @@+hE @ @_ @ V @ @:% @  4" @ @@ VMՈ + @ PJ P JA @ @+צjD @`NIȀ`% @ PkS5"@D @@@RT$@d@@FP @?J @`}@ @j XS @2 X@#( @ԟ`T @Q@> @ @5)  @d @O@RmF @( Xq @ @Vj @ V2@ @' X6U# @@\Y @ @@= =o޽{֭[=UK] @ + XiئWq @ Jg( @2Oa̘1ڻ @@{C;- @+l'@ @ X4 @r XA#)" @O@6Sb @@k+Q @h``v'@D@RL @ȗ`%_ @ VZ+e? @ JJȑ`%G @ J~JI  @mE˾ @ @VBٍ 3JLq  @ @ |R @* Xi  @ @@++@  @ 6" @ @@+o#%$@L`eBC @# X @ VrpM @d} 0 s @hA@M @ VrxN @dm J{K @4c5 @ 7 @ @@6+l"@W@^?S3M6餡[n鲙~Ï?w&l%INv @@ VaUhxJ-cc AI|?$!5 qTz믽:,鲙vspw;ʋa&J*fWɻ. @>+юjA|auח a3Ol]UÏ<&]=hա__J 2wλҽ+).povq< @ 7 @w߅ŖZ6|eT?뗭\`sο 捃͛.v𺵢]heBa߇3O?%]ӌ{3O @ VvJNhI@vu&V/L˚/]Qog>48,ЂrkgZ{JkEvo.̷"i!VYyptCfܛ9h$E$@(o~&lzGx_w  }(1{ ˶|GoVYy0۬g~6zPED+h @t`ʇO>PaKW V8S5uuq+(U\~({y–op7.*1IW[J U&,s>[.o3|m8 {Kj) .o @D@R`/BMW]epC#;$mʙ悕*< Aݺw 2KXzaI&-wYzY&L6٤n􉧞AMsB.O? oVz> 1xm~#Z]Fax\`0{# ~*yf qғTo^?f0s#-;?"·mm ?mƌ{oz߇y登P,={ݻ79]g}oTp d=gnR߸"sχ} ^yaI' mQoz+  @@ * A•$)g{•Z3)WW~|sы"Wɶj,Nڂ.o @D@R`|aNoaPٿʫuCnJWT V/<0>cZ|±a߯Ryr 8pn n+_96,آr2VۆOgp}'L?=+L4DҙJ;2|V*X׃7lVZ|5II4ᔓ^8#s]{ ,Ka7Jt~a׿.'3lO2}Mp!;Jv+\bY5;>^vkߪFqlT L~=qxF-M`#Zڥl믿+A)K/jRξ;޼yȭójS t;^:}E藮bMV]%l.83baC, @eBdzW5Tyi+a&,~n_j+NJ;NȨ`0[lbF1xC. 0WwB2Xf-kۆ4> xwNCt*3q̓>wUU\`eM6ÆN?&=bؖN;7nec1p!3tT`%o;a؃%ٻWl{ b7i{ L3u+>o4r.xe2ɅKοࢴ7XCe{^*_ui+e @@-*Ɂk謳/~{UWM9Iv`] ) J)mSmv~=w/|)o:}ܡ2XI*=\ߟޤw@;oZ'rZNa Om[ni8cU}|܉'ѣ? /|J˦Phz(̴<sE85q aHv /JXc8w%B%-+{\vwT$9 yՋ/JV}vt_uA71= V|TRX/$_b},wq" _5_Q{wN=鄰&ᎻWgww&99qkOo֛+'N_~eFSN<.ɴkuko:ʩ7`g 葜d8Ƕ;9}u\rVb8.%/0:^)q,] * ?N8cxqA;_v1=_|JCWuźk'ɿ8nHWN gӱ:lXޛN*=~zJ+༳asck @rB,w⫤ S=+au76Y7ݰKY7Y++ @h`eKW>l{a9/m8Jʩ2X-!2]:qdZkˆ˕h:㴓]#>6\ytovek:sZff&4Xpbo)*lu*nǎgVJ2m޺OI /4p«]2]nnf-{_f%|jSiϚV{pm' C31roKCƩuf{װ{%pfcהOSxUC2M^% u\LXGK: Vzoq1Co9 -jʽw{p @@+Z U|wӊK|%mٷ Wyvwq/]"W`S~9'Jg @s:X|W嫵k)yMX|V+;}8g|,>yxW+[^}ťaM<6td0 :sZff&4X/ ->'Q\|ե/^9ka d'O<;a\X*ݡgwX1>JxW۞3]JeskΔ޳qۯR{VZtװ˅cXlE =`fo2nM/=b ߉W _vy~XBq\8u=^޼oK*{ŞjS|MۜenJ|U}wVy  @@ m Lڲo &٧tcV]a{~yk\V; V:) @h`G1GV^ib*Hأea&Jř`cWZz~Dq8z|=vsd1,r|]V|5Q:sZff&4Xר¯~ƶ5wt]it^aPS uj!wybĶI]S8q3I V=xO3Q/<oũ2)=6\}޺dVud_ {im9 VM @L 4lK~V qLW^zQX*zw0qm^ZS:+# M6ir3{y0P륳:jffB_yIx/1\W* VN:‹mq;'*HOi 0ŗo-31>ݒo ;O'WaEڲgx4bJM+﮼0S%:$X_JÆ̔:v=^peae*9<#'}08 M-64t1~f @K[ W]^B3+* ~{QZ, Vj @h`ZmjcT+-b*4@ya'Kx`谴U??G {'S{"AʇΥcS$8{=NB5S:6)=|kއ]rY8qcA]f\Ҳ} a4Us9{ϸtddc$$g{ŲWXU+cf*͒`N<3N/=4/cn!Ms#LJ?Q5`VbLcr,x[ + SN9euj|(lcg7/p܉^?Wm˯Zxwυ80}eJJd(HGBvք+D8X}~B8}̾&JgI @s6X9W]SVg}VJqCerqeą>gt 8vDmNXL|uV,8챯J ;'QxSgq^Z ]y+CއCq{sqj)j-|}ǭ75 d^{*;MiOF k;є+[) @bWEuILFU 㛔.yU\Z6~J]-R7%ͷ߆ .җ,f @@:2scKJ=*&oԽ{ަc+m3 @ 7 a%BlG>&l wǖ:3O=!zeOr B|RNs'Sisw7)7\7l8Vn?d[1/K2U{[̔>M DZ3&9gkއ~QXj"^<1Ԩ%DCY:w357~ 75<ӌ3K/:?=v̗W^gyzĝKʞ/7ҽw,!N=mHGG\>c!^/R~>ȣᣏ>.3kV-n5ԽWUPYsz `%#?RV[4KGm6dGUPxGߛݷ 9Ta9+eT @xjP-\PeXJ8 @f  m)Z\#ΙrLav|LՂ)('g}nrH3@|\z?{kL3>8\x}gzfXgM,W 'RWWlp)MB[&zЁᅑ#CO4X=oyW%Ƕ`u5KV^ukgC0SڨmB/(|Kw:UUbS~]v+]UG5Y_"mwIq9ڮZcguo6VY~K wvviM  @ w5 @Z%pJz5Kk{t>>Lql*{‰e,WmYݛ|\zyxGla?V}+Jw=Ene{]v3כũZ 4W,>Ԛ~nOOza܍JH66ر>ro'n%Y~@k6XݪOwla&O> ʈ=.Tٛ$_%_I_Uٶ1:#N=-XJXx]R獊:q8>G|W٪c#_|)w!~V=|6tbhܫ}p7 CォDZZ;p`> m~Ws{#_#{UN~m¶[o&h͕@7& @ VFJH V&=W.<03'էT?=;q~}|'~0vGC^C#9Wia'j7٧5u\+q_ggq[O!W_]]}eaȭ0{ҙh~г89o>,1=@3L?}a[x|'?.W7R8MtI4}Ro 1l딵{5¿G!@qo.j9C MJ6E @Wu/p1Dž+&gޒ^5|iw-byT1C @@+oB @TTe8~'?[/bZm'Lآ0 @4n۫9 Pn_ qtZ:9g^K}l#@ @+jH4`1]'@ 'rzcò3oްЂ }k9˶Y @ @1+jMԿ`X k MCì&x\)  @ȳ`%ϭ @+B @&X@2t$@dZ@Q8 @ȫ`%- @+-J @&H@2Al"@d^@&R@ @ȣ`% @ Vod @ fJ@ȅ`%ͤ @ 7JZLy  @^ @ @M6qٙ JnJA  @ @ O< @Z/ Xi=  @ @@+# @ W\5 @ @@^+yi)$@M@6/{ @ @V VZd' @@+k2&@ @<VJHh`f @ @ @\ Vrl M @Yd 0a ss @hQ@" @ Vrt N @Ydu 0 s$ @hV@,  @\ Vr| O @Yde >JM @ VXIȽ@悕܋ @({н{Э[f  @* Xk)7 @B@fRH @@2,lVގ @ @ ^ՖQ. @@+s4 @* Xb% @ 7  @ @@+Yle"@_@~Cg @ @M+MH @ԅ`.Q% @ @ k @:F@1B @+e @u# XT @Ȓ`%K, @t3 @ @T@R!@ԕ`Se @ @ +r @:V@ұF @7 @>+ٮjE @], Xpy @@+5uZ @hlJc @+ X߶U3 @BJ4 @:5 @4`q^  @w @t`] PcJ @S@Ҙ @@ V꿍Ր @@@.IJ'  @4`\  @4F;% @t`] INv @h,Jc @# XiVS @DJ'b @+R @ 8ik5%@K@X @ INv @@' V: @ @1+jI4`\  @ @+ @.tK @ @@ V꿍ՐhLJcZ @ @@+5vz @@ Ve  @ @+ݾjG4`q^  @ @:5 @ +] @ Pm[5#@[@ @ P#J` .n'@ @g @@ @ @5)  @d @O@RmF @( Xq @ @Vj @ V2@ @' X6U# @@ @ @@ +5@uJ @@+hE @ @_ @ V @ @:% @  4" @ @@ VMՈ + @ PJ P JA @ @+צjD @`NIȀ`% @ PkS5"@D$è_ ~/Ø1c:.Cȇ@SOfeЧ|w3͘7SJJ30V @r. Xy*>a^Ga ?J)Mۋ!Xi# @y䡕\ t?[oS/w0o =ztu ?4&|٧W_ Oxx^6`TO).BtJ $TX{ OHWW @ |.B5=W+$@dZ@Q8,TnЍ*l&B<7 @]"ÕfnJ6.J`.@@ $UVX~FePo @@zkkEҮw0 @ 6 w˯>?Ao @])ZvimՕEi+m&s @ \4B G3ƌcWȄ@sݻ5ejm!+ @ _| #y^[J @ {`%{ @:B@A*y}P*V @T ߫+]z۸8 @f:1.nOdO ߫+ٻ PtT*U Хy^%X  @5Ԍ։ ht>hvS @ {y^%X޽D @ts @@^TU @.*J6.N`fNL@ @ @*J%%"@t`#UJU"@t@^W Vqq @@+5ub] ԟȞ@^W Vw/) @#+"Ub @KJҥ @j& Xi'_|sχ _7<ã?cI' ݺuK[3Ơ? _uj OQ@]7 @*J.o7&@Wao.yLoBzI KݻI&tUN==t]%=_lfx]8҃ԒK˭r۴~1pL2M>dlҨp '/T U !О!lۦ=`e+׉gD[ ߫+ М` 3,aݕ}aO ^w}>qMa>}Yx_?c{YJ-7 pUCΛE @ {`%7" @Z! X) `VЃvty կҙ&<ç}f0sb,/L9唥V?Y|~߯s>{׋=iF׳+~*sχ؃#Nq+ܗoVq]*1X=Ђ {79a:W @JRg7 @~ Z VzѰ͟vLo;]<;}wst9ጳ l}ŸS8`äNZ:=h0u[v5IV}=]m[liCe4qᏆmq/2{‰a7UΜΙa?QڵoZ Vv.,l6!jqjó>bU9aЀ&㌴m˰YRzZ]zt}AW\;M_v1G8S~.YOs VJ_–n_x@/wAܥ_QϏH;=Y@5 @u U:T PE@R@i)X N_{? sq>ck"ץkoqKi-7/h`%yMΗ+GM^0 et`eW*^sUUdfl !Nsnn@fMko.lßÓO=̙6Xots왳۵8ygQç~^j`(W r&_GqXqu[+SOy}POm. @@}{`>? @T V "Ղꪡ ;WxԤųU+׊DO_yEaWH+Ɇx]$?eN=(Ğ?R^Mz6McPQ'a+,l9O_YuVRZL[h:ʐ S,5+vwKL;4ḣ,nWʶt&9Tȱ@^W Vr|): @/8 kecA,gR>8]f\X;¦o⎻>vdX>k-Zͷ߆9Io+A.x"s^xW̓-f= c/ &N+1Zʯ?$~e CォxWzQ!̉S1rIK.=Jbϒdjmnrk{%?K_8+t&*@mH]%b8qG%ef++W+Z1r0KϞq8&o]L{:kYܞU:x}yt$qB @ {`%7 @4S:b8#B.η5b^8㴦qqʫ[aLvٹ|@alߘn;úk.ǙR==t{M8}z@W_}.Ł_q&jKV V>:eOkWQ/ -yRTSRUa+FC'm?Cq~&N{$ϿbX~e5W\.W֯ʀ+/+^0sͷ}8(]u~wKgt]v:\:l U"@r.UxOhF@ L+.\B qPnҰr˦̈g nEXXvk^0D̀kCz`%Be=cb# ڳ$ZVS:yrL<ŗ]ra*.W'{tj}ҁ㺷_{%Zj> /^#+빓$\{TL~_WoXsq=b8w㠁eRX%xiԨCL6?t]v:\:l U"@r.UxOhF@R{(>H 㚼57&IDATN9팴B!?7t֭KOLJ}tgϙdߟ]rd8x{E̷"nrS\:sb<vlF/=? 7tKuhcaEKT+ԮvXneeSe_%t}CxǒV+?^#6TtI7g&>ƛ=x=pYPSyhW+q| ,Nxò+>]ӎ`+ӋL^q S~Sl @x+W<~=w9昽HRz b^:{i3&>OtUR~+q 8G)lͶL7vl٦Ia1P*8/YnZͽ,;v;}Y\w=^{g+v?~xL5=Vbϛ]2=K^.fOxW[{ZeV\%-+ӋL^q S~Sl @x+$hΪ2<)r[opUN^~tuCW]^ET9EKaGKJk0۬2|ٿ =y\+-et+ϡܽ{,5t8oV^q;TS)"ץi̓=f~t{+tNgNC @ {`%7 @Zp\p%SNKK{V|auק]t9a?.'3~n8 z*ĉ_:N:bb8v_VrZ%_'G kzfomsqUሣ^r^|޶AP/J=Pi;L(X*JN @)+86Np})>?ÿt;~,XSO^={CcqaΚmfAXpE{%>CeOEc=6qsTaTJ3?3O6OvLćgtL@lq^^ zb%+{쾘7qOn0-hWmgHz`]5+k^RO s"@(JRS= @`YeL(m}\J`̛xˬy'FFFl}}2yGum>0lϦ ; VU)qf_O ~~>վo|(x.,;0'\#-c/{醽W#9~]޸sz!KJ DZޗz @(JR4 @XX _aM_^9m6'F{߽6ދ϶jp iǾ&nW:|Ckݯ=vYz6p! ?b ׿v=c j}ץ @J=Ե͆ hmr7ĿSOs;?|=d=>|M_-a9; ]-\0l{>ԓO@J=Ц+ P@U2֗*  @+ XY^ hѢaݿzQ`&z`4%@4.Pq` @@JV @ RO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @ 7R+$ @# XQ 'P @hX*J  @+` KRO @iC9S;K=4 F@ը: @@P% XiM ,ʲdl'@RUq3'@_#@ARO4Hf @@ ܹsٳf<~ X㱁 @ JMPu |%K#?4̜9R$͊ B/^${add$uġ˱ꊕ{ @@ J Uc @`T‹. ?D]o k @@V$T`~Ly U'yJ`enF(_@R~̀+¯~N`maXs5=>)@|P]{:ދ6bG AP@aSD@}+Wꛙ @ \^ @K3!@ s̕~pbɒ%W< @pFFFB(lˋ{D-D  @uVY @ @@f @+4  @+ X5 @J=4 @H@Q3B`e"@ @]JWo @@]i6 @ `%F( 0`ʀA G @`: @) XfE @ Vn @ V @- Xiw͞W@Roo͌ @4o @&@ @ V{3'@_#@ @+ - @ `%1  @ @vݬ  @+  @ @JvI`evA @fLC@Ҏ>% @ Y@2dp#@ I@2$h!@ @v Vo%@# XiO͔ @( X"] @( X"] @ @@{+鵙 @fK @C n @C  @ @v,  @ Vs3&@ @!Vl @+ % @/ XfHS@ξ5 @$$6< @!JCvK @u V @fN @ + q MhP@ ] @ @@z{kf @@+ @ @@"J"X @4'@ @:+uլ @k @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ JMP @' XfD @$$@5$ @ 삕 L@ @&0cƌi  @+3 @@@҂&" *lŋ%KgyU 0Y @S ^T9s+VlY @-h array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'b6b841ac8f86f7358245'); build/blocks/block-coauthor-avatar/index.js000060400000013410147177171730014767 0ustar00!function(){var e,t={601:function(e,t,l){"use strict";var o=window.wp.blocks,n=window.wp.element,r=window.wp.primitives,a=(0,n.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(r.Path,{fillRule:"evenodd",d:"M7.25 16.437a6.5 6.5 0 1 1 9.5 0V16A2.75 2.75 0 0 0 14 13.25h-4A2.75 2.75 0 0 0 7.25 16v.437Zm1.5 1.193a6.47 6.47 0 0 0 3.25.87 6.47 6.47 0 0 0 3.25-.87V16c0-.69-.56-1.25-1.25-1.25h-4c-.69 0-1.25.56-1.25 1.25v1.63ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm10-2a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z",clipRule:"evenodd"})),i=window.wp.i18n,u=window.wp.blockEditor,s=window.wp.components,c=window.wp.data,h=l(184),p=l.n(h);function v(e){let{dimensions:t,style:l,className:o}=e;const r=(0,n.useMemo)((()=>function(e){let{width:t,height:l}=e;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`\n\t\t\t\n\t\t\t\n\t\t`.replace(/[\t\n\r]/gim,"").replace(/\s\s+/g," ")).replace(/\(/g,"%28").replace(/\)/g,"%29")}`}(t)),[t]);return(0,n.createElement)("img",{alt:(0,i.__)("Placeholder image"),className:o,src:r,style:l,width:t.width,height:t.height})}var d=JSON.parse('{"u2":"co-authors-plus/avatar"}');(0,o.registerBlockType)(d.u2,{edit:function(e){var t;let{context:l,attributes:o,setAttributes:r}=e;const{isLink:a,rel:h,size:d,verticalAlign:g,align:f}=o,m=(0,c.useSelect)((e=>e("co-authors-plus/blocks").getAuthorPlaceholder()),[]),_=l["co-authors-plus/author"]||m,w=l["co-authors-plus/layout"]||"",{avatar_urls:b}=_;if(!b||0===b.length)return null;const y=Object.keys(b).map((e=>({value:e,label:`${e} x ${e}`}))),k=(0,u.__experimentalUseBorderProps)(o),x=null!==(t=b[d])&&void 0!==t?t:"";return(0,n.createElement)(n.Fragment,null,"default"!==w?(0,n.createElement)(u.BlockControls,null,(0,n.createElement)(u.BlockAlignmentToolbar,{value:f,onChange:e=>{r({align:e})},controls:["none","left","center","right"]})):null,(0,n.createElement)("div",(0,u.useBlockProps)({className:p()({[`align${f}`]:"default"!==w&&f&&"none"!==f})}),""===x?(0,n.createElement)(v,{className:k.className,dimensions:{width:d,height:d},style:{height:d,width:d,minWidth:"auto",minHeight:"auto",padding:0,verticalAlign:g,...k.style}}):(0,n.createElement)("img",{style:{...k.style,verticalAlign:g},width:d,height:d,src:`${b[d]}`})),(0,n.createElement)(u.InspectorControls,null,(0,n.createElement)(s.PanelBody,{title:(0,i.__)("Avatar Settings","co-authors-plus")},(0,n.createElement)(s.SelectControl,{label:(0,i.__)("Avatar size","co-authors-plus"),value:d,options:y,onChange:e=>{r({size:Number(e)})}}),(0,n.createElement)(s.ToggleControl,{label:(0,i.__)("Make avatar a link to author archive.","co-authors-plus"),onChange:()=>r({isLink:!a}),checked:a}),a&&(0,n.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,i.__)("Link rel","co-authors-plus"),value:h,onChange:e=>r({rel:e})})),"default"===w?(0,n.createElement)(s.PanelBody,{initialOpen:!1,title:(0,i.__)("Co-Authors Layout","co-authors-plus")},(0,n.createElement)(s.SelectControl,{label:(0,i.__)("Vertical align","co-authors-plus"),value:g,options:[{value:"",label:(0,i.__)("Default","co-authors-plus")},{value:"baseline",label:(0,i.__)("Baseline","co-authors-plus")},{value:"bottom",label:(0,i.__)("Bottom","co-authors-plus")},{value:"middle",label:(0,i.__)("Middle","co-authors-plus")},{value:"sub",label:(0,i.__)("Sub","co-authors-plus")},{value:"super",label:(0,i.__)("Super","co-authors-plus")},{value:"text-bottom",label:(0,i.__)("Text Bottom","co-authors-plus")},{value:"text-top",label:(0,i.__)("Text Top","co-authors-plus")},{value:"top",label:(0,i.__)("Top","co-authors-plus")}],onChange:e=>{r({verticalAlign:""===e?void 0:e})},help:(0,i.__)("Vertical alignment defaults to bottom in the block layout and middle in the inline layout.","co-authors-plus")})):null))},icon:a})},184:function(e,t){var l;!function(){"use strict";var o={}.hasOwnProperty;function n(){for(var e=[],t=0;t=r)&&Object.keys(o.O).every((function(e){return o.O[e](l[u])}))?l.splice(u--,1):(i=!1,r0&&e[c-1][2]>r;c--)e[c]=e[c-1];e[c]=[l,n,r]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},o.d=function(e,t){for(var l in t)o.o(t,l)&&!o.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={893:0,30:0};o.O.j=function(t){return 0===e[t]};var t=function(t,l){var n,r,a=l[0],i=l[1],u=l[2],s=0;if(a.some((function(t){return 0!==e[t]}))){for(n in i)o.o(i,n)&&(o.m[n]=i[n]);if(u)var c=u(o)}for(t&&t(l);s array('wp-block-editor', 'wp-blocks', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'd61297f0bd62592218f0'); build/blocks/block-coauthor-description/index.css000060400000000075147177171730016213 0ustar00.wp-block-co-authors-plus-description a{pointer-events:none} build/blocks/block-coauthor-description/index.js000060400000004474147177171730016046 0ustar00!function(){var t={184:function(t,e){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t=[],e=0;et("co-authors-plus/blocks").getAuthorPlaceholder()),[]),p=n["co-authors-plus/author"]||c,{description:f}=p;return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.BlockControls,null,(0,e.createElement)(a.AlignmentControl,{value:u,onChange:t=>{o({textAlign:t})}})),(0,e.createElement)("div",i({},(0,a.useBlockProps)({className:s()({[`has-text-align-${u}`]:u,"is-layout-flow":!0})}),{dangerouslySetInnerHTML:{__html:f.rendered}})))},icon:o})}()}();build/blocks/block-coauthor-image/block.json000060400000003160147177171730015114 0ustar00{ "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "co-authors-plus/image", "version": "1.0.0", "title": "Co-Author Featured Image", "category": "theme", "description": "Uses your theme's image sizes to display a scalable avatar for a co-author with a guest author profile. Does not fallback to Gravatar images.", "keywords": [ "coauthors" ], "supports": { "__experimentalBorder": { "color": true, "radius": true, "width": true, "__experimentalSelector": "img, .block-editor-media-placeholder", "__experimentalSkipSerialization": true, "__experimentalDefaultControls": { "color": false, "radius": false, "width": false } }, "spacing": { "margin": true, "padding": true, "__experimentalDefaultControls": { "margin": false, "padding": false } } }, "usesContext": [ "co-authors-plus/author", "co-authors-plus/layout" ], "attributes": { "isLink": { "type": "boolean", "default": false }, "rel": { "type": "string" }, "aspectRatio": { "type": "string" }, "width": { "type": "string" }, "height": { "type": "string" }, "scale": { "type": "string", "default": "cover" }, "sizeSlug": { "type": "string" }, "verticalAlign": { "type": "string" }, "align": { "type": "string" } }, "textdomain": "co-authors-plus", "editorScript": "file:./index.js", "editorStyle": "file:./index.css", "style": "file:./style-index.css" }build/blocks/block-coauthor-image/index.asset.php000060400000000310147177171730016057 0ustar00 array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '97710ad46fb953ce4975'); build/blocks/block-coauthor-image/index.js000060400000024330147177171730014576 0ustar00!function(){var e,t={62:function(e,t,l){"use strict";var o=window.wp.blocks,n=window.wp.element,a=window.wp.primitives,i=(0,n.createElement)(a.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(a.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v8.4l-3-2.9c-.3-.3-.8-.3-1 0L11.9 14 9 12c-.3-.2-.6-.2-.8 0l-3.6 2.6V5c-.1-.3.1-.5.4-.5zm14 15H5c-.3 0-.5-.2-.5-.5v-2.4l4.1-3 3 1.9c.3.2.7.2.9-.1L16 12l3.5 3.4V19c0 .3-.2.5-.5.5z"})),r=window.wp.i18n,s=window.wp.blockEditor,u=window.wp.components,c=window.wp.data,h=window.wp.coreData;const p=(0,n.createElement)(n.Fragment,null,(0,n.createElement)(u.__experimentalToggleGroupControlOption,{value:"cover",label:(0,r._x)("Cover","Scale option for Image dimension control")}),(0,n.createElement)(u.__experimentalToggleGroupControlOption,{value:"contain",label:(0,r._x)("Contain","Scale option for Image dimension control")}),(0,n.createElement)(u.__experimentalToggleGroupControlOption,{value:"fill",label:(0,r._x)("Fill","Scale option for Image dimension control")})),g="cover",d={cover:(0,r.__)("Image is scaled and cropped to fill the entire space without being distorted."),contain:(0,r.__)("Image is scaled to fill the space without clipping nor distorting."),fill:(0,r.__)("Image will be stretched and distorted to completely fill the space.")};var m=e=>{let{clientId:t,attributes:{aspectRatio:l,width:o,height:a,scale:i,sizeSlug:c},setAttributes:h,imageSizeOptions:m=[]}=e;const _=(0,u.__experimentalUseCustomUnits)({availableUnits:(0,s.useSetting)("spacing.units")||["px","%","vw","em","rem"]}),v=(e,t)=>{const l=parseFloat(t);isNaN(l)&&t||h({[e]:l<0?"0":t})},f=(0,r._x)("Scale","Image scaling options"),w=a||l&&"auto"!==l;return(0,n.createElement)(s.InspectorControls,{group:"dimensions"},(0,n.createElement)(u.__experimentalToolsPanelItem,{hasValue:()=>!!l,label:(0,r.__)("Aspect ratio"),onDeselect:()=>h({aspectRatio:void 0}),resetAllFilter:()=>({aspectRatio:void 0}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Aspect ratio"),value:l,options:[{label:(0,r.__)("Original"),value:"auto"},{label:(0,r.__)("Square"),value:"1"},{label:(0,r.__)("16:9"),value:"16/9"},{label:(0,r.__)("4:3"),value:"4/3"},{label:(0,r.__)("3:2"),value:"3/2"},{label:(0,r.__)("9:16"),value:"9/16"},{label:(0,r.__)("3:4"),value:"3/4"},{label:(0,r.__)("2:3"),value:"2/3"}],onChange:e=>h({aspectRatio:e})})),(0,n.createElement)(u.__experimentalToolsPanelItem,{className:"single-column",hasValue:()=>!!a,label:(0,r.__)("Height"),onDeselect:()=>h({height:void 0}),resetAllFilter:()=>({height:void 0}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.__experimentalUnitControl,{label:(0,r.__)("Height"),labelPosition:"top",value:a||"",min:0,onChange:e=>v("height",e),units:_})),(0,n.createElement)(u.__experimentalToolsPanelItem,{className:"single-column",hasValue:()=>!!o,label:(0,r.__)("Width"),onDeselect:()=>h({width:void 0}),resetAllFilter:()=>({width:void 0}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.__experimentalUnitControl,{label:(0,r.__)("Width"),labelPosition:"top",value:o||"",min:0,onChange:e=>v("width",e),units:_})),w&&(0,n.createElement)(u.__experimentalToolsPanelItem,{hasValue:()=>!!i&&i!==g,label:f,onDeselect:()=>h({scale:g}),resetAllFilter:()=>({scale:g}),isShownByDefault:!0,panelId:t},(0,n.createElement)(u.__experimentalToggleGroupControl,{__nextHasNoMarginBottom:!0,label:f,value:i,help:d[i],onChange:e=>h({scale:e}),isBlock:!0},p)),!!m.length&&(0,n.createElement)(u.__experimentalToolsPanelItem,{hasValue:()=>!!c,label:(0,r.__)("Resolution"),onDeselect:()=>h({sizeSlug:void 0}),resetAllFilter:()=>({sizeSlug:void 0}),isShownByDefault:!1,panelId:t},(0,n.createElement)(u.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Resolution"),value:c||"thumbnail",options:m,onChange:e=>h({sizeSlug:e}),help:(0,r.__)("Select the size of the source image.")})))};function _(e){let{dimensions:t,style:l,className:o}=e;const a=(0,n.useMemo)((()=>function(e){let{width:t,height:l}=e;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`\n\t\t\t\n\t\t\t\n\t\t`.replace(/[\t\n\r]/gim,"").replace(/\s\s+/g," ")).replace(/\(/g,"%28").replace(/\)/g,"%29")}`}(t)),[t]);return(0,n.createElement)("img",{alt:(0,r.__)("Placeholder image"),className:o,src:a,style:l,width:t.width,height:t.height})}function v(e,t){var l,o;return null==e||null===(l=e.media_details)||void 0===l||null===(o=l.sizes[t])||void 0===o?void 0:o.source_url}var f=l(184),w=l.n(f),b=JSON.parse('{"u2":"co-authors-plus/image"}');(0,o.registerBlockType)(b.u2,{edit:function(e){let{attributes:t,setAttributes:l,context:o,clientId:a}=e;const{aspectRatio:i,height:p,isLink:g,rel:d,scale:f,sizeSlug:b,verticalAlign:x,width:S,align:y}=t,E=(0,c.useSelect)((e=>e("co-authors-plus/blocks").getAuthorPlaceholder()),[]),C=o["co-authors-plus/author"]||E,k=o["co-authors-plus/layout"]||"",I=(0,c.useSelect)((e=>0!==C.featured_media&&e(h.store).getMedia(C.featured_media,{context:"view"})),[C.featured_media]),{imageSizes:O,imageDimensions:B}=(0,c.useSelect)((e=>e(s.store).getSettings()),[]),A=O.map((e=>{let{name:t,slug:l}=e;return{value:l,label:t}})),T=function(e,t,l){if(e&&"full"===l)return l;const o=function(e,t){if(!e)return Object.keys(t);const l=Object.keys(e.media_details.sizes),o=Object.keys(t);return Array.from(new Set([...l.filter((e=>o.includes(e)))]))}(e,t);return l&&o.includes(l)?l:o[0]}(I,B,b),N=function(e,t,l){if(!e)return{};const o=e.media_details.sizes[l];if("full"===l)return{width:o.width,height:o.height};const n=t[l];if(!0===n.crop||n.width===n.height)return{width:n.width,height:n.height};const a=o.width/o.height;return n.width>n.height?{width:n.width,height:n.width/a}:{width:n.height*a,height:n.height}}(I,B,T),P=I?{}:function(e,t){const l=e[t];return!0===l.crop||l.width===l.height?{width:l.width,height:l.height}:l.width>l.height?{width:l.width,height:l.width}:{width:l.height,height:l.height}}(B,T),z=(0,s.__experimentalUseBorderProps)(t),D=0!==C.id&&!1===I;return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(m,{clientId:a,attributes:t,setAttributes:l,imageSizeOptions:A}),""===k?(0,n.createElement)(s.BlockControls,null,(0,n.createElement)(s.BlockAlignmentToolbar,{value:y,onChange:e=>{l({align:e})},controls:["none","left","center","right","wide","full"]})):null,D?null:(0,n.createElement)("figure",(0,s.useBlockProps)({className:w()({[`align${y}`]:!k&&y&&"none"!==y})}),I?(0,n.createElement)("img",{alt:(0,r.__)("Author featured image","co-authors-plus"),className:z.className,src:v(I,T),style:{width:!S&&p?"auto":S,height:!p&&S?"auto":p,aspectRatio:i,objectFit:f,verticalAlign:x,...z.style},width:N.width,height:N.height}):(0,n.createElement)(_,{className:z.className,dimensions:P,style:{width:!S&&p?"auto":S,height:!p&&S?"auto":p,aspectRatio:i,objectFit:f,verticalAlign:x,...z.style}})),(0,n.createElement)(s.InspectorControls,null,(0,n.createElement)(u.PanelBody,{title:(0,r.__)("Image Settings","co-authors-plus")},(0,n.createElement)(u.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Make featured image a link to author archive.","co-authors-plus"),onChange:()=>l({isLink:!g}),checked:g}),g&&(0,n.createElement)(u.TextControl,{__nextHasNoMarginBottom:!0,label:(0,r.__)("Link rel","co-authors-plus"),value:d,onChange:e=>l({rel:e})})),"default"===k?(0,n.createElement)(u.PanelBody,{initialOpen:!1,title:(0,r.__)("Co-Authors Layout","co-authors-plus")},(0,n.createElement)(u.SelectControl,{label:(0,r.__)("Vertical align","co-authors-plus"),value:x,options:[{value:"",label:(0,r.__)("Default","co-authors-plus")},{value:"baseline",label:(0,r.__)("Baseline","co-authors-plus")},{value:"bottom",label:(0,r.__)("Bottom","co-authors-plus")},{value:"middle",label:(0,r.__)("Middle","co-authors-plus")},{value:"sub",label:(0,r.__)("Sub","co-authors-plus")},{value:"super",label:(0,r.__)("Super","co-authors-plus")},{value:"text-bottom",label:(0,r.__)("Text Bottom","co-authors-plus")},{value:"text-top",label:(0,r.__)("Text Top","co-authors-plus")},{value:"top",label:(0,r.__)("Top","co-authors-plus")}],onChange:e=>{l({verticalAlign:""===e?void 0:e})},help:(0,r.__)("Vertical alignment defaults to bottom in the block layout and middle in the inline layout.","co-authors-plus")})):null))},icon:i})},184:function(e,t){var l;!function(){"use strict";var o={}.hasOwnProperty;function n(){for(var e=[],t=0;t=a)&&Object.keys(o.O).every((function(e){return o.O[e](l[s])}))?l.splice(s--,1):(r=!1,a0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[l,n,a]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},o.d=function(e,t){for(var l in t)o.o(t,l)&&!o.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={461:0,286:0};o.O.j=function(t){return 0===e[t]};var t=function(t,l){var n,a,i=l[0],r=l[1],s=l[2],u=0;if(i.some((function(t){return 0!==e[t]}))){for(n in r)o.o(r,n)&&(o.m[n]=r[n]);if(s)var c=s(o)}for(t&&t(l);u array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '3a57c4d58ba62fabefff'); build/blocks/block-coauthor-name/index.js000060400000006177147177171730014445 0ustar00!function(){var e={184:function(e,t){var n;!function(){"use strict";var o={}.hasOwnProperty;function l(){for(var e=[],t=0;te("co-authors-plus/blocks").getAuthorPlaceholder()),[]),g=n["co-authors-plus/author"]||m,{link:d,display_name:f}=g,w=h;return(0,t.createElement)(t.Fragment,null,(0,t.createElement)(r.BlockControls,null,(0,t.createElement)(r.AlignmentControl,{value:v,onChange:e=>{l({textAlign:e})}})),(0,t.createElement)(w,(0,r.useBlockProps)({className:c()({[`has-text-align-${v}`]:v})}),s?(0,t.createElement)("a",{href:d,rel:p,onClick:e=>e.preventDefault()},f):f),(0,t.createElement)(r.InspectorControls,null,(0,t.createElement)(a.PanelBody,{title:(0,u.__)("Settings","co-authors-plus")},(0,t.createElement)(a.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,u.__)("Make co-author name a link","co-authors-plus"),onChange:()=>l({isLink:!s}),checked:s}),s&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.TextControl,{__nextHasNoMarginBottom:!0,label:(0,u.__)("Link rel","co-authors-plus"),value:p,onChange:e=>l({rel:e})})))),(0,t.createElement)(r.InspectorControls,{group:"advanced"},(0,t.createElement)(a.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,u.__)("HTML element","co-authors-plus"),options:[{label:(0,u.__)("Default (

)"),value:"p"},{label:"",value:"span"},{label:"

",value:"h1"},{label:"

",value:"h2"},{label:"

",value:"h3"},{label:"

",value:"h4"},{label:"

",value:"h5"},{label:"
",value:"h6"}],value:h,onChange:e=>l({tagName:e})})))},icon:l})}()}();build/blocks/block-coauthors/block.json000060400000002631147177171730014221 0ustar00{ "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "co-authors-plus/coauthors", "version": "1.0.0", "title": "Co-Authors", "category": "theme", "description": "Displays the co-authors of a post by using blocks to create a template. Start with co-author name and add any other co-author blocks.", "supports": { "html": false, "color": { "link": true, "text": true, "background": true, "__experimentalDefaultControls": {} }, "typography": { "fontSize": true, "lineHeight": true, "__experimentalFontFamily": true, "__experimentalTextDecoration": true, "__experimentalFontStyle": true, "__experimentalFontWeight": true, "__experimentalLetterSpacing": true, "__experimentalTextTransform": true, "__experimentalDefaultControls": {} }, "spacing": { "margin": true, "padding": true, "blockGap": true, "__experimentalDefaultControls": { "margin": false, "padding": false, "blockGap": false } }, "layout": true }, "attributes": { "layout": { "type": "object", "default": { "type": "default" } }, "textAlign": { "type": "string" } }, "usesContext": [ "postId" ], "textdomain": "co-authors-plus", "editorScript": "file:./index.js", "style": "file:./style-index.css" }build/blocks/block-coauthors/index.asset.php000060400000000310147177171730015162 0ustar00 array('wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '73645b9145fe40093212'); build/blocks/block-coauthors/index.js000060400000020503147177171730013677 0ustar00!function(){var e,t={843:function(e,t,o){"use strict";var r=window.wp.blocks,n=window.wp.element,a=window.wp.primitives,l=(0,n.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(a.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})),c=window.wp.blockEditor,s=window.wp.components,i=window.wp.apiFetch,u=o.n(i),h=window.wp.data,p=window.wp.i18n,v=(0,n.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(a.Path,{fillRule:"evenodd",d:"M5 11.25h3v1.5H5v-1.5zm5.5 0h3v1.5h-3v-1.5zm8.5 0h-3v1.5h3v-1.5z",clipRule:"evenodd"})),m=(0,n.createElement)(a.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(a.Path,{d:"M4 4v1.5h16V4H4zm8 8.5h8V11h-8v1.5zM4 20h16v-1.5H4V20zm4-8c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2z"})),d=(0,n.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(a.Path,{d:"m3 5c0-1.10457.89543-2 2-2h13.5c1.1046 0 2 .89543 2 2v13.5c0 1.1046-.8954 2-2 2h-13.5c-1.10457 0-2-.8954-2-2zm2-.5h6v6.5h-6.5v-6c0-.27614.22386-.5.5-.5zm-.5 8v6c0 .2761.22386.5.5.5h6v-6.5zm8 0v6.5h6c.2761 0 .5-.2239.5-.5v-6zm0-8v6.5h6.5v-6c0-.27614-.2239-.5-.5-.5z",fillRule:"evenodd",clipRule:"evenodd"})),f=(0,n.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(a.Path,{d:"M4 6.5h5a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H4V16h5a.5.5 0 0 0 .5-.5v-7A.5.5 0 0 0 9 8H4V6.5Zm16 0h-5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h5V16h-5a.5.5 0 0 1-.5-.5v-7A.5.5 0 0 1 15 8h5V6.5Z"})),w=(0,n.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(a.Path,{d:"M17.5 4v5a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V4H8v5a.5.5 0 0 0 .5.5h7A.5.5 0 0 0 16 9V4h1.5Zm0 16v-5a2 2 0 0 0-2-2h-7a2 2 0 0 0-2 2v5H8v-5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5v5h1.5Z"})),g=o(184),x=o.n(g);function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a(o)},i={display:r?"none":void 0};return(0,n.createElement)("div",b({},l,{tabIndex:0,role:"button",onClick:s,onKeyUp:s,style:i}))}));function E(){return(0,n.createElement)("div",(0,c.useInnerBlocksProps)({className:"wp-block-co-authors-plus-coauthor"},{template:[["co-authors-plus/name"]],__unstableDisableLayoutClassNames:!0}))}const k=["core/bold","core/italic","core/text-color"];var y=JSON.parse('{"u2":"co-authors-plus/coauthors"}');(0,r.registerBlockType)(y.u2,{edit:function(e){let{attributes:t,setAttributes:o,clientId:r,context:a,isSelected:l,__unstableLayoutClassNames:i}=e;const{prefix:g,separator:b,lastSeparator:y,suffix:C,layout:S,textAlign:A}=t,{type:z,orientation:P}=S||{},{postId:B}=a,O=(0,h.useSelect)((e=>e("co-authors-plus/blocks").getAuthorPlaceholder()),[]),[V,N]=(0,n.useState)([O]),[I,j]=(0,n.useState)(),H=(0,h.useDispatch)("core/notices");function G(e){"AbortError"!==e.name&&H.createErrorNotice(e.message,{isDismissible:!0})}(0,n.useEffect)((()=>{if(!B)return;const e=new AbortController;return u()({path:`/coauthors/v1/coauthors?post_id=${B}`,signal:e.signal}).then(N).catch(G),()=>{e.abort()}}),[B]);const M=(0,h.useSelect)((e=>e(c.store).getBlocks(r))),R=e=>{o({layout:e})},T=[{icon:v,title:(0,p.__)("Inline view"),onClick:()=>R({type:"default"}),isActive:"default"===z},{icon:m,title:(0,p.__)("List view"),onClick:()=>R({type:"constrained"}),isActive:"constrained"===z},{icon:d,title:(0,p.__)("Grid view"),onClick:()=>R({type:"grid"}),isActive:"grid"===z},{icon:f,title:(0,p.__)("Row view"),onClick:()=>R({type:"flex",orientation:"horizontal"}),isActive:"flex"===z&&"horizontal"===P},{icon:w,title:(0,p.__)("Stack view"),onClick:()=>R({type:"flex",orientation:"vertical"}),isActive:"flex"===z&&"vertical"===P}];return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.BlockControls,null,(0,n.createElement)(s.ToolbarGroup,{controls:T}),(0,n.createElement)(c.AlignmentControl,{value:A,onChange:e=>{o({textAlign:e})}})),(0,n.createElement)("div",(0,c.useBlockProps)({className:x()(i,{[`has-text-align-${A}`]:A},"remove-outline")}),V&&"default"===z&&(l||g)&&(0,n.createElement)(c.RichText,{allowedFormats:k,className:"wp-block-co-authors-plus-coauthors__prefix",multiline:!1,"aria-label":(0,p.__)("Prefix","co-authors-plus"),placeholder:(0,p.__)("Prefix","co-authors-plus")+" ",value:g,onChange:e=>o({prefix:e}),tagName:"span"}),V&&V.map((e=>{var t;const o=e.id===(I||(null===(t=V[0])||void 0===t?void 0:t.id));return(0,n.createElement)(c.BlockContextProvider,{key:e.id,value:{"co-authors-plus/author":e,"co-authors-plus/layout":z}},o?(0,n.createElement)(E,null):null,(0,n.createElement)(_,{blocks:M,blockContextId:e.id,setActiveBlockContextId:j,isHidden:o}))})).reduce(((e,t,o,r)=>(0,n.createElement)(n.Fragment,null,e,"default"===z&&(0,n.createElement)("span",{className:"wp-block-co-authors-plus-coauthors__separator"},y&&o===r.length-1?`${y}`:`${b}`),t))),V&&"default"===z&&(l||C)&&(0,n.createElement)(c.RichText,{allowedFormats:k,className:"wp-block-co-authors-plus-coauthors__suffix",multiline:!1,"aria-label":(0,p.__)("Suffix"),placeholder:(0,p.__)("Suffix")+" ",value:C,onChange:e=>o({suffix:e}),tagName:"span"})),(0,n.createElement)(c.InspectorControls,null,"default"===z&&(0,n.createElement)(s.PanelBody,{title:(0,p.__)("Co-Authors Layout","co-authors-plus")},(0,n.createElement)(s.TextControl,{autoComplete:"off",label:(0,p.__)("Separator","co-authors-plus"),value:b||"",onChange:e=>{o({separator:e})},help:(0,p.__)("Enter character(s) used to separate authors.","co-authors-plus")}),(0,n.createElement)(s.TextControl,{autoComplete:"off",label:(0,p.__)("Last Separator","co-authors-plus"),value:y||"",onChange:e=>{o({lastSeparator:e})},help:(0,p.__)("Enter character(s) used to separate the last author.","co-authors-plus")}))))},save:function(e){let{attributes:t}=e;const{textAlign:o}=t,r=x()({[`has-text-align-${o}`]:o});return(0,n.createElement)("div",c.useBlockProps.save({className:r}),(0,n.createElement)(c.InnerBlocks.Content,null))},icon:l})},184:function(e,t){var o;!function(){"use strict";var r={}.hasOwnProperty;function n(){for(var e=[],t=0;t=a)&&Object.keys(r.O).every((function(e){return r.O[e](o[s])}))?o.splice(s--,1):(c=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[o,n,a]},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={887:0,270:0};r.O.j=function(t){return 0===e[t]};var t=function(t,o){var n,a,l=o[0],c=o[1],s=o[2],i=0;if(l.some((function(t){return 0!==e[t]}))){for(n in c)r.o(c,n)&&(r.m[n]=c[n]);if(s)var u=s(r)}for(t&&t(o);i array('wp-data', 'wp-hooks'), 'version' => '82f1cda3f1d3fbb0136c'); build/blocks-store/index.js000060400000000550147177171730011732 0ustar00!function(){"use strict";var o=window.wp.data,e=window.wp.hooks;(0,o.register)((0,o.createReduxStore)("co-authors-plus/blocks",{reducer:function(){let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.coAuthorsBlocks;return o},selectors:{getAuthorPlaceholder:o=>(0,e.applyFilters)("co-authors-plus.author-placeholder",o.authorPlaceholder)}}))}();build/index.asset.php000060400000000340147177171730010611 0ustar00 array('wp-api-fetch', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-plugins', 'wp-primitives'), 'version' => 'e08f5b23d83f8e425ffd'); build/index.js000060400000016470147177171730007333 0ustar00!function(){var e,t={992:function(e,t,r){"use strict";var n=window.wp.element,o=window.wp.plugins,a=window.wp.editPost,s=window.wp.i18n,u=window.wp.data,l=window.wp.apiFetch,c=r.n(l),i=window.wp.components,p=window.wp.hooks,h=window.wp.compose,m=r(697),d=r.n(m),v=window.wp.primitives,f=(0,n.createElement)(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(v.Path,{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})),g=(0,n.createElement)(v.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(v.Path,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"})),w=(0,n.createElement)(v.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(v.Path,{d:"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"}));const E=(e,t,r)=>{const n=t.map((e=>e.value)).indexOf(e.value),o=n+("up"===r?-1:1),a=t.map((e=>Object.assign({},e))),s=a[n],u=[...a.filter((e=>e.value?e.value!==s.value:e!==s))];return u.splice(o,0,s),u},b=e=>{let{displayName:t,userNicename:r,email:n}=e;return{label:`${t} | ${n}`,display:t,value:r}},y=e=>{let{selectedAuthors:t,updateAuthors:r}=e;const o=(e,n)=>{let o;switch(n){case"moveDown":o=E(e,t,"down");break;case"moveUp":o=E(e,t,"up");break;case"remove":a=e,o=t.filter((e=>e.value!==a.value))}var a;r(o)};return null!=t&&t.length?t.map(((e,r)=>{const a=e.display,u=e.value;return(0,n.createElement)("div",{key:u,className:"cap-author"},(0,n.createElement)(i.Flex,{align:"center"},(0,n.createElement)(i.FlexItem,{className:"cap-author-flex-item"},(0,n.createElement)("span",null,a)),(0,n.createElement)(i.FlexItem,{justify:"flex-end",className:"cap-author-flex-item"},(0,n.createElement)(i.Flex,null,(0,n.createElement)("div",{className:"cap-icon-button-stack"},(0,n.createElement)(i.Button,{icon:f,className:"cap-icon-button",label:(0,s.__)("Move Up","co-authors-plus"),disabled:0===r||1===t.length,onClick:()=>o(e,"moveUp")}),(0,n.createElement)(i.Button,{icon:g,className:"cap-icon-button",label:(0,s.__)("Move down","co-authors-plus"),disabled:r===t.length-1||1===t.length,onClick:()=>o(e,"moveDown")})),(0,n.createElement)(i.Button,{icon:w,iconSize:20,className:"cap-icon-button",label:(0,s.__)("Remove Author","co-authors-plus"),disabled:1===t.length,onClick:()=>o(e,"remove")})))))})):null};y.propTypes={selectedAuthors:d().arrayOf([d().shape({id:d().oneOfType([d().string,d().number]),userNiceName:d().string,login:d().string,email:d().string,displayName:d().string,avatar:d().string})]).isRequired,updateAuthors:d().func.isRequired};var S=y;const _={authors:[]},A={setAuthors(e){return{type:"SET_AUTHORS",authors:[...e]}},setAuthorsStore(e){return{type:"SET_AUTHORS_STORE",authors:[...e]}},apiRequest(e){return{type:"API_REQUEST",path:e,method:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET"}}};var O=(0,u.createReduxStore)("cap/authors",{reducer(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"SET_AUTHORS":return{...e,authors:[...e.authors,...t.authors]};case"SET_AUTHORS_STORE":return{...e,authors:[...t.authors]}}return e},actions:A,selectors:{getAuthors(e){const{authors:t}=e;return t},saveAuthors(e){const{authors:t}=e;return t}},controls:{API_REQUEST(e){return c()({path:e.path,method:e.method})}},resolvers:{*getAuthors(e){if(!e)return A.setAuthors([]);const t=`/coauthors/v1/authors/${e}`,r=(yield A.apiRequest(t)).map((e=>b(e)));return A.setAuthors(r)},*saveAuthors(e,t){const r=`/coauthors/v1/authors/${e}?new_authors=${t.map((e=>e.value)).join(",")}`;yield A.apiRequest(r,"POST")}}});(0,u.register)(O);var T=()=>{const[e,t]=(0,n.useState)([]),[r,o]=(0,n.useState)([]),a=(0,u.useSelect)((e=>e("core/editor").getCurrentPostId())),l=((0,u.useSelect)((e=>{var t;return null===(t=e("cap/authors"))||void 0===t?void 0:t.saveAuthors}),[]),(0,u.useSelect)((e=>{var t;return null===(t=e("cap/authors"))||void 0===t?void 0:t.getAuthors(a)}),[a])),{setAuthorsStore:m}=(0,u.useDispatch)("cap/authors"),d=((0,u.useSelect)((e=>e("core/editor").isSavingPost)),(0,p.applyFilters)("coAuthors.search.threshold",2)),v=e=>{m(e),t(e)},f=(0,h.useDebounce)((async t=>{let r=0;if(t.lengthe.value)).join(",");try{r=await c()({path:`/coauthors/v1/search/?q=${t}&existing_authors=${n}`,method:"GET"});const e=(a=r).length>0?a.map((e=>b(e))):[];o(e)}catch(e){r=0,console.log(e)}var a}),500);return(0,n.useEffect)((()=>{l.length&&v(l)}),[l]),(0,n.createElement)(n.Fragment,null,Boolean(e.length)?(0,n.createElement)(n.Fragment,null,(0,n.createElement)(S,{selectedAuthors:e,updateAuthors:v})):(0,n.createElement)(i.Spinner,null),(0,n.createElement)(i.ComboboxControl,{className:"cap-combobox",label:(0,s.__)("Select An Author","co-authors-plus"),value:null,options:r,onChange:t=>{const n=((e,t,r)=>[...t,r.filter((t=>t.value===e))[0]])(t,e,r);v(n)},onFilterValueChange:f}))};(0,o.registerPlugin)("plugin-coauthors-document-setting",{render:()=>(0,n.createElement)(a.PluginDocumentSettingPanel,{name:"coauthors-panel",title:(0,s.__)("Authors","co-authors-plus"),className:"coauthors"},(0,n.createElement)(T,null)),icon:"users"});const{isSavingPost:x,getCurrentPost:P}=(0,u.select)("core/editor"),{getAuthors:R,saveAuthors:k}=(0,u.select)("cap/authors");let C=!0;(0,u.subscribe)((()=>{if(x())C=!1;else if(!C){const{id:e}=P(),t=R(e);k(e,t),C=!0}}))},703:function(e,t,r){"use strict";var n=r(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,a,s){if(s!==n){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return r.PropTypes=r,r}},697:function(e,t,r){e.exports=r(703)()},414:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var a=r[e]={exports:{}};return t[e](a,a.exports,n),a.exports}n.m=t,e=[],n.O=function(t,r,o,a){if(!r){var s=1/0;for(i=0;i=a)&&Object.keys(n.O).every((function(e){return n.O[e](r[l])}))?r.splice(l--,1):(u=!1,a0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[r,o,a]},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={826:0,431:0};n.O.j=function(t){return 0===e[t]};var t=function(t,r){var o,a,s=r[0],u=r[1],l=r[2],c=0;if(s.some((function(t){return 0!==e[t]}))){for(o in u)n.o(u,o)&&(n.m[o]=u[o]);if(l)var i=l(n)}for(t&&t(r);c"); function coauthors_delete( elem ) { var $coauthor_row = jQuery( elem ).closest( '.coauthor-row' ); $coauthor_row.remove(); // Hide the delete button when there's only one Co-Author if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length <= 1 ) jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).addClass( 'hidden' ); return true; } var coauthors_edit_onclick = function( event ) { var $tag = jQuery( this ); var $co = $tag.prev(); $tag.hide(); $co.show() .on( 'focus' ) ; $co.previousAuthor = $tag.text(); } /* * Save co-author * @param int Co-Author ID * @param string Co-Author Name * @param object The autosuggest input box */ function coauthors_save_coauthor( author, co ) { // get sibling and update co.siblings( '.coauthor-tag' ) .html( author.name ) .append( coauthors_create_author_gravatar( author ) ) .show() ; // Update the value of the hidden input co.siblings( 'input[name="coauthors[]"]' ).val( author.nicename ); } /* * Add co-author * @param string Co-Author Name * @param object The autosuggest input box * @param boolean Initial set up or not? */ function coauthors_add_coauthor( author, co, init, count ){ // Check if editing if ( co && co.siblings( '.coauthor-tag' ).length ) { coauthors_save_coauthor( author, co ); } else { // Not editing, so we create a new co-author entry if ( count == 0 ) { var coName = ( count == 0 ) ? 'coauthors-main' : ''; // Add new co-author to ' ); $co.attr({ 'class': 'coauthor-suggest' , 'name': inputName }) .appendTo( $coauthors_div ) .suggest( coAuthorsPlus_ajax_suggest_link, { onSelect: coauthors_autosuggest_select, delay: 1000 }) .on( 'keydown', coauthors_autosuggest_keydown ) ; if ( authorName ) $co.attr( 'value', decodeURIComponent( authorName ) ); else $co.attr( 'value', coAuthorsPlusStrings.search_box_text ) .on( 'focus', function(){ $co.val( '' ) } ) .on( 'blur', function(){ $co.val( coAuthorsPlusStrings.search_box_text ) } ) ; return $co; } // Callback for when a user selects a co-author function coauthors_autosuggest_select() { $this = jQuery( this ); var vals = this.value.split( '∣' ); var author = {} author.id = vals[0].trim(); author.login = vals[1].trim(); author.name = vals[2].trim(); author.email = vals[3].trim(); if( author.avatar !== '' ){ author.avatar = vals[5].trim(); } // Decode user-nicename if it has special characters in it. author.nicename = decodeURIComponent( vals[4].trim() ); if ( author.id=='New' ) { coauthors_new_author_display( name ); } else { coauthors_add_coauthor( author, $this ); // Show the delete button if we now have more than one co-author if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length > 1 ) jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).removeClass( 'hidden' ); } } // Prevent the enter key from triggering a submit function coauthors_autosuggest_keydown( e ) { if ( e.keyCode == 13 ) {return false;} } /* * Blur handler for autosuggest input box * @param event */ function coauthors_stop_editing( event ) { var co = jQuery( this ); var tag = jQuery( co.next() ); co.attr( 'value',tag.text() ); co.hide(); tag.show(); // editing = false; } /* * Creates the text tag for a co-author * @param string Name of the co-author */ function coauthors_create_author_tag( author ) { var $tag = jQuery( '' ) .text( decodeURIComponent( author.name ) ) .attr( 'title', coAuthorsPlusStrings.input_box_title ) .addClass( 'coauthor-tag' ) // Add Click event to edit .on( 'click', coauthors_edit_onclick ); return $tag; } function coauthors_create_author_gravatar( author ) { var $gravatar = jQuery( '' ) .attr( 'alt', author.name ) .attr( 'src', author.avatar ) .addClass( 'coauthor-gravatar' ) ; return $gravatar; } /* * Creates the text tag for a co-author * @param string Name of the co-author */ function coauthors_create_author_hidden_input ( author ) { var input = jQuery( '' ) .attr({ 'type': 'hidden', 'id': 'coauthors_hidden_input', 'name': 'coauthors[]', 'value': decodeURIComponent( author.nicename ) }) ; return input; } var $coauthors_div = null; /** * Initialize the Coauthors UI. * * @param array List of coauthors objects. * Each coauthor object should have the (string) properties: * login * email * name * nicename */ function coauthors_initialize( post_coauthors ) { // Add the controls to add co-authors $coauthors_div = jQuery( '#coauthors-edit' ); if ( $coauthors_div.length ) { // Create the co-authors table var table = jQuery( '
' ) .attr( 'id', 'coauthors-list' ) ; $coauthors_div.append( table ); } // Select co-authors already added to the post var addedAlready = []; //jQuery('#the-list tr').each(function(){ var count = 0; jQuery.each( post_coauthors, function() { coauthors_add_coauthor( this, undefined, true, count ); count++; }); // Hide the delete button if there's only one co-author if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length < 2 ) jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).addClass( 'hidden' ); // Create new author-suggest and append it to a new row var newCO = coauthors_create_autosuggest( '', false ); coauthors_add_to_table( newCO ); $coauthors_loading = jQuery( '#publishing-action .spinner' ).clone().attr( 'id', 'coauthors-loading' ); move_loading( newCO ); // Make co-authors sortable so an editor can control the order of the co-authors jQuery( '#coauthors-edit' ).ready(function( $ ) { $( '#coauthors-list' ).sortable({ axis: 'y', handle: '.coauthor-tag', placeholder: 'ui-state-highlight', items: 'div.coauthor-row:not(div.coauthor-row:last)', containment: 'parent', }); }); } function show_loading() { $coauthors_loading.css( 'visibility', 'visible' ); } function hide_loading() { $coauthors_loading.css( 'visibility', 'hidden' ); } function move_loading( $input ) { $coauthors_loading.insertAfter( $input ); } // Show loading cursor for autocomplete ajax requests jQuery( document ).ajaxSend(function( e, xhr, settings ) { if ( settings.url.indexOf( coAuthorsPlus_ajax_suggest_link ) != -1 ) { // Including existing authors on the AJAX suggest link // allows us to filter them out of the search request var existing_authors = jQuery( 'input[name="coauthors[]"]' ).map(function(){return jQuery( this ).val();}).get(); settings.url = settings.url.split( '&existing_authors' )[0]; settings.url += '&existing_authors=' + existing_authors.join( ',' ); show_loading(); } }); // Hide loading cursor when autocomplete ajax requests are finished jQuery( document ).ajaxComplete(function( e, xhr, settings ) { if ( settings.url.indexOf( coAuthorsPlus_ajax_suggest_link ) != -1 ) hide_loading(); }); if ( 'post-php' == adminpage || 'post-new-php' == adminpage ) { var $post_coauthor_logins = jQuery( 'input[name="coauthors[]"]' ); var $post_coauthor_names = jQuery( 'input[name="coauthorsinput[]"]' ); var $post_coauthor_emails = jQuery( 'input[name="coauthorsemails[]"]' ); var $post_coauthor_nicenames = jQuery( 'input[name="coauthorsnicenames[]"]' ); var $post_coauthoravatars = jQuery( 'input[name="coauthorsavatars[]"]' ); var post_coauthors = []; for ( var i = 0; i < $post_coauthor_logins.length; i++ ) { post_coauthors.push({ login: $post_coauthor_logins[i].value, name: $post_coauthor_names[i].value, email: $post_coauthor_emails[i].value, nicename: $post_coauthor_nicenames[i].value, avatar: $post_coauthoravatars[i].value, }); } // Remove the read-only co-authors so we don't get craziness jQuery( '#coauthors-readonly' ).remove(); coauthors_initialize( post_coauthors ); } else if ( 'edit-php' == adminpage ) { var wpInlineEdit = inlineEditPost.edit; inlineEditPost.edit = function( id ) { wpInlineEdit.apply( this, arguments ) // get the post ID var postId = 0 if ( typeof( id ) == 'object' ) postId = parseInt( this.getId( id ) ) if ( postId > 0 ) { var $postRow = jQuery( '#post-' + postId ) // Move the element to the appropriate position in the view // JS hack for core bug: https://core.trac.wordpress.org/ticket/26982 jQuery( '.quick-edit-row .inline-edit-col-left .inline-edit-col' ).find( '.inline-edit-coauthors' ).remove() // remove any previously added elements var el = jQuery( '.inline-edit-group.inline-edit-coauthors', '#edit-' + postId ); el.detach().appendTo( '.quick-edit-row .inline-edit-col-left .inline-edit-col' ).show(); // initialize co-authors var post_coauthors = jQuery.map( jQuery( '.column-coauthors a', $postRow ), function( el ) { return { login: jQuery( el ).data( 'user_login' ), name: jQuery( el ).data( 'display_name' ), email: jQuery( el ).data( 'user_email' ), nicename: jQuery( el ).data( 'user_nicename' ), avatar: jQuery( el ).data( 'avatar' ), } }); coauthors_initialize( post_coauthors ); } } } }); if ( typeof( console ) === 'undefined' ) { var console = {} console.log = console.error = function() {}; } js/guest-authors.js000060400000001472147177171730010347 0ustar00jQuery( document ).ready(function( $ ){ $( '.reassign-option' ).on( 'click',function(){ $( '#wpbody-content input#submit' ).addClass( 'button-primary' ).removeAttr( 'disabled' ); }); $( '#leave-assigned-to' ).select2({ minimumInputLength: 2, width: 'copy', multiple: false, ajax: { url: ajaxurl, dataType: 'json', data: function( term, page ) { return { q: term, action: 'search_coauthors_to_assign', guest_author: $( '#id' ).val() }; }, results: function( data, page ) { return { results: data }; } }, formatResult: function( object, container, query ) { return object.display_name; }, formatSelection: function( object, container ) { return object.display_name; } }).on( 'change', function() { $( '#reassign-another' ).trigger( 'click' ); }); });languages/co-authors-plus-da_DK.po000060400000050212147177171730013072 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2023-10-27 17:44+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: da_DK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 3.4.1\n" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Tillader at et indlæg tildeles flere forfattere. Dette plugin er en udvidet version af det Co-Authors-plugin, som er udviklet af Weston Ruter." #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: Author display name. #: template-tags.php:409 template-tags.php:419 msgid "Visit %s’s website" msgstr "Besøg %ss hjemmeside" #. translators: Author display name. #: template-tags.php:239 template-tags.php:635 msgid "Posts by %s" msgstr "Indlæg af %s" #: template-tags.php:91 msgid " and " msgstr " og " #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Navn" #: php/class-coauthors-plus.php:567 php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Indlæg" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Slet" #: php/class-coauthors-plus.php:1395 php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Rediger" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Gem" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Fjern" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Marker som spam: %s" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Angiv et gyldigt medforfatter-login" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Angiv et gyldigt user_login" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtrer" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Vis indlæg" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Vis alle" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Uden tilknyttet konto" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Med tilknyttet konto" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Medforfatter" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Medforfattere" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Opret profil" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Rediger profil" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Ingen brugere eksisterer med det ID" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Medforfatteren som du vil overføre til findes ikke" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Gæsteforfatter eksisterer ikke" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login kan ikke duplikere eksisterende gæsteforfatter eller tilknyttede bruger" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s er et obligatorisk felt" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Biografisk info" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Hjemmeside" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Tilknyttet konto" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-mail" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Kortlink" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Efternavn" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Fornavn" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Visningsnavn" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Gæsteforfattere kan ikke oprettes uden visningsnavn." #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Ikke tilknyttet --" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Tilføj ny" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress brugertilknytning" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Bekræft sletning" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Fjern byline fra indlæggene (men lad hvert indlæg beholde sin nuværende status)." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Overfør til en anden medforfatter:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Bemærk: Hvis du gerne vil slette en gæsteforfatter og alle dennes indlæg, bør du slette indlæggene først og derefter slette gæsteforfatteren." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Du har markeret denne gæsteforfatter til sletning:" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Kontaktinfo" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Entydig korttitel" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Gæsteforfatter slettet." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Sørg for at vælge en af valgmulighederne." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Medforfatter eksisterer ikke. Prøv igen?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Gæsteforfatteren kan ikke slettes fordi den ikke eksisterer." #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Du har ikke tilladelse til at udføre denne handling." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Har du gang i noget fy fy?" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Gæsteforfatter opdateret. Forhåndsvis profil" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Gæsteforfatter planlagt til: %1$s . Forhåndsvis profil" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Gæsteforfatter tilføjet. Forhåndsvis profil" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Gæsteforfatter gemt." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Gæsteforfatter tilbageført til revisionen fra %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Gæsteforfatter opdateret." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Tilpasset felt slettet." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Tilpasset felt opdateret." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Gæsteforfatter opdateret. Se profil" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Tilføj ny" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Om gæsteforfatteren" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Opdater gæsteforfatter" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Ingen gæsteforfattere blev fundet i papirkurven" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Ingen gæsteforfattere fundet" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Søg i gæsteforfattere" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Vis gæsteforfatter" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Ny gæsteforfatter" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Rediger gæsteforfatter" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Tilføj ny gæsteforfatter" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Alle gæsteforfattere" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Gæsteforfattere" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Gæsteforfatter" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Slet den: %s" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Nyt pingback til dit indlæg \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Du kan se alle trackbacks til dette indlæg her: " #: co-authors-plus.php:110 co-authors-plus.php:121 msgid "Excerpt: " msgstr "Uddrag: " #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Hjemmeside: %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Ny trackback til dit indlæg \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Kommentar: \"%2$s\"" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Du kan se alle kommentarerne til dette indlæg her: " #: co-authors-plus.php:99 msgid "Comment: " msgstr "Kommentar: " #. translators: Comment author URL. #: co-authors-plus.php:96 co-authors-plus.php:109 co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Forfatter : %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Ny kommentar til dit indlæg \"%s\"" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Min" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Søg efter en forfatter" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Klik for at ændre denne forfatter eller træk for at ændre placeringen" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Er du sikker på at du vil fjerne denne forfatter?" #: php/class-coauthors-plus.php:649 php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Ingen medforfatter eksisterer for denne term" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Vis indlæg af denne forfatter" #: php/class-coauthors-plus.php:472 php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Klik på en forfatter for at ændre denne. Træk for at ændre rækkefølgen. Klik på Fjern for at fjerne dem." #: php/class-coauthors-plus.php:197 php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 build/index.js:1 src/index.js:20 msgid "Authors" msgstr "Forfattere" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "j. F Y, k\\l H:i" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Smid i papirkurven: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permanent link: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Du kan se alle pingbacks til dette indlæg her: " #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Visningsnavn er i konflikt med en anden gæsteforfatters visningsnavn." #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Lad indlæggene forblive knyttet til den tilknyttede bruger, %s." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "https://wordpress.org/plugins/co-authors-plus/" #. Author URI of the plugin msgid "https://automattic.com" msgstr "https://automattic.com" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "Email : %s" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "Whois : https://whois.arin.net/rest/ip/%s" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "Tekst som der skal søges i." #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "Navne på medforfattere, som skal udelukkes fra søgeresultater." #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "Navne på medforfattere, som skal gemmes." #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "Profilbillede" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "Vælg profilbillede" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "Brug profilbillede" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "Fjern profilbillede" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "Slet gæsteforfattere" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "Der er ingen indlæg knyttet til denne gæsteforfatter." #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "Der er %d indlæg knyttet til denne gæsteforfatter. Hvad skal der ske med dette indlæg?" msgstr[1] "Der er %d indlæg knyttet til denne gæsteforfatter. Hvad skal der ske med disse indlæg?" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "Der er en Wordpress-bruger med samme brugernavn som denne gæsteforfatter. Du skal gå tilbage og knytte den til hinanden for at kunne opdatere." #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "Loginnavn" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "Email" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "Alle forfattere" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "Bemærk: For at redigere indlægsforfattere skal javascript være aktivt, eller du skal bruge en browser som understøtter javascript" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "Forfatter: %s" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "Ingen matchende gæsteforfattere blev fundet." #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "Springer over - Indlægget #%d har allerede tilknyttede medforfattere: %s" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "Opdaterer - Tilføjer %1$ss byline til indlægget #%2$d" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "Færdig! %d indlæg blev ændret." msgstr[1] "Færdig! %d indlæg blev ændret." #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "-- Forfatter findes allerede (ID #%s). Springer over." #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "-- Ikke fundet. Opretter profil." #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "-- Der opstod en fejl med at oprette gæsteforfatteren: %s" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "-- Oprettet som gæsteforfatter #%s" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "Skrevet af" #: build/index.js:1 src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "Flyt op" #: build/index.js:1 src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "Flyt ned" #: build/index.js:1 src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "Fjern forfatter" #: build/index.js:1 src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "Vælg forfatter" languages/co-authors-plus-de_DE-1fdf421c05c1140f6d71444ea2b27638.json000060400000000405147177171730017620 0ustar00{"translation-revision-date":"2023-01-25 23:50:57+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"de","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autoren"]}}}languages/co-authors-plus-de_DE-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000524147177171730020367 0ustar00{"translation-revision-date":"2023-01-25 23:50:57+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"de","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autoren"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-de_DE.mo000060400000021114147177171730013064 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@OUl '=Z 1 P[ x"& QXs z  G!:3TbDF7^GK*-B5K-#"#=$a-)# *%AIXx S  ( 6@Wmu &  ) A Z s 8| 3 3 5!:S!!!! !g! and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2023-01-25 23:50:57+0000 Language: de Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 und %s ist ein Pflichtfeld– Nicht verbunden –AIMÜber diesen GastautorenErstellenEinen neuen Gastautoren hinaufügenAlle GastautorenErlaubt es mehrere Autoren einem Artikel zuzuweisen. Dieses Plugin ist eine erweiterte Version des Co-Authors Plugins, dass von Weston Ruter entwickelt wurde.Bist du sicher, dass du diesen Autor entfernen möchtest?Autor : %1$s (IP: %2$s , %3$s)AutorenBiographische AngabenKlicke auf einen Autor um sie zu ändern. Durch verschieben änderst du ihre Reihenfolge. Klicke auf Entfernen um sie zu entfernen.Klicken um diesen Autor zu ändern oder verschiebe sie um ihre Position zu ändernCo-AutorCo-AutorenCo-Authors PlusDiesen Co-Autor gibt es nicht. Nochmal versuchen?Kommentar:Löschen bestätigenKontakt InfoProfil erstellenBenutzerdefiniertes Feld entfernt.Benutzerdefiniertes Feld aktualisiert.LöschenLöschen: %sAnzeigenameDer Öffentliche Name dieses Gastautoren steht im Konflikt mit einem anderen.Ähm, was hast du vor?E-MailBearbeitenGastautor bearbeitenProfil bearbeitenAuszug:FilterVornameGastautorGastautorenDer Gastautor kann nicht gelöscht werden, weil er nicht existiert. Gastautor gelöschtGastautor existiert nichtGastautor aus der Revision von %s wiederhergestelltGastautor gespeichertGastautor geplant fü %1$s. ProfilvorschauGastautor erstellt. Profilvorschau Gastautor aktualisiert.Gastautor aktualisiert. Profil ansehenGastautor aktualisiert. ProfilvorschauGastautoren können nicht ohne Öffentlichen Namen erstellt werden.IDJabber / Google TalkNachnameDie Posts dem Verbundenen WordPress user %s zuweisen.Verbundener Accountj. M. Y \u\m G:i \U\h\rMeinsMohammad Jangda, Daniel Bachhuber, AutomatticNameNeuer GastautorNeuer Kommentar zu deinem Post "%s"Neuer Pingback zu deinem Post "%s"Neuer Trackback zu deinem Post "%s"Hierfür gibt es keinen Co-AutorDieser Gastautor konnte nicht gefunden werdenKeinen Gastautoren im Papierkorb gefundenEs gibt keinen Nutzer mit dieser IDBeachte: Wenn du den Gastautor und alle seine Posts löschen mötest, solltest du zuerst seine Artikel löschen und dann hierher zurückkommen, um den Gastautor zu löschen.Permalink: %sBitte wähle eine Option.Bitte gib einen validen co-author login anBitte gib einen validen user_login anArtikelArtikel von %sEinem anderen Autoren zuweisen:Dieser Co-Autor existiert nichtEntfernenEntferne den Namen von den Post, aber belasse die Posts in ihrem aktuellen Zustand.SpeichernGastautor suchenSuche nach einem AutorAlle anzeigenTitelformAls Spam markieren: %sIn den Papierkorb: %sURL: %sEindeutiger SlugGastautor aktualisierenGastautor anzeigenPost anzeigenSchaue dir Artikel von diesem Autor anBesuche %s’s WebsiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)Mit verbundenem AccountOhne verbundenen AccountWordPress User verbindenYahoo IMDu kannst alle Kommentare zu diesem Post hier anschauen:Du kannst alle Pingbacks zu deinem Post hier sehen:Du kannst alle Trackback zu diesem Post hier sehen:Du hast nicht die nötigen Rechte, um das zu tun.Du hast diesen Gastautor zum löschen ausgewählt:[%1$s] Kommentar: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"Hinzufügenuser_login kann nicht mit einem existierenden Gastautoren oder verbundenen Benutzer übereinstimmenlanguages/co-authors-plus-de_DE.po000060400000046066147177171730013104 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2023-01-25 23:50:57+0000\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Artikel von %s" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Besuche %s’s Website" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Erlaubt es mehrere Autoren einem Artikel zuzuweisen. Dieses Plugin ist eine erweiterte Version des Co-Authors Plugins, dass von Weston Ruter entwickelt wurde." #: template-tags.php:91 msgid " and " msgstr " und " #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Post anzeigen" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Meins" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Hierfür gibt es keinen Co-Autor" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Neuer Kommentar zu deinem Post \"%s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Autor : %1$s (IP: %2$s , %3$s)" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL: %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Kommentar:" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Du kannst alle Kommentare zu diesem Post hier anschauen:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Kommentar: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Neuer Trackback zu deinem Post \"%s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Website: %1$s (IP: %2$s , %3$s)" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Auszug:" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Du kannst alle Trackback zu diesem Post hier sehen:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Neuer Pingback zu deinem Post \"%s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Du kannst alle Pingbacks zu deinem Post hier sehen:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalink: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "In den Papierkorb: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Löschen: %s" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Als Spam markieren: %s" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Gastautor" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Gastautoren" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Alle Gastautoren" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Einen neuen Gastautoren hinaufügen" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Gastautor bearbeiten" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Neuer Gastautor" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Gastautor anzeigen" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Gastautor suchen" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Dieser Gastautor konnte nicht gefunden werden" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Keinen Gastautoren im Papierkorb gefunden" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Gastautor aktualisieren" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Über diesen Gastautoren" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Gastautor aktualisiert. Profil ansehen" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Benutzerdefiniertes Feld aktualisiert." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Benutzerdefiniertes Feld entfernt." #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Gastautor aktualisiert." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Gastautor aus der Revision von %s wiederhergestellt" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Gastautor gespeichert" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Gastautor erstellt. Profilvorschau " #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Gastautor geplant fü %1$s. Profilvorschau" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Gastautor aktualisiert. Profilvorschau" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Ähm, was hast du vor?" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Du hast nicht die nötigen Rechte, um das zu tun." #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Der Gastautor kann nicht gelöscht werden, weil er nicht existiert." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Diesen Co-Autor gibt es nicht. Nochmal versuchen?" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Bitte wähle eine Option." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr " Gastautor gelöscht" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Eindeutiger Slug" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Name" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Kontakt Info" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Du hast diesen Gastautor zum löschen ausgewählt:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Beachte: Wenn du den Gastautor und alle seine Posts löschen mötest, solltest du zuerst seine Artikel löschen und dann hierher zurückkommen, um den Gastautor zu löschen." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Einem anderen Autoren zuweisen:" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Die Posts dem Verbundenen WordPress user %s zuweisen." #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Entferne den Namen von den Post, aber belasse die Posts in ihrem aktuellen Zustand." #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Löschen bestätigen" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress User verbinden" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "– Nicht verbunden –" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Gastautoren können nicht ohne Öffentlichen Namen erstellt werden." #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Der Öffentliche Name dieses Gastautoren steht im Konflikt mit einem anderen." #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Vorname" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Nachname" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Verbundener Account" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Website" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Biographische Angaben" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s ist ein Pflichtfeld" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login kann nicht mit einem existierenden Gastautoren oder verbundenen Benutzer übereinstimmen" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Gastautor existiert nicht" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Dieser Co-Autor existiert nicht" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Es gibt keinen Nutzer mit dieser ID" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Profil bearbeiten" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Profil erstellen" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-Autoren" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-Autor" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Mit verbundenem Account" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Ohne verbundenen Account" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filter" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Bitte gib einen validen user_login an" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Bitte gib einen validen co-author login an" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Klicke auf einen Autor um sie zu ändern. Durch verschieben änderst du ihre Reihenfolge. Klicke auf Entfernen um sie zu entfernen." #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Autoren" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Artikel" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Schaue dir Artikel von diesem Autor an" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Bearbeiten" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Entfernen" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Bist du sicher, dass du diesen Autor entfernen möchtest?" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Klicken um diesen Autor zu ändern oder verschiebe sie um ihre Position zu ändern" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Suche nach einem Autor" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Hinzufügen" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-Mail" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Löschen" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Titelform" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Erstellen" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Alle anzeigen" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Speichern" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "j. M. Y \\u\\m G:i \\U\\h\\r" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Anzeigename" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-en_CA-1fdf421c05c1140f6d71444ea2b27638.json000060400000000410147177171730017621 0ustar00{"translation-revision-date":"2017-02-28 02:12:23+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"en_CA","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Authors"]}}}languages/co-authors-plus-en_CA-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000527147177171730020377 0ustar00{"translation-revision-date":"2017-02-28 02:12:23+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"en_CA","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Authors"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-en_CA.mo000060400000020030147177171730013065 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@RXo,So=* h r}%    +>8w     7-C)_eHL3bF6 ,,6c r-!%G^~ 4#B&f! %E SXm      %-Max,-.1"2T@ and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2017-02-28 02:12:23+0000 Language: en_CA Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"Add Newuser_login cannot duplicate existing guest author or mapped userlanguages/co-authors-plus-en_CA.po000060400000044775147177171730013116 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2017-02-28 02:12:23+0000\n" "Language: en_CA\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: template-tags.php:91 msgid " and " msgstr " and " #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Posts by %s" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Visit %s’s website" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Delete" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Edit" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Name" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Display Name" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "First Name" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Last Name" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Posts" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Website" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Add New" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Remove" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Custom field updated." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Custom field deleted." #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s is a required field" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "View Posts" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Save" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-mail" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "M j, Y @ G:i" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Authors" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filter" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Contact Info" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Biographical Info" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Please specify a valid co-author login" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Please specify a valid user_login" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Without linked account" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "With linked account" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Show all" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-Author" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-Authors" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Create Profile" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Edit Profile" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "No user exists with that ID" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Reassignment co-author does not exist" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Guest author does not exist" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login cannot duplicate existing guest author or mapped user" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Linked Account" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Display name conflicts with another guest author display name." #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Guest authors cannot be created without display names." #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Not mapped --" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress User Mapping" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Confirm Deletion" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Remove byline from posts (but leave each post in its current status)." #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Leave posts assigned to the mapped user, %s." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Reassign to another co-author:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "You have specified this guest author for deletion:" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Unique Slug" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Guest author deleted." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Please make sure to pick an option." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Co-author does not exists. Try again?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Guest author can't be deleted because it doesn't exist." #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "You don't have permission to perform this action." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Doin' something fishy, huh?" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Guest author updated. Preview profile" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Guest author scheduled for: %1$s. Preview profile" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Guest author submitted. Preview profile" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Guest author saved." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Guest author restored to revision from %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Guest author updated." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Guest author updated. View profile" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Add New" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "About the guest author" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Update Guest Author" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "No guest authors found in Trash" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "No guest authors found" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Search Guest Authors" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "View Guest Author" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "New Guest Author" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Edit Guest Author" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Add New Guest Author" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "All Guest Authors" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Guest Authors" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Guest Author" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Spam it: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Delete it: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Trash it: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalink: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "You can see all pingbacks on this post here: " #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "New pingback on your post \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "You can see all trackbacks on this post here: " #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Excerpt: " #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Website: %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "New trackback on your post \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Comment: \"%2$s\"" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "You can see all comments on this post here: " #: co-authors-plus.php:99 msgid "Comment: " msgstr "Comment: " #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Author : %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "New comment on your post \"%s\"" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Mine" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Search for an author" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Click to change this author, or drag to change their position" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Are you sure you want to remove this author?" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "No co-author exists for that term" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "View posts by this author" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Click on an author to change them. Drag to change their order. Click on Remove to remove them." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-en_GB-1fdf421c05c1140f6d71444ea2b27638.json000060400000000410147177171730017626 0ustar00{"translation-revision-date":"2023-09-03 09:02:28+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"en_GB","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Authors"]}}}languages/co-authors-plus-en_GB-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000604147177171730020400 0ustar00{"translation-revision-date":"2023-09-03 09:02:28+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"en_GB","plural-forms":"nplurals=2; plural=n != 1;"},"Select An Author":["Select An Author"],"Remove Author":["Remove Author"],"Move down":["Move down"],"Move Up":["Move Up"],"Authors":["Authors"]}}}languages/co-authors-plus-en_GB.mo000060400000026012147177171730013100 0ustar00 , G $f   i & * A I ^ j A| ,G t    o =0 n x  %      # 8 F >S        7!Yo)eH/x3F6 @C X,b  - <Zk!"!D` #&,!Su {%  E5:Od u; 5w    -  *CK*k ,-.G1v2 #8.O@~QW,n$iz~ A, o=  %  (5DZpw  >    , 2 = G N Y f 7t   ) !e!H!!3!F"6\""" ","" " " #-#<# D#N#S#<p#####!$=$!T$"v$$$ O%#]%&%!%% %%%%!& (& 6&ED&&&&& &&;&' '+'5;'q'w^( ( ( ((- ) ;)F) X)c)})))*)))* +*6*,?*-l*.*1*2*.+E+]+v+~+3+@+ and %s is a required field-- Author already exists (ID #%s); skipping.-- Created as guest author #%s-- Failed to create guest author: %s-- Not found; creating profile.-- Not mapped --Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browserAIMAbout the guest authorAdd NewAdd New Guest AuthorAll AuthorsAll Guest AuthorsAll done! %d post was affected.All done! %d posts were affected.Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)Author: %sAuthorsAvatarBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete Guest AuthorsDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileEmailEmail : %sExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountLogin NameM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticMove UpMove downNameNames of co-authors to save.Names of existing co-authors to exclude from search results.New Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo matching co-authors were found.No user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove AuthorRemove AvatarRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorSelect An AuthorSet AvatarShow allSkipping - Post #%1$d already has co-authors assigned: %2$sSlugSpam it: %sText to search.There are no posts associated with this guest author.There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?There is a WordPress user with the same username as this guest author, please go back and link them in order to update.Trash it: %sURL : %sUnique SlugUpdate Guest AuthorUpdating - Adding %1$s's byline to post #%2$dUse AvatarView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)Whois : https://whois.arin.net/rest/ip/%sWith linked accountWithout linked accountWordPress User MappingWritten byYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newhttps://automattic.comhttps://wordpress.org/plugins/co-authors-plus/user_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2023-09-03 09:02:28+0000 Language: en_GB Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 and %s is a required field-- Author already exists (ID #%s); skipping.-- Created as guest author #%s-- Failed to create guest author: %s-- Not found; creating profile.-- Not mapped --Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browserAIMAbout the guest authorAdd NewAdd New Guest AuthorAll AuthorsAll Guest AuthorsAll done! %d post was affected.All done! %d posts were affected.Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)Author: %sAuthorsAvatarBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete Guest AuthorsDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?EmailEditEdit Guest AuthorEdit ProfileEmailEmail : %sExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountLogin NameM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticMove UpMove downNameNames of co-authors to save.Names of existing co-authors to exclude from search results.New Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in the BinNo matching co-authors were found.No user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove AuthorRemove AvatarRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorSelect An AuthorSet AvatarShow AllSkipping - Post #%1$d already has co-authors assigned: %2$sSlugSpam it: %sText to search.There are no posts associated with this guest author.There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?There is a WordPress user with the same username as this guest author, please go back and link them in order to update.Bin it: %sURL : %sUnique SlugUpdate Guest AuthorUpdating - Adding %1$s's byline to post #%2$dUse AvatarView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)Whois : https://whois.arin.net/rest/ip/%sWith linked accountWithout linked accountWordPress User MappingWritten byYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"Add Newhttps://automattic.comhttp://en-gb.wordpress.org/plugins/co-authors-plus/user_login cannot duplicate existing guest author or mapped userlanguages/co-authors-plus-en_GB.po000060400000047315147177171730013114 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2023-09-03 09:02:28+0000\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "Select An Author" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "Remove Author" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "Move down" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "Move Up" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "Written by" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "-- Created as guest author #%s" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "-- Failed to create guest author: %s" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "-- Not found; creating profile." #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "-- Author already exists (ID #%s); skipping." #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "Email" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "Login Name" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgstr[1] "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "There are no posts associated with this guest author." #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "Delete Guest Authors" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "Remove Avatar" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "Use Avatar" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "Set Avatar" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "Avatar" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "Names of co-authors to save." #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "Text to search." #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "Author: %s" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "All Authors" #. Author URI of the plugin msgid "https://automattic.com" msgstr "https://automattic.com" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "http://en-gb.wordpress.org/plugins/co-authors-plus/" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Visit %s’s website" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Posts by %s" #: template-tags.php:91 msgid " and " msgstr " and " #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "All done! %d post was affected." msgstr[1] "All done! %d posts were affected." #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "Updating - Adding %1$s's byline to post #%2$d" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "Skipping - Post #%1$d already has co-authors assigned: %2$s" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Please specify a valid co-author login" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Please specify a valid user_login" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filter" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "View Posts" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Delete" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "No matching co-authors were found." #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Without linked account" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "With linked account" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Show All" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-Author" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-Authors" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Create Profile" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Edit Profile" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "No user exists with that ID" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Reassignment co-author does not exist" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Guest author does not exist" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login cannot duplicate existing guest author or mapped user" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s is a required field" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Biographical Info" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Website" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Linked Account" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "Email" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Last Name" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "First Name" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Display Name" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Display name conflicts with another guest author display name." #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Guest authors cannot be created without display names." #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Not mapped --" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress User Mapping" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Add New" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Confirm Deletion" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Remove byline from posts (but leave each post in its current status)." #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Leave posts assigned to the mapped user, %s." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Reassign to another co-author:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "You have specified this guest author for deletion:" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Contact Info" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Name" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Unique Slug" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Save" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Guest author deleted." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Please make sure to pick an option." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Co-author does not exists. Try again?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Guest author can't be deleted because it doesn't exist." #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "You don't have permission to perform this action." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Doin' something fishy, huh?" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Guest author updated. Preview profile" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "M j, Y @ G:i" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Guest author scheduled for: %1$s. Preview profile" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Guest author submitted. Preview profile" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Guest author saved." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Guest author restored to revision from %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Guest author updated." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Custom field deleted." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Custom field updated." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Guest author updated. View profile" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Add New" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "About the guest author" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Update Guest Author" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "No guest authors found in the Bin" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "No guest authors found" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Search Guest Authors" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "View Guest Author" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "New Guest Author" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Edit Guest Author" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Add New Guest Author" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "All Guest Authors" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Guest Authors" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Guest Author" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Spam it: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Delete it: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Bin it: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalink: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "You can see all pingbacks on this post here: " #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "New pingback on your post \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "You can see all trackbacks on this post here: " #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Excerpt: " #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Website: %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "New trackback on your post \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Comment: \"%2$s\"" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "You can see all comments on this post here: " #: co-authors-plus.php:99 msgid "Comment: " msgstr "Comment: " #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "Email : %s" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Author : %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "New comment on your post \"%s\"" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Mine" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Search for an author" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Click to change this author, or drag to change their position" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Are you sure you want to remove this author?" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Remove" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Edit" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "No co-author exists for that term" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "View posts by this author" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Posts" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Click on an author to change them. Drag to change their order. Click on Remove to remove them." #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Authors" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "Whois : https://whois.arin.net/rest/ip/%s" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "Names of existing co-authors to exclude from search results." languages/co-authors-plus-es_CL-1fdf421c05c1140f6d71444ea2b27638.json000060400000000410147177171730017641 0ustar00{"translation-revision-date":"2016-05-19 15:21:48+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es_CL","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autores"]}}}languages/co-authors-plus-es_CL-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000527147177171730020417 0ustar00{"translation-revision-date":"2016-05-19 15:21:48+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es_CL","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autores"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-es_CL.mo000060400000020714147177171730013116 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@RTo /pEX 4  3@ ]~G1!5< R `jry8. 8oQQ>/Vn9 (!J Zf-k#!"$#C2g$O,e@+ 4UG^  +E X e! 7 5Q 6 - 5 "!Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2016-05-19 15:21:48+0000 Language: es_CL Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 y%s es un campo obligatorio—No asignado—AIMAcerca del autor invitadoAñadir nuevoAñadir un Autor InvitadoTodos los Autores InvitadosPermite asignar múltiples autores a una entrada. Este plugin es una versión extendida del plugin de autores desarrollado por Weston Ruter.¿Estás seguro que deseas eliminar este autor?Autor: %1$s (IP: %2$s , %3$s)AutoresInfo biográficaHaz clic en un autor para cambiarlo. Arrástralos para cambiar su orden. Haz clic en eliminar para eliminarlos.Clic para cambiar este autor, o arrástralo para cambiar su posiciónCo-AutorCo-AutoresCo-Autores PlusUno de los autores no existe. ¿Volver a intentarlo?Comentario:Confirmar EliminaciónInformación de contactoCrear PerfilCampo personalizado borrado.Campo personalizado actualizado.EliminarElimínalo: %sNombre a MostrarEl nombre a mostrar tiene un conflicto con el de otro usuario invitado.Así que estás haciendo algo sospechoso… ¿ah?Correo electrónicoEditarEditar Autor InvitadoEditar PerfilExtracto:FiltrarNombreAutor InvitadoAutores InvitadosNo se puede eliminar el Autor Invitado porque no existe.Autor invitado eliminado.No existe el Autor invitadoAutor invitado restaurado a la revisión de %sAutor invitado guardado.Autor invitado anegado para: %1$s. Revisa el perfilAutor invitado enviado. Revisa el perfilAutor invitado actualizado.Autor invitado actualizado. Ver el perfilAutor invitado actualizado. Revisar el PerfilNo se puede crear Autores Invitados sin nombre a mostrar.IDJabber / Google TalkApellidosDejar entradas asignadas al usuario, %s.Cuenta Enlazadaj F Y G:i aMíoMohammad Jangda, Daniel Bachhuber, AutomatticNombreNuevo Autor InvitadoNuevo comentario en tu entrada "%s"Nuevo pingback en tu entrada "%s"Nuevo trackback en tu entrada "%s"No existe coautor para dicho terminoNo se encontraron autores invitadosNo se encontraron autores invitados en la PapeleraNo existe ningún usuario con ese IDNota: Si deseas eliminar al autor invitado y todos sus entradas, primero debes eliminar sus entradas y luego volver a borrar el autor invitado.Enlace permanente: %sPor favor, asegúrate de elegir una opción.Por favor especifique un inicio de sesión válido para co-autorPor favor especifique un user_login válidoEntradasPublicaciones de %sReasignar a otro autor:El co-autor reasignado no existeEliminarQuitar la firma de mensajes (pero dejar cada post en su estado actual).GuardarBuscar Autor InvitadoBuscar un autorMostrar todosSlugMárcalo como spam: %sA la papelera: %sEnlace : %sSlug únicoActualizar Autor InvitadoVer Autor InvitadoVer EntradasVer las entradas de este usuarioVisitar el sitio web de %sWebSitio web: %1$s (IP: %2$s , %3$s)Con cuenta vinculadaSin cuenta vinculadaMapeo de Usuarios de WordPressYahoo IMPuedes ver todos los comentarios de esta entrada aquí:Puedes ver todos los pingbacks de esta entrada aquí:Puedes ver todos los trackbacks de esta entrada aquí:No tienes permiso para realizar esta acción.Especificaste este autor invitado para ser eliminado:[%1$s] Comentario: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: “%2$s”Agregar NuevoEl valor user_login no puede duplicarse en autor invitado o usuario asignadolanguages/co-authors-plus-es_CL.po000060400000045641147177171730013127 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2016-05-19 15:21:48+0000\n" "Language: es_CL\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: template-tags.php:91 msgid " and " msgstr "y" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Publicaciones de %s" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Visitar el sitio web de %s" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Autores Plus" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Permite asignar múltiples autores a una entrada. Este plugin es una versión extendida del plugin de autores desarrollado por Weston Ruter." #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Guardar" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Mostrar todos" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Información de contacto" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Entradas" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Añadir nuevo" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Campo personalizado actualizado." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Campo personalizado borrado." #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "j F Y G:i a" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Web" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "Correo electrónico" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Autores" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Editar" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Haz clic en un autor para cambiarlo. Arrástralos para cambiar su orden. Haz clic en eliminar para eliminarlos." #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Ver las entradas de este usuario" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "No existe coautor para dicho termino" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Eliminar" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "¿Estás seguro que deseas eliminar este autor?" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Clic para cambiar este autor, o arrástralo para cambiar su posición" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Buscar un autor" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Mío" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Nuevo comentario en tu entrada \"%s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Autor: %1$s (IP: %2$s , %3$s)" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "Enlace : %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Comentario:" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Puedes ver todos los comentarios de esta entrada aquí:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Comentario: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Nuevo trackback en tu entrada \"%s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Sitio web: %1$s (IP: %2$s , %3$s)" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Extracto:" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Puedes ver todos los trackbacks de esta entrada aquí:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: “%2$s”" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Nuevo pingback en tu entrada \"%s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Puedes ver todos los pingbacks de esta entrada aquí:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Enlace permanente: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "A la papelera: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Elimínalo: %s" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Márcalo como spam: %s" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Autor Invitado" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Autores Invitados" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Todos los Autores Invitados" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Añadir un Autor Invitado" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Editar Autor Invitado" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Nuevo Autor Invitado" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Ver Autor Invitado" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Buscar Autor Invitado" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "No se encontraron autores invitados" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "No se encontraron autores invitados en la Papelera" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Actualizar Autor Invitado" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Acerca del autor invitado" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Agregar Nuevo" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Autor invitado actualizado. Ver el perfil" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Autor invitado actualizado." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Autor invitado restaurado a la revisión de %s" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Autor invitado guardado." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Autor invitado enviado. Revisa el perfil" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Autor invitado anegado para: %1$s. Revisa el perfil" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Autor invitado actualizado. Revisar el Perfil" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Así que estás haciendo algo sospechoso… ¿ah?" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "No tienes permiso para realizar esta acción." #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "No se puede eliminar el Autor Invitado porque no existe." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Uno de los autores no existe. ¿Volver a intentarlo?" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Por favor, asegúrate de elegir una opción." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Autor invitado eliminado." #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Slug único" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Nombre" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Especificaste este autor invitado para ser eliminado:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Nota: Si deseas eliminar al autor invitado y todos sus entradas, primero debes eliminar sus entradas y luego volver a borrar el autor invitado." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Reasignar a otro autor:" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Dejar entradas asignadas al usuario, %s." #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Quitar la firma de mensajes (pero dejar cada post en su estado actual)." #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Confirmar Eliminación" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "Mapeo de Usuarios de WordPress" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "—No asignado—" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "No se puede crear Autores Invitados sin nombre a mostrar." #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "El nombre a mostrar tiene un conflicto con el de otro usuario invitado." #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Nombre a Mostrar" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Nombre" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Apellidos" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Cuenta Enlazada" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Info biográfica" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s es un campo obligatorio" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "El valor user_login no puede duplicarse en autor invitado o usuario asignado" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "No existe el Autor invitado" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "El co-autor reasignado no existe" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "No existe ningún usuario con ese ID" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Editar Perfil" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Crear Perfil" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-Autores" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-Autor" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Con cuenta vinculada" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Sin cuenta vinculada" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Eliminar" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Ver Entradas" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtrar" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Por favor especifique un user_login válido" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Por favor especifique un inicio de sesión válido para co-autor" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-es_ES-1fdf421c05c1140f6d71444ea2b27638.json000060400000000405147177171730017656 0ustar00{"translation-revision-date":"2023-08-28 11:25:37+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autores"]}}}languages/co-authors-plus-es_ES-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000524147177171730020425 0ustar00{"translation-revision-date":"2023-08-28 11:25:37+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autores"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-es_ES.mo000060400000022574147177171730013135 0ustar00t\\]czi-A?, 7 W _ oq =  ) 4 %D j t     > . J Q V h u  7   )! K e_ H  3$ FX 6   , % 4A-Fty!  "@c #'&K!r %E8=Rg;p    -$ 6A[t|,-.B1q2.3@b26Qtg  )GE)@_g|EC LW-g    ,7;s  7Qi9qPJ7T8C| / - '%<#b$##2+&$Rw "' GJ +    3 %!^.!!!! !@! ""'" B" N"Y"As"" """ ##,#A#$V#{#8#6#7#:,$0g$$$$ $1$R)% and %s is a required field-- Not mapped --Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browserAIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAll done! %d post was affected.All done! %d posts were affected.Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileEmail : %sExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo matching co-authors were found.No user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSkipping - Post #%1$d already has co-authors assigned: %2$sSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorUpdating - Adding %1$s's byline to post #%2$dView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newhttps://wordpress.org/plugins/co-authors-plus/user_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2023-08-28 11:25:37+0000 Language: es Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 y %s es un campo obligatorio-- Sin asignación --Nota: Para editar autores de la entrada, por favor, activa JavaScript o usa un navegador compatibleAIMAcerca de este autor invitadoAñadir nuevoAñadir nuevo autor invitadoTodos los autores invitados¡Todo listo! %d entrada afectada.¡Todo listo! %d entradas afectadas.Permite asignar varios autores a una entrada. Este plugin es una versión extendida del plugin Co-Authors desarrollado por Weston Ruter.¿Seguro que quieres eliminar este autor?Autor : %1$s (IP: %2$s , %3$s)AutoresInformación biográficaHaz clic en un autor para cambiarlo. Arrastra para cambiar su orden. Haz clic en Eliminar para eliminarlos.Haz clic para cambiar este autor o arrastra para cambiar su posiciónCo-autorCo-autoresCo-Authors PlusEl co-autor no existe. ¿Intentarlo otra vez?Comentario: Confirmar borradoInformación de contactoCrear perfilCampo personalizado borrado.Campo personalizado actualizado.BorrarBorrarlo: %sNombre visibleNombre visible ya está en uso por otro autor invitado.¿Haciendo trampas?Correo electrónicoEditarEditar autor invitadoEditar perfilCorreo electrónico : %sExtracto:FiltrarNombreAutor invitadoAutores invitadosEste autor invitado no puede borrarse porque no existe.Autor invitado borrado.El autor invitado no existeAutor invitado restaurado desde la revisión con fecha %sAutor invitado guardado.Autor invitado programado para: %1$s. Vista previa del perfilAutor invitado enviado. Vista previa del perfilAutor invitado actualizadoAutor invitado actualizado. Ver perfilAutor invitado actualizado. Vista previa del perfilNo se pueden crear autores invitados sin nombre visible.IDJabber / Google TalkApellidosDejar entradas asignadas al autor indicado, %s.Cuenta vinculadaM j, Y @ G:iMíosMohammad Jangda, Daniel Bachhuber, AutomatticNombreNuevo autor invitadoNuevo comentario en tu entrada «%s»Nuevo pingback en tu entrada «%s»Nuevo trackback en tu entrada «%s»No hay co-autores para ese términoNo se encontraron autores invitadosNo se encontraron autores invitados en la papeleraNo se encontraron co-autores que coincidan.No existe ningún usuario con ese IDNota: si quieres borrar este autor invitado y todas sus entradas, primero debes eliminar las entradas y luego volver aquí para borrar el autor invitado.Enlace permanente: %sPor favor, selecciona una opción.Por favor, especifica la información de acceso válida para el coautorPor favor, especifica un user_login válidoEntradasEntradas de %sReasignar a otro co-autor:El usuario co-autor para la reasignación no existeEliminarBorrar información del autor desde las entradas (pero deja cada entrada en su estado actual).GuardarBuscar autores invitadosBuscar un autorMostrar todosOmitiendo - La entrada #%1$d ya tiene co-autores asignados: %2$sSlugMarcar como SPAM: %sEnviarlo a la papelera: %sURL : %sURL únicaActualizar autor InvitadoActualizando - Añadiendo información de %1$s a la entrada #%2$dVer autor invitadoVer entradasVer las entradas de este autorVisita la web %s’sWebWeb: %1$s (IP: %2$s, %3$s)Con cuenta vinculadaSin cuenta vinculadaAsignación de usuarios de WordPressYahoo IMPuedes ver todos los comentarios de esta entrada aquí: Puedes ver todos los pingbacks de esta entrada aquí: Puedes ver todos los trackbacks de esta entrada aquí: No tienes suficientes permisos para realizar esta acción.Seleccionaste este autor invitado para borrarlo:[%1$s] Comentario: «%2$s»[%1$s] Pingback: «%2$s»[%1$s] Trackback: «%2$s»Añadir nuevohttps://es.wordpress.org/plugins/co-authors-plus/user_login no puede duplicar un usuario asignado o un autor invitado ya existenteslanguages/co-authors-plus-es_ES.po000060400000046552147177171730013142 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2023-08-28 11:25:37+0000\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: template-tags.php:91 msgid " and " msgstr " y " #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Visita la web %s’s" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Entradas de %s" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Permite asignar varios autores a una entrada. Este plugin es una versión extendida del plugin Co-Authors desarrollado por Weston Ruter." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "https://es.wordpress.org/plugins/co-authors-plus/" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "¡Todo listo! %d entrada afectada." msgstr[1] "¡Todo listo! %d entradas afectadas." #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "Actualizando - Añadiendo información de %1$s a la entrada #%2$d" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "Omitiendo - La entrada #%1$d ya tiene co-autores asignados: %2$s" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Autores" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Entradas" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Editar" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Buscar un autor" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Míos" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Autor : %1$s (IP: %2$s , %3$s)" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Comentario: " #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Borrarlo: %s" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "No se encontraron autores invitados" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "No se encontraron autores invitados en la papelera" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Acerca de este autor invitado" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Autor invitado actualizado. Ver perfil" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Campo personalizado actualizado." #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Autor invitado actualizado" #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Autor invitado restaurado desde la revisión con fecha %s" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Autor invitado enviado. Vista previa del perfil" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "M j, Y @ G:i" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Autor invitado actualizado. Vista previa del perfil" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "No tienes suficientes permisos para realizar esta acción." #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Guardar" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "URL única" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Nombre" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Información de contacto" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Reasignar a otro co-autor:" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "Asignación de usuarios de WordPress" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Sin asignación --" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Nombre visible ya está en uso por otro autor invitado." #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Nombre visible" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Nombre" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Cuenta vinculada" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Información biográfica" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s es un campo obligatorio" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Mostrar todos" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Con cuenta vinculada" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Sin cuenta vinculada" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Borrar" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtrar" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Añadir nuevo" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "Correo electrónico" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Web" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Apellidos" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Añadir nuevo" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Eliminar" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Por favor, especifica la información de acceso válida para el coautor" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Por favor, especifica un user_login válido" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Ver entradas" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Crear perfil" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Editar perfil" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "No existe ningún usuario con ese ID" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-autor" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-autores" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "El usuario co-autor para la reasignación no existe" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "El autor invitado no existe" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login no puede duplicar un usuario asignado o un autor invitado ya existentes" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "No se pueden crear autores invitados sin nombre visible." #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Confirmar borrado" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Borrar información del autor desde las entradas (pero deja cada entrada en su estado actual)." #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Dejar entradas asignadas al autor indicado, %s." #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Nota: si quieres borrar este autor invitado y todas sus entradas, primero debes eliminar las entradas y luego volver aquí para borrar el autor invitado." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Seleccionaste este autor invitado para borrarlo:" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Autor invitado borrado." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Por favor, selecciona una opción." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "El co-autor no existe. ¿Intentarlo otra vez?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Este autor invitado no puede borrarse porque no existe." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "¿Haciendo trampas?" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Autor invitado programado para: %1$s. Vista previa del perfil" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Autor invitado guardado." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Campo personalizado borrado." #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Actualizar autor Invitado" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Buscar autores invitados" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Ver autor invitado" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Nuevo autor invitado" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Editar autor invitado" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Añadir nuevo autor invitado" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Todos los autores invitados" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Autores invitados" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Autor invitado" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Marcar como SPAM: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Enviarlo a la papelera: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Enlace permanente: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: «%2$s»" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Puedes ver todos los pingbacks de esta entrada aquí: " #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Nuevo pingback en tu entrada «%s»" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: «%2$s»" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Puedes ver todos los trackbacks de esta entrada aquí: " #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Extracto:" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Web: %1$s (IP: %2$s, %3$s)" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Nuevo trackback en tu entrada «%s»" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Comentario: «%2$s»" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Puedes ver todos los comentarios de esta entrada aquí: " #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Nuevo comentario en tu entrada «%s»" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Haz clic para cambiar este autor o arrastra para cambiar su posición" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "¿Seguro que quieres eliminar este autor?" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "No hay co-autores para ese término" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Ver las entradas de este autor" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Haz clic en un autor para cambiarlo. Arrastra para cambiar su orden. Haz clic en Eliminar para eliminarlos." #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "No se encontraron co-autores que coincidan." #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "Correo electrónico : %s" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "Nota: Para editar autores de la entrada, por favor, activa JavaScript o usa un navegador compatible" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-fa_IR-1fdf421c05c1140f6d71444ea2b27638.json000060400000000443147177171730017642 0ustar00{"translation-revision-date":"2019-11-02 08:54:58+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fa","plural-forms":"nplurals=1; plural=0;"},"Authors":["\u0646\u0648\u06cc\u0633\u0646\u062f\u0647"]}}}languages/co-authors-plus-fa_IR-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000562147177171730020411 0ustar00{"translation-revision-date":"2019-11-02 08:54:58+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fa","plural-forms":"nplurals=1; plural=0;"},"Authors":["\u0646\u0648\u06cc\u0633\u0646\u062f\u0647"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-fa_IR.mo000060400000024310147177171730013105 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@J"Nq& &$` Sj&!X\o". *a><  & 8 DOVpW&- B;*~c@2Yo1i 3ZK   @"":3]//E.7 Ef < !T!B."5q" ""A"8#L#S# #&#'$-$?$H$Z$ u$$,$&$$.%#=% a%%n%%%%%_%]&p&=]'O''(&( B(xO( and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2019-11-02 08:54:58+0000 Language: fa Plural-Forms: nplurals=1; plural=0; X-Generator: GlotPress/4.0.0-alpha.7 و %s یک فیلد ضروری است- بدون نقش -AIMدرباره نویسنده مهمانافزودنافزودن نویسنده مهمانهمه نویسندگان مهماناجازه می دهد چندین نویسنده به یک پست اختصاص داده شود. مطمئنید که می خواهید این نویسنده را حذف کنید ؟نویسنده: %1$s (IP: %2$s , %3$s)نویسندهاطلاعات زندگینامهبرای تغییر نویسنده ها روی یکی از آنها کلیک کنید. برای تغییر ترتیب آنها را با کشیدن جابجا کنید. برای حذف هرکدام روی حذف کردن کلیک کنید.برای تغییر این نویسنده کلیک کنید یا با درگ کردن و کشیدن آنها موقعیتشان را تغییر دهید.نویسنده همکارنویسندگان همکارنویسنده همکارنویسنده همکار وجود ندارد. دوباره امتحان می کنید؟اظهار نظر:تایید حذفاطلاعات تماسایجاد پروفایلفیلد سفارشی حذف شد.فیلد سفارشی بروزرسانی شد.حذفآن را حذف کنید: %sنام نمایشینام نمایشی با یکی دیگر از نویسندگان مهمان در تضاد است.آیا در چیزی مثل ماهی، متعجب شدید؟ایمیلویرایشویرایش نویسنده مهمانویرایش پروفایلگلچین:فیلترنامنویسنده مهماننویسندگان مهماننویسنده مهمان نمی تواند حذف شود زیرا وجود ندارد.نویسنده مهمان حذف شد.نویسنده همکار وجود نداردنویسنده مهمان به نسخه %s بازگردانی شدنویسنده مهمان ذخیره شد.نویسنده مهمان برنامه ریزی شده برای: %1$s. مشاهده پروفایلنویسنده مهمان ثبت شد. مشاهده پروفایلنویسنده مهمان بروزرسانی شد.نویسنده مهمان به روز شد. مشاهده پروفایل نویسنده مهمان بروزرسانی شد. مشاهده پروفایلنویسندگان مهمان نمی توانند بدون نامهای نمایشی ایجاد شوند.شناسهجابر / گوگل تالکنام خانوادگیترک پست اختصاص داده شده به کاربران نقشه برداری، %s.حساب کاربری مرتبطM j، Y @ G:iمال منمحمد جندا، دانیال باچبور، اتوماتیکاطلاعات شخصینویسنده مهمان جدیددیدگاه جدید برای مطلب شما "%s"بازتاب جدی روی مطلب شما "%s"دنبالک جدیدی در پست خود "%s"هیچ نویسنده همکاری برای آن وجود ندارد.نویسنده ی مهمانی پیدا نشدنویسنده ی مهمانی در سطل زباله پیدا نشدهیچ کاربری با آن شناسه وجود نداردتوجه: اگر می خواهید نویسنده مهمان و همه پستهایش را حذف کنید، ابتدا باید پست های آن را حذف کنید و سپس نویسنده را حذف کنید.پیوند یکتا: %sلطفا مطمئن شوید که یک گزینه را انتخاب کرده اید.لطفا ورود یک نویسنده همکار مشخص کنیدلطفا یک user_login معتبر وارد کنیدپست هاارسال شده توسط %sاختصاص به یکی دیگر از نویسنده همکار:تغییر نویسنده همکار وجود نداردحذفحذف عنوان نویسنده از مطلب ها (اما در هر پست وضعیت فعلی خودرا ترک میکند).ذخیرهجستجوی نویسنده مهمانجستجو برای یک نویسندهنمایش همهنامکاسپم آن: %sسطل زباله آن: %sلینک : %sپیوند سفارشیبروزرسانی نویسنده مهمانمشاهده نویسنده مهمانمشاهده نوشته‌هانمایش ارسال های این کاربرمشاهده %s’ وبسایتوبسایتوبسایت : %1$s (IP: %2$s , %3$s)با اکانت متصلبدون اکانت متصلنقش کاربر وردپرسیاهو مسنجرشما می توانید تمام نظرات این مطلب را در اینجا ببینید:شما می توانید تمام بازتاب هایی را که روی این مطلب فرستاده شده را مشاهده نمایید:شما میتوانید تمام بازتاب های این مطلب را از اینجا مشاهده کنید:شما اجازه انجام این عمل را ندارید.این نویسنده مهمان را برای حذف مشخص کرده اید:[%1$s] دیدگاه : "%2$s"[%1$s] پینگ بک : "%2$s"[%1$s] بازتاب: "%2$s"افزودنuser_login نمی تواند نویسنده همکار موجود و یا نقشه کاربران را تکثیر کندlanguages/co-authors-plus-fa_IR.po000060400000051223147177171730013113 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2019-11-02 08:54:58+0000\n" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "ارسال شده توسط %s" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "اجازه می دهد چندین نویسنده به یک پست اختصاص داده شود. " #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "نویسنده همکار" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "مشاهده %s’ وبسایت" #: template-tags.php:91 msgid " and " msgstr "و " #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "محمد جندا، دانیال باچبور، اتوماتیک" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "وبسایت" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "افزودن" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "ویرایش" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "ذخیره" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "حذف" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "حذف" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "ایمیل" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "شناسه" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "شما اجازه انجام این عمل را ندارید." #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "شما میتوانید تمام بازتاب های این مطلب را از اینجا مشاهده کنید:" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "شما می توانید تمام بازتاب هایی را که روی این مطلب فرستاده شده را مشاهده نمایید:" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "شما می توانید تمام نظرات این مطلب را در اینجا ببینید:" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "سطل زباله آن: %s" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "درباره نویسنده مهمان" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "دیدگاه جدید برای مطلب شما \"%s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "دنبالک جدیدی در پست خود \"%s\"" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "حساب کاربری مرتبط" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "حذف عنوان نویسنده از مطلب ها (اما در هر پست وضعیت فعلی خودرا ترک میکند)." #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "جستجوی نویسنده مهمان" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "جستجو برای یک نویسنده" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "تغییر نویسنده همکار وجود ندارد" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "ترک پست اختصاص داده شده به کاربران نقشه برداری، %s." #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "تایید حذف" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "برای تغییر این نویسنده کلیک کنید یا با درگ کردن و کشیدن آنها موقعیتشان را تغییر دهید." #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "برای تغییر نویسنده ها روی یکی از آنها کلیک کنید. برای تغییر ترتیب آنها را با کشیدن جابجا کنید. برای حذف هرکدام روی حذف کردن کلیک کنید." #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "بروزرسانی نویسنده مهمان" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "بازتاب جدی روی مطلب شما \"%s\"" #: co-authors-plus.php:99 msgid "Comment: " msgstr "اظهار نظر:" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "اطلاعات شخصی" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "اطلاعات زندگینامه" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "اطلاعات تماس" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "اسپم آن: %s" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "اختصاص به یکی دیگر از نویسنده همکار:" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "ایجاد پروفایل" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "این نویسنده مهمان را برای حذف مشخص کرده اید:" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "افزودن نویسنده مهمان" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "افزودن" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "آیا در چیزی مثل ماهی، متعجب شدید؟" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "آن را حذف کنید: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] دیدگاه : \"%2$s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] بازتاب: \"%2$s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] پینگ بک : \"%2$s\"" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "پست ها" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "پیوند سفارشی" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "پیوند یکتا: %s" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "گلچین:" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "وبسایت : %1$s (IP: %2$s , %3$s)" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "ویرایش پروفایل" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "ویرایش نویسنده مهمان" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "هیچ کاربری با آن شناسه وجود ندارد" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "هیچ نویسنده همکاری برای آن وجود ندارد." #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "همه نویسندگان مهمان" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "نامک" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "نام خانوادگی" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "نام نمایشی با یکی دیگر از نویسندگان مهمان در تضاد است." #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "نام نمایشی" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "نام" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "نویسندگان همکار" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "نویسندگان مهمان نمی توانند بدون نامهای نمایشی ایجاد شوند." #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "نویسنده: %1$s (IP: %2$s , %3$s)" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "نویسنده ی مهمانی در سطل زباله پیدا نشد" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "نویسنده ی مهمانی پیدا نشد" #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "نویسنده همکار وجود ندارد. دوباره امتحان می کنید؟" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "نویسنده همکار" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "نویسنده مهمان ذخیره شد." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "نویسنده مهمان حذف شد." #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "نویسنده مهمان جدید" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "نویسنده مهمان ثبت شد. مشاهده پروفایل" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "نویسنده مهمان بروزرسانی شد. مشاهده پروفایل" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "نویسنده مهمان بروزرسانی شد." #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "نویسنده مهمان برنامه ریزی شده برای: %1$s. مشاهده پروفایل" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "نویسنده مهمان به روز شد. مشاهده پروفایل " #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "نویسنده مهمان به نسخه %s بازگردانی شد" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "نویسنده مهمان نمی تواند حذف شود زیرا وجود ندارد." #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "نویسنده مهمان" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "نویسنده" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "نمایش ارسال های این کاربر" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "نمایش همه" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "نقش کاربر وردپرس" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "مطمئنید که می خواهید این نویسنده را حذف کنید ؟" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "مشاهده نویسنده مهمان" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "لطفا یک user_login معتبر وارد کنید" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "لطفا ورود یک نویسنده همکار مشخص کنید" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "لطفا مطمئن شوید که یک گزینه را انتخاب کرده اید." #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "لینک : %s" #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "فیلد سفارشی حذف شد." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "فیلد سفارشی بروزرسانی شد." #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "فیلتر" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "- بدون نقش -" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s یک فیلد ضروری است" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "مال من" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "جابر / گوگل تالک" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "یاهو مسنجر" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "توجه: اگر می خواهید نویسنده مهمان و همه پستهایش را حذف کنید، ابتدا باید پست های آن را حذف کنید و سپس نویسنده را حذف کنید." #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "M j، Y @ G:i" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "مشاهده نوشته‌ها" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "بدون اکانت متصل" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "با اکانت متصل" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "نویسنده همکار وجود ندارد" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login نمی تواند نویسنده همکار موجود و یا نقشه کاربران را تکثیر کند" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "نویسندگان مهمان" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-fr_FR-1fdf421c05c1140f6d71444ea2b27638.json000060400000000404147177171730017655 0ustar00{"translation-revision-date":"2020-12-26 09:47:15+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr","plural-forms":"nplurals=2; plural=n > 1;"},"Authors":["Auteurs"]}}}languages/co-authors-plus-fr_FR-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000523147177171730020424 0ustar00{"translation-revision-date":"2020-12-26 09:47:15+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fr","plural-forms":"nplurals=2; plural=n > 1;"},"Authors":["Auteurs"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-fr_FR.mo000060400000021140147177171730013121 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@NSo , Mq  / ";L]|   E$+3L _iqy=4Dh`M;3NoD3 S _l-t-,-&El.&4'%.&T{U  (!-O i u" & 7 )H r ={ : ; )0!9Z!!!!!h! and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2020-12-26 09:47:15+0000 Language: fr Plural-Forms: nplurals=2; plural=n > 1; X-Generator: GlotPress/4.0.0-alpha.7 et %s est un champ obligatoire-- Non associé --AIMÀ propos de l'auteur invitéAjouterAjouter un nouvel auteur invitéTous les auteurs invitésPermettre à plusieurs auteurs d'être associé à un même article. Ce plugin est une version étendue du plugin Co-Authors développé par Weston Ruter.Souhaitez-vous vraiment retirer cet auteur ?Auteur : %1$s (IP : %2$s , %3$s)AuteursInfos biographiquesCliquer sur un auteur pour en changer. Glisser-déposer pour modifier l'ordre. Cliquer sur Retirer pour le retirer.Cliquer pour changer cet auteur ou glisser-déposer pour modifier sa positionCo-AuteurCo-AuteursCo-Authors PlusLe co-auteur n'existe pas. Essayer à nouveau ?Commentaire :Confirmer la suppressionInfos de contactCréer un profilCahmp personnalisé supprimé.Champ personnalisé mis à jourSupprimerSupprimer %sNom affichéLe nom affiché est en conflit avec le nom d'un autre auteur invité.On fait des choses bizarres ?E-mailÉditerÉditer l'auteur invitéModifier le profilExtrait :FiltrerPrénomAuteur invitéAuteurs invitésL'auteur invité ne peut être supprimé car il n'existe pas.Auteur invité supprimé.L'auteur invité n'existe pasAuteur invité rétabli à la révision datant du %sAuteur invité enregistré.Auteur invité prévu pour : %1$s. Aperçu du profilAuteur invité enregistré. Aperçu du pofilAuteur invité mis à jour.Auteur invité mis à jour. Voir le profilAuteur invité mis à jour. Aperçu du profilLes auteurs invités ne peuvent être créés sans noms à afficher.IDJabber / Google TalkNomLiasser les articles associés à l'utilisateur %s.Compte liéj M Y à G:iLe mienMohammad Jangda, Daniel Bachhuber, AutomatticNomNouvel auteur invitéNouveau commentaire à votre article « %s »Nouveau pingback pour votre article « %s »Nouveau trackback pour votre article « %s »Aucun co-auteur n'existe pour ce termeAucun auteur invité trouvéAucun auteur invité trouvé dans la corbeilleAucun utilisateur ne possède cette IDRemarque : si vous souhaitez supprimer l'auteur invité et tous ses articles, vous devriez d'abord supprimer tous ses articles puis revenir pour supprimer l'auteur invité.Permalien : %sVeuillez choisir une option.Veuillez indiquer un identifiant de co-auteur valideVeuillez indiquer un identifiant valideArticlesArticles par %sRéassoicer à un nouveau co-auteur :Réassociation à un auteur inexistantRetirerSupprimer les infos sur l'article (mais laisser chaque article dans sin état actuel)EnregistrerRechercher des auteurs invitésRechercher un auteurTout afficherSlugConsidérer comme indésirable %sMettre à la corbeille %sURL : %sSlug uniqueMettre à jour l'auteur invitéAfficher l'auteur invitéArticlesVoir les articles de cet auteurVisiter le site de %sSite WebSite Web : %1$s (IP : %2$s , %3$s)Avec compte liéSans compte liéCorrespondance des utilisateurs WordPressMI YahooVous pouvez voir tous les commentaires pour cet article ici :Vous pouvez voir tous les pingbacks pour cet article ici :Vous pouvez voir tous les trackbacks pour cet article ici :Vous n'êtes pas autorisé à faire cela.Vous avez indiqué vouloir supprimer cet auteur invité :[%1$s] Commentaire : « %2$s »[%1$s] Pingback : « %2$s »[%1$s] Trackback : « %2$s »AjouterL'identifiant ne peut être le même que celui d'un auteur invité existant ou de l'utilisateur associélanguages/co-authors-plus-fr_FR.po000060400000046071147177171730013136 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2020-12-26 09:47:15+0000\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: template-tags.php:91 msgid " and " msgstr " et " #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Articles par %s" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Visiter le site de %s" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Permettre à plusieurs auteurs d'être associé à un même article. Ce plugin est une version étendue du plugin Co-Authors développé par Weston Ruter." #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Auteurs" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Cliquer sur un auteur pour en changer. Glisser-déposer pour modifier l'ordre. Cliquer sur Retirer pour le retirer." #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Articles" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Voir les articles de cet auteur" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Aucun co-auteur n'existe pour ce terme" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Éditer" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Retirer" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Souhaitez-vous vraiment retirer cet auteur ?" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Cliquer pour changer cet auteur ou glisser-déposer pour modifier sa position" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Rechercher un auteur" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Le mien" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Nouveau commentaire à votre article « %s »" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Auteur : %1$s (IP : %2$s , %3$s)" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Commentaire :" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Vous pouvez voir tous les commentaires pour cet article ici :" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Commentaire : « %2$s »" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Nouveau trackback pour votre article « %s »" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Site Web : %1$s (IP : %2$s , %3$s)" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Extrait :" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Vous pouvez voir tous les trackbacks pour cet article ici :" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback : « %2$s »" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Nouveau pingback pour votre article « %s »" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Vous pouvez voir tous les pingbacks pour cet article ici :" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback : « %2$s »" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalien : %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Mettre à la corbeille %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Supprimer %s" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Considérer comme indésirable %s" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Auteur invité" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Auteurs invités" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Tous les auteurs invités" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Ajouter un nouvel auteur invité" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Éditer l'auteur invité" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Nouvel auteur invité" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Afficher l'auteur invité" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Rechercher des auteurs invités" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Aucun auteur invité trouvé" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Aucun auteur invité trouvé dans la corbeille" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Mettre à jour l'auteur invité" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "À propos de l'auteur invité" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Auteur invité mis à jour. Voir le profil" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Champ personnalisé mis à jour" #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Cahmp personnalisé supprimé." #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Auteur invité mis à jour." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Auteur invité rétabli à la révision datant du %s" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Auteur invité enregistré." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Auteur invité enregistré. Aperçu du pofil" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Auteur invité prévu pour : %1$s. Aperçu du profil" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "j M Y à G:i" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Auteur invité mis à jour. Aperçu du profil" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "On fait des choses bizarres ?" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Vous n'êtes pas autorisé à faire cela." #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "L'auteur invité ne peut être supprimé car il n'existe pas." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Le co-auteur n'existe pas. Essayer à nouveau ?" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Veuillez choisir une option." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Auteur invité supprimé." #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Enregistrer" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Slug unique" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Nom" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Infos de contact" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Vous avez indiqué vouloir supprimer cet auteur invité :" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Remarque : si vous souhaitez supprimer l'auteur invité et tous ses articles, vous devriez d'abord supprimer tous ses articles puis revenir pour supprimer l'auteur invité." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Réassoicer à un nouveau co-auteur :" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Liasser les articles associés à l'utilisateur %s." #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Supprimer les infos sur l'article (mais laisser chaque article dans sin état actuel)" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Confirmer la suppression" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "Correspondance des utilisateurs WordPress" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Non associé --" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Les auteurs invités ne peuvent être créés sans noms à afficher." #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Le nom affiché est en conflit avec le nom d'un autre auteur invité." #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Nom affiché" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Prénom" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Nom" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-mail" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Compte lié" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Site Web" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "MI Yahoo" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Infos biographiques" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s est un champ obligatoire" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "L'identifiant ne peut être le même que celui d'un auteur invité existant ou de l'utilisateur associé" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "L'auteur invité n'existe pas" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Réassociation à un auteur inexistant" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Aucun utilisateur ne possède cette ID" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Modifier le profil" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Créer un profil" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-Auteurs" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-Auteur" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Tout afficher" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Avec compte lié" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Sans compte lié" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Supprimer" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Articles" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtrer" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Veuillez indiquer un identifiant valide" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Veuillez indiquer un identifiant de co-auteur valide" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Ajouter" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Ajouter" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-he_IL-1fdf421c05c1140f6d71444ea2b27638.json000060400000000513147177171730017640 0ustar00{"translation-revision-date":"2019-01-07 16:19+0200","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"he_IL","plural-forms":"nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? 2 : 3);"},"Authors":["\u05de\u05d7\u05d1\u05e8\u05d9\u05dd"]}}}languages/co-authors-plus-he_IL-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000632147177171730020407 0ustar00{"translation-revision-date":"2019-01-07 16:19+0200","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"he_IL","plural-forms":"nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? 2 : 3);"},"Authors":["\u05de\u05d7\u05d1\u05e8\u05d9\u05dd"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-he_IL.mo000060400000021500147177171730013103 0ustar00gT,o=a  %    ! 7 M T b >o         7, d z )  e H:  3 F 6 K ,U        ! + B b ~ #&&J!q %E7<Qfo t     1E\,s-.12/by@ ")L2! 4AYPas"3 0*L wN  !> V b m{M61htT*NUyVB&iBy3++8W)4& 3;[ y$,W N$Y~    % B %X ~   " $ !D!Ha!H!0!5$"Z"v"""" and %s is a required field-- Not mapped --About the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.Last NameLeave posts assigned to the mapped user, %s.Linked AccountMineNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Co-Authors Plus 3.1-beta Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2014-03-17 15:59:18+00:00 PO-Revision-Date: 2019-01-07 16:19+0200 Language: he_IL X-Generator: Poedit 2.1.1 Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? 2 : 3); ו%s הוא שדה חובה.-- לא מקושר --אודות המחברחדשהוספת מחבר אורחכל המחברים האורחיםמאפשר שיוך מספר מחברים לכל פוסט. התוסף הוא שדרוג של התוסף הישן Co-Authors מאתר Weston Ruter.האם באמת להסיר את המחבר הזה?מחבר : %1$s (IP: %2$s , %3$s)מחבריםמידע ביוגרפילחצו על מחבר כדי לשנות אותו. גררו מחברים כדי לשנות את הסדר שלהם. לחצו על הסרה כדי למחוק אותם.לחצו לעריכת המחבר, או גררו לשינוי המיקום שלומחבר שותףמחברים שותפיםמחברים שותפים פלוסמחבר-אורח לא קיים. לנסות שוב?תגובה:אישור מחיקהיצירת קשריצירת פרופילשדה מותאם נמחק.שדה מותאם עודכן בהצלחה.מחיקהמחיקה: %sשם תצוגהשם תצוגה מתנגש עם שם תצוגה של מחבר-אורח אחר.מה אתה זומם הא?דוא\"לעריכהעריכת מחבר אורחעריכת פרופילתקציר:סינוןשם פרטימחבר אורחמחברים אורחיםהמחבר-אורח לא קיים ולכן לא ניתן למחוק אותו.מחבר-אורח נמחק.מחבר אורח לא קייםמחבר אורח שיחזר לעותק שמור מ-%sמחבר אורח נשמר.מחבר אורח מתוזמן ל: %1$s. תצוגה מקדימהמחבר אורח נשמר. תצוגה מקדימהמחבר אורח עודכן בהצלחה.מחבר אורח עודכן בהצלחה. צפייה בפרופילמחבר אורח עודכן. תצוגה מקדימהמחבר-אורח לא יכול להיות ללא שם תצוגה.שם משפחההשאר פוסטים משוייכים למשתמש מקושר, %sחשבון מקושרשלישםמחבר אורח חדשתגובות חדשות על הפוסט שלך "%s"פינגבק חדש בפוסט שלך " %s"טראקבקים חדשים על הפוסט שלך " %s"לא נמצאו מחבריםלא נמצאו מחברים אורחיםלא נמצאו מחברים אורחים באשפהלא קיים משתמש עם ID זהשימו לב: על מנת למחוק את המחבר-אורח וכל הפוסטים שלו, יש קודם כל למחוק את כל הפוסטים שלו, ואז לחזור לכן ולמחוק את המחבר-אורחקישור: %sנא לבחור אפשרות.מחבר אורח לא תקיןשם משתמש לא תקיןפוסטיםכתבות מאת %sשיוך למחבר-אורח אחר:מחבר אורח משוייך לא קייםהסרההסרת שותפויות מהפוסט (הפוסט ישמור על הסטטוס שלו)שמירהחיפוש מחברים אורחיםחיפוש מחבריםהצג הכלכינוי ייחודי (slug)ספאם: %sאשפה: %sכתובת URL: %sכינוי ייחודיעדכון מחבר אורחצפיה במחבר אורחהצגת פוסטיםהצגת פוסטים לפי מחברמעבר לאתר של %sאתראתר:%1$s (IP:%2$s,%3$s)עם חשבונות מקושריםללא חשבונות מקושריםקישור משתמשיםכאן ניתן לראות את כל התגובות לפוסט זה:כאן ניתן לראות את כל הפינגבקים לפוסט זה:כאן ניתן לראות את כל הטראקבקים לפוסט זה:אין לך הרשאה לבצע פעולה זו.המחבר האורח הבא מיועד למחיקה:[%1$s] תגובות: "%2$s"[%1$s] פינגבקים: "%2$s"[%1$s] טראקבקים: "%2$s"חדשכינוי חייב להיות ייחודי ולא להיות זהה לשם-משתמש שקושר או למחבר-אורח אחר.languages/co-authors-plus-he_IL.po000060400000047041147177171730013116 0ustar00msgid "" msgstr "" "Project-Id-Version: Co-Authors Plus 3.1-beta\n" "Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2014-03-17 15:59:18+00:00\n" "PO-Revision-Date: 2019-01-07 16:19+0200\n" "Language: he_IL\n" "X-Generator: Poedit 2.1.1\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : n>10 && n%10==0 ? 2 : 3);\n" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "מחברים" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "לחצו על מחבר כדי לשנות אותו. גררו מחברים כדי לשנות את הסדר שלהם. לחצו על הסרה כדי למחוק אותם." #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "פוסטים" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "הצגת פוסטים לפי מחבר" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "לא נמצאו מחברים" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "עריכה" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "הסרה" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "האם באמת להסיר את המחבר הזה?" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "לחצו לעריכת המחבר, או גררו לשינוי המיקום שלו" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "חיפוש מחברים" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "שלי" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "תגובות חדשות על הפוסט שלך \"%s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "מחבר : %1$s (IP: %2$s , %3$s)" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "כתובת URL: %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "תגובה:" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "כאן ניתן לראות את כל התגובות לפוסט זה:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] תגובות: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "טראקבקים חדשים על הפוסט שלך \" %s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "אתר:%1$s (IP:%2$s,%3$s)" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "תקציר:" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "כאן ניתן לראות את כל הטראקבקים לפוסט זה:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] טראקבקים: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "פינגבק חדש בפוסט שלך \" %s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "כאן ניתן לראות את כל הפינגבקים לפוסט זה:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] פינגבקים: \"%2$s\"" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "קישור: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "אשפה: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "מחיקה: %s" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "ספאם: %s" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "מחבר אורח" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "מחברים אורחים" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "כל המחברים האורחים" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "הוספת מחבר אורח" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "עריכת מחבר אורח" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "מחבר אורח חדש" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "צפיה במחבר אורח" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "חיפוש מחברים אורחים" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "לא נמצאו מחברים אורחים" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "לא נמצאו מחברים אורחים באשפה" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "עדכון מחבר אורח" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "אודות המחבר" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "חדש" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "מחבר אורח עודכן בהצלחה. צפייה בפרופיל" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "שדה מותאם עודכן בהצלחה." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "שדה מותאם נמחק." #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "מחבר אורח עודכן בהצלחה." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "מחבר אורח שיחזר לעותק שמור מ-%s" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "מחבר אורח נשמר." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "מחבר אורח נשמר. תצוגה מקדימה" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "מחבר אורח מתוזמן ל: %1$s. תצוגה מקדימה" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "מחבר אורח עודכן. תצוגה מקדימה" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "מה אתה זומם הא?" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "אין לך הרשאה לבצע פעולה זו." #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "המחבר-אורח לא קיים ולכן לא ניתן למחוק אותו." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "מחבר-אורח לא קיים. לנסות שוב?" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "נא לבחור אפשרות." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "מחבר-אורח נמחק." #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "שמירה" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "כינוי ייחודי" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "שם" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "יצירת קשר" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "המחבר האורח הבא מיועד למחיקה:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "שימו לב: על מנת למחוק את המחבר-אורח וכל הפוסטים שלו, יש קודם כל למחוק את כל הפוסטים שלו, ואז לחזור לכן ולמחוק את המחבר-אורח" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "שיוך למחבר-אורח אחר:" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "השאר פוסטים משוייכים למשתמש מקושר, %s" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "הסרת שותפויות מהפוסט (הפוסט ישמור על הסטטוס שלו)" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "אישור מחיקה" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "חדש" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "קישור משתמשים" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- לא מקושר --" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "מחבר-אורח לא יכול להיות ללא שם תצוגה." #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "שם תצוגה מתנגש עם שם תצוגה של מחבר-אורח אחר." #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "שם תצוגה" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "שם פרטי" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "שם משפחה" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "כינוי ייחודי (slug)" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "דוא\\\"ל" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "חשבון מקושר" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "אתר" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "מידע ביוגרפי" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s הוא שדה חובה." #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "כינוי חייב להיות ייחודי ולא להיות זהה לשם-משתמש שקושר או למחבר-אורח אחר." #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "מחבר אורח לא קיים" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "מחבר אורח משוייך לא קיים" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "לא קיים משתמש עם ID זה" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "עריכת פרופיל" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "יצירת פרופיל" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "מחברים שותפים" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "מחבר שותף" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "הצג הכל" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "עם חשבונות מקושרים" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "ללא חשבונות מקושרים" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "מחיקה" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "הצגת פוסטים" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "סינון" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "שם משתמש לא תקין" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "מחבר אורח לא תקין" #: template-tags.php:91 msgid " and " msgstr " ו" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "כתבות מאת %s" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "מעבר לאתר של %s" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "מחברים שותפים פלוס" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "מאפשר שיוך מספר מחברים לכל פוסט. התוסף הוא שדרוג של התוסף הישן Co-Authors מאתר Weston Ruter." #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-is_IS-1fdf421c05c1140f6d71444ea2b27638.json000060400000000441147177171730017666 0ustar00{"translation-revision-date":"2016-12-28 12:17:54+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"is","plural-forms":"nplurals=2; plural=n % 10 != 1 || n % 100 == 11;"},"Authors":["H\u00f6fundar"]}}}languages/co-authors-plus-is_IS-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000560147177171730020435 0ustar00{"translation-revision-date":"2016-12-28 12:17:54+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"is","plural-forms":"nplurals=2; plural=n % 10 != 1 || n % 100 == 11;"},"Authors":["H\u00f6fundar"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-is_IS.mo000060400000021321147177171730013132 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@ej 8"  [  !/'? gu   @(Py  @0D0_oJd<OR _b v0 -  &?f.-*).7(0Y"b'2 ZFLd w  % = V \ z    > >!?C!A!4!!$"$9" ^"ek" and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2016-12-28 12:17:54+0000 Language: is Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11; X-Generator: GlotPress/4.0.0-alpha.7 og %s krefst útfyllingar-- Ekki tengt --AIMUm gestahöfundinnBæta nýjumBæta við nýjum gestahöfundAllir gestahöfundarGerir kleift að skilgreina marga höfunda fyrir hverja færslu. Þessi viðbót er útvíkkuð útgáfa af Co-Authors viðbótinni sem þróuð var af Weston Ruter.Ertu viss um að þú viljir fjarlægja þennan höfund?Höfundur : %1$s (IP: %2$s , %3$s)HöfundarPersónuupplýsingarSmelltu á höfund til þess að gera breytingar. Dragðu til þess að breyta staðsetningu þeirra. Smelltu á fjarlægja til þess að fjarlægja þá.Smelltu til þess að breyta þessum höfund eða dragðu hann til að breyta staðsetninguMeðhöfundurMeðhöfundarCo-Authors PlusMeðhöfundur er ekki til. Reyna aftur?Athugasemd : Staðfesta eyðinguHvar má ná sambandi við þig?Búa til prófílSérreiti eyttSérsniðinn reitur uppfærður.EyðaEyða: %sNafn til að sýnaBirtingarnafn rekst á við birtingarnafn annars gestahöfundar.Ertu að gera eitthvað grunsamlegt, ha?TölvupóstfangBreytaBreyta gestahöfundiBreyta prófílÚtdráttur:SíaEiginnafnGestahöfundurGestahöfundarEkki er hægt að eyða gestahöfundi þar sem hann er ekki til.Gestahöfundi eytt.Gestahöfundur er ekki tilGestahöfundur endurvakinn samkvæmt útgáfu %sGestahöfundur vistaðurGestahöfundur skipulagður fyrir: %1$s. Forskoða prófílGestahöfundur sendi inn. Skoða prófílGestahöfundur uppfærðurGestahöfundur uppfærður. Skoða prófílGestahöfundur uppfærður. Forskoða prófílEkki er hægt að stofna gestahöfund án þess að skilgreina nafn til birtingar.IDJabber / Google-talKenninafnHafa færslur áfram tengdar við notandann, %s.Tengdur aðgangurM j, Y @ G:iMínarMohammad Jangda, Daniel Bachhuber, AutomatticNafnNýr gestahöfundurNý athugasemd við færslu "%s"Ný bakvísun á færsluna þína "%s"Ný bakvísun á færslu "%s"Enginn meðhöfundur er til fyrir þetta merkiEnginn gestahöfundur finnstEnginn gestahöfundur finnst í ruslatunnunniEnginn notandi er til með það auðkenniAthugið: Ef þú vilt eyða gestahöfundi og öllum færslum hans, eyddu færslunum fyrst og komdu aftur til þess að eyða gestahöfundnum.Fast veffang: %sGakktu úr skugga um að eitthvað sé valið.Vinsamlegast skilgreindu gilt meðhöfundar notandanafnVinsamlegast skilgreindu gilt user_loginFærslurFærslur eftir þennan höfund: %sEndurúthluta til annars meðhöfundar.Meðhöfundur sem endurúthluta á til er ekki tilFjarlægjaFjarlægja upplýsingar um höfund úr færslur (en halda núverandi stöðu færslunnar).VistaLeita að gestahöfundiLeita að höfundiSýna alltNetvænt stuttheitiMerkja amapóst: %sFleygja: %sVefslóð : %sEinkvæm stuttslóðUppfæra gestahöfundSkoða gestahöfundSkoða færslurSkoða færslur eftir þennan höfundSkoða vef höfundar: %sVefurVefur: %1$s (IP: %2$s , %3$s)Tengt við aðgangÓtengt við aðgangWordPress notanda tengingYahoo IMÞú getur séð allar athugasemdir við þessa færslu hér: Þú getur séð allar bakvísanir fyrir þessa færslu hér: Þú getur séð allar bakrakningar fyrir þessa færslu hér: Þú hefur ekki heimild til þess að framkvæma þessa aðgerð.Þú hefur merkt þennan gestahöfund til eyðingar:[%1$s] Athugasemd: "%2$s"[%1$s] Bakvísun: „%2$s“[%1$s] Bakvísun: „%2$s“Bæta nýjumuser_login getur ekki innihaldið gildi sem er til fyrir núverandi gestahöfund eða tengdan notandalanguages/co-authors-plus-is_IS.po000060400000046262147177171730013150 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2016-12-28 12:17:54+0000\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: template-tags.php:91 msgid " and " msgstr " og " #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Gerir kleift að skilgreina marga höfunda fyrir hverja færslu. Þessi viðbót er útvíkkuð útgáfa af Co-Authors viðbótinni sem þróuð var af Weston Ruter." #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Færslur eftir þennan höfund: %s" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Skoða vef höfundar: %s" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Nafn" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Breyta" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Eyða" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Fjarlægja" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Vista" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s krefst útfyllingar" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Ekki tengt --" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Um gestahöfundinn" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Bæta nýjum" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Bæta við nýjum gestahöfund" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Allir gestahöfundar" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Ertu viss um að þú viljir fjarlægja þennan höfund?" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Höfundur : %1$s (IP: %2$s , %3$s)" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Höfundar" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Persónuupplýsingar" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Smelltu á höfund til þess að gera breytingar. Dragðu til þess að breyta staðsetningu þeirra. Smelltu á fjarlægja til þess að fjarlægja þá." #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Smelltu til þess að breyta þessum höfund eða dragðu hann til að breyta staðsetningu" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Meðhöfundur" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Meðhöfundar" #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Meðhöfundur er ekki til. Reyna aftur?" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Athugasemd : " #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Staðfesta eyðingu" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Hvar má ná sambandi við þig?" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Búa til prófíl" #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Sérreiti eytt" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Sérsniðinn reitur uppfærður." #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Eyða: %s" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Nafn til að sýna" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Birtingarnafn rekst á við birtingarnafn annars gestahöfundar." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Ertu að gera eitthvað grunsamlegt, ha?" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "Tölvupóstfang" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Breyta gestahöfundi" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Breyta prófíl" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Útdráttur:" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Sía" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Eiginnafn" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Gestahöfundur" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Gestahöfundar" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Ekki er hægt að eyða gestahöfundi þar sem hann er ekki til." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Gestahöfundi eytt." #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Gestahöfundur er ekki til" #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Gestahöfundur endurvakinn samkvæmt útgáfu %s" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Gestahöfundur vistaður" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Gestahöfundur skipulagður fyrir: %1$s. Forskoða prófíl" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Gestahöfundur sendi inn. Skoða prófíl" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Gestahöfundur uppfærður" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Gestahöfundur uppfærður. Skoða prófíl" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Gestahöfundur uppfærður. Forskoða prófíl" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Ekki er hægt að stofna gestahöfund án þess að skilgreina nafn til birtingar." #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google-tal" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Kenninafn" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Hafa færslur áfram tengdar við notandann, %s." #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Tengdur aðgangur" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "M j, Y @ G:i" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Mínar" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Nýr gestahöfundur" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Ný athugasemd við færslu \"%s\"" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Ný bakvísun á færsluna þína \"%s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Ný bakvísun á færslu \"%s\"" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Enginn meðhöfundur er til fyrir þetta merki" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Enginn gestahöfundur finnst" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Enginn gestahöfundur finnst í ruslatunnunni" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Enginn notandi er til með það auðkenni" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Athugið: Ef þú vilt eyða gestahöfundi og öllum færslum hans, eyddu færslunum fyrst og komdu aftur til þess að eyða gestahöfundnum." #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Fast veffang: %s" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Gakktu úr skugga um að eitthvað sé valið." #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Vinsamlegast skilgreindu gilt meðhöfundar notandanafn" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Vinsamlegast skilgreindu gilt user_login" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Færslur" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Endurúthluta til annars meðhöfundar." #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Meðhöfundur sem endurúthluta á til er ekki til" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Fjarlægja upplýsingar um höfund úr færslur (en halda núverandi stöðu færslunnar)." #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Leita að gestahöfundi" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Leita að höfundi" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Sýna allt" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Netvænt stuttheiti" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Merkja amapóst: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Fleygja: %s" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "Vefslóð : %s" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Einkvæm stuttslóð" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Uppfæra gestahöfund" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Skoða gestahöfund" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Skoða færslur" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Skoða færslur eftir þennan höfund" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Vefur" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Vefur: %1$s (IP: %2$s , %3$s)" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Tengt við aðgang" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Ótengt við aðgang" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress notanda tenging" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Þú getur séð allar athugasemdir við þessa færslu hér: " #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Þú getur séð allar bakvísanir fyrir þessa færslu hér: " #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Þú getur séð allar bakrakningar fyrir þessa færslu hér: " #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Þú hefur ekki heimild til þess að framkvæma þessa aðgerð." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Þú hefur merkt þennan gestahöfund til eyðingar:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Athugasemd: \"%2$s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Bakvísun: „%2$s“" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Bakvísun: „%2$s“" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Bæta nýjum" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login getur ekki innihaldið gildi sem er til fyrir núverandi gestahöfund eða tengdan notanda" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-nb_NO-1fdf421c05c1140f6d71444ea2b27638.json000060400000000413147177171730017652 0ustar00{"translation-revision-date":"2020-11-23 00:31:00+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"nb_NO","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Forfattere"]}}}languages/co-authors-plus-nb_NO-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000532147177171730020421 0ustar00{"translation-revision-date":"2020-11-23 00:31:00+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"nb_NO","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Forfattere"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-nb_NO.mo000060400000020621147177171730013121 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@RWr 4e" {GT *  ,Gd j xK"+2:J=[1lK5O&6v 7 %-)W\$o)$./0&`(!7%Y) #' M_e}     #D_ h44 2C 7v 8  !! 4!P@! and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2020-11-23 00:31:00+0000 Language: nb_NO Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 og %s er et obligatorisk felt-- Ikke kartlagt --AIMOm gjesteforfatterenLegg til nyLegg til ny gjesteforfatterAlle gjesteforfattereTillater at flere forfattere tildeles et innlegg. Denne pluginen er en utvidet versjon av Co-Authors pluginen utviklet av Weston Ruter.Er du sikker på at du vil fjerne denne forfatteren?Forfatter : %1$s (IP: %2$s , %3$s)ForfattereBiografisk infoKlikk på en forfatter for å endre dem. Dra for å endre rekkefølgen. Klikk på Fjern for å fjerne dem.Klikk for å endre denne forfatteren, eller dra for å endre posisjonenMedforfatterMedforfatterereCo-Authors PlusMedforfatter eksisterer ikke. Prøv igjen?Kommentar: Bekreft slettingKontaktinfoOpprett profilEgendefinert felt slettet.Egendefinert felt oppdatert.SlettSlett den: %sVisningsnavnVisningsnavn er i konflikt med en annens gjesteforfatter sitt visningsnavn.Gjør du noe du ikke skal?E-postRedigerRediger gjesteforfatterRediger profilUtdrag: FilterFornavnGjesteforfatterGjesteforfattereGjesteforfatteren kan ikke slettes fordi den ikke eksisterer.Gjesteforfatter slettet.Gjesteforfatter eksisterer ikkeGjesteforfatter gjenopprettet til revisjon fra %sGjesteforfatter lagret.Gjesteforfatter planlagt til: %1$s . Forhåndsvis profilGjesteforfatter sendt. Forhåndsvis profilGjesteforfatter oppdatert.Gjesteforfatter oppdatert. Se profilGjesteforfatter oppdatert. Forhåndsvis profilGjesteforfattere kan ikke opprettes uten visningsnavn.IDJabber / Google TalkEtternavnLa innlegg være tilordnet den tilordnede brukeren, %s.Tilknyttet kontod.M.Yk\l H:iMinMohammad Jangda, Daniel Bachhuber, AutomatticNavnNy gjesteforfatterNy kommentar til innlegget ditt "%s"Ny tilbakekalling på innlegget ditt "%s"Ny trackback på innlegget ditt "%s"Ingen medforfatter eksisterer for det begrepetIngen gjesteforfattere funnetIngen gjesteforfattere ble funnet i papirkurvenIngen brukere eksisterer med den ID-enMerk: Hvis du vil slette gjesteforfatteren og alle innleggene deres, bør du først slette innleggene og deretter komme tilbake for å slette gjesteforfatteren.Permalenke: %sSørg for å velge et alternativ.Angi en gyldig medforfatterpåloggingVennligst spesifiser en gyldig user_loginInnleggInnlegg av %sOverfør til en annen medforfatter:Overførte medforfatter eksisterer ikkeFjernFjern byline fra innleggene (men la hvert innlegg ha sin nåværende status).LagreSøk i gjesteforfattereSøk etter en forfatterVis alleIdentifikatorMerk som spam: %sKast den: %sURL : %sUnik identifikatorOppdater gjesteforfatterVis gjesteforfatterVis InnleggVis innlegg av denne forfatterenBesøk %s’s nettsideNettsideNettside: %1$s (IP: %2$s , %3$s)Med tilknyttet kontoUten tilknyttet kontoWordPress brukerkartleggingYahoo IMDu kan se alle kommentarene til dette innlegget her:Du kan se alle tilbakeping på dette innlegget her: Du kan se alle trackbacks på dette innlegget her:Du har ikke tillatelse til å utføre denne handlingen.Du har spesifisert denne gjesteforfatteren for sletting:[%1$s] Kommentar: "%2$s"[%1$s] Tilbakeping: "%2$s"[%1$s] Trackback: "%2$s"Legg til nyuser_login kan ikke duplisere eksisterende gjesteforfatter eller kartlagt brukerlanguages/co-authors-plus-nb_NO.po000060400000045567147177171730013144 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2020-11-23 00:31:00+0000\n" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Tillater at flere forfattere tildeles et innlegg. Denne pluginen er en utvidet versjon av Co-Authors pluginen utviklet av Weston Ruter." #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Besøk %s’s nettside" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Innlegg av %s" #: template-tags.php:91 msgid " and " msgstr " og " #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Navn" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Innlegg" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Slett" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Rediger" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Lagre" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Fjern" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Merk som spam: %s" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Angi en gyldig medforfatterpålogging" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Vennligst spesifiser en gyldig user_login" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filter" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Vis Innlegg" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Vis alle" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Uten tilknyttet konto" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Med tilknyttet konto" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Medforfatter" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Medforfatterere" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Opprett profil" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Rediger profil" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Ingen brukere eksisterer med den ID-en" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Overførte medforfatter eksisterer ikke" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Gjesteforfatter eksisterer ikke" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login kan ikke duplisere eksisterende gjesteforfatter eller kartlagt bruker" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s er et obligatorisk felt" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Biografisk info" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Nettside" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Tilknyttet konto" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-post" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Identifikator" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Etternavn" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Fornavn" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Visningsnavn" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Gjesteforfattere kan ikke opprettes uten visningsnavn." #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Ikke kartlagt --" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Legg til ny" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress brukerkartlegging" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Bekreft sletting" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Fjern byline fra innleggene (men la hvert innlegg ha sin nåværende status)." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Overfør til en annen medforfatter:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Merk: Hvis du vil slette gjesteforfatteren og alle innleggene deres, bør du først slette innleggene og deretter komme tilbake for å slette gjesteforfatteren." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Du har spesifisert denne gjesteforfatteren for sletting:" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Kontaktinfo" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Unik identifikator" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Gjesteforfatter slettet." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Sørg for å velge et alternativ." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Medforfatter eksisterer ikke. Prøv igjen?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Gjesteforfatteren kan ikke slettes fordi den ikke eksisterer." #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Du har ikke tillatelse til å utføre denne handlingen." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Gjør du noe du ikke skal?" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Gjesteforfatter oppdatert. Forhåndsvis profil" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Gjesteforfatter planlagt til: %1$s . Forhåndsvis profil" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Gjesteforfatter sendt. Forhåndsvis profil" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Gjesteforfatter lagret." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Gjesteforfatter gjenopprettet til revisjon fra %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Gjesteforfatter oppdatert." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Egendefinert felt slettet." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Egendefinert felt oppdatert." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Gjesteforfatter oppdatert. Se profil" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Legg til ny" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Om gjesteforfatteren" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Oppdater gjesteforfatter" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Ingen gjesteforfattere ble funnet i papirkurven" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Ingen gjesteforfattere funnet" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Søk i gjesteforfattere" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Vis gjesteforfatter" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Ny gjesteforfatter" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Rediger gjesteforfatter" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Legg til ny gjesteforfatter" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Alle gjesteforfattere" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Gjesteforfattere" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Gjesteforfatter" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Slett den: %s" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Ny tilbakekalling på innlegget ditt \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Du kan se alle trackbacks på dette innlegget her:" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Utdrag: " #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Nettside: %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Ny trackback på innlegget ditt \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Kommentar: \"%2$s\"" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Du kan se alle kommentarene til dette innlegget her:" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Kommentar: " #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Forfatter : %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Ny kommentar til innlegget ditt \"%s\"" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Min" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Søk etter en forfatter" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Klikk for å endre denne forfatteren, eller dra for å endre posisjonen" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Er du sikker på at du vil fjerne denne forfatteren?" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Ingen medforfatter eksisterer for det begrepet" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Vis innlegg av denne forfatteren" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Klikk på en forfatter for å endre dem. Dra for å endre rekkefølgen. Klikk på Fjern for å fjerne dem." #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Forfattere" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "d.M.Yk\\l H:i" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Kast den: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalenke: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Tilbakeping: \"%2$s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Du kan se alle tilbakeping på dette innlegget her: " #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Visningsnavn er i konflikt med en annens gjesteforfatter sitt visningsnavn." #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "La innlegg være tilordnet den tilordnede brukeren, %s." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-nl_NL-1fdf421c05c1140f6d71444ea2b27638.json000060400000000405147177171730017662 0ustar00{"translation-revision-date":"2023-08-28 09:25:11+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"nl","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Auteurs"]}}}languages/co-authors-plus-nl_NL-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000524147177171730020431 0ustar00{"translation-revision-date":"2023-08-28 09:25:11+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"nl","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Auteurs"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-nl_NL.mo000060400000022302147177171730013126 0ustar00t\\]czi-A?, 7 W _ oq =  ) 4 %D j t     > . J Q V h u  7   )! K e_ H  3$ FX 6   , % 4A-Fty!  "@c #'&K!r %E8=Rg;p    -$ 6A[t|,-.B1q2.3@b27P~g*E;2KksD W al-|  %1 A>L    C d{'bG5}8I;SV k9v - !=#]'+3%#I # . 8 #I !m J   ! !@#!d!i!! ! !!E! """0"S"j"o"""""."/#0E#1v#6###$'$.8$Zg$ and %s is a required field-- Not mapped --Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browserAIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAll done! %d post was affected.All done! %d posts were affected.Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileEmail : %sExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo matching co-authors were found.No user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSkipping - Post #%1$d already has co-authors assigned: %2$sSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorUpdating - Adding %1$s's byline to post #%2$dView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newhttps://wordpress.org/plugins/co-authors-plus/user_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2023-08-28 09:25:11+0000 Language: nl Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 en %s is een verplicht veld– Niet verbonden –Let op: activeer javascript of gebruikt een browser die javascript ondersteund om bericht auteurs te bewerkenAIMOver de gastauteurNieuwe toevoegenNieuwe gastauteur toevoegenAlle gastauteursKlaar! %d bericht is beïnvloed.Klaar! %d berichten zijn beïnvloed.Sta toe om meerdere auteurs toe te wijzen aan een bericht. Deze plugin is een uitgebreide versie van de co-auteurs plugin ontwikkeld door Weston RuterWeet je zeker dat je deze auteur wilt verwijderen?Auteur : %1$s (IP: %2$s , %3$s)AuteursBiografische informatieKlik op een auteur om deze te bewerken. Sleep om de volgorde aan te passen. Klik op Verwijderen om ze te verwijderen.Klik om deze auteur te bewerken of sleep om de positie aan te passenCo-auteurCo-auteursCo-Authors PlusCo-auteur bestaat niet. Probeer het nogmaals.Reactie:Verwijdering bevestigenContactinformatieProfiel aanmakenAangepast veld verwijderd .Aangepast veld bijgewerkt.VerwijderenVerwijderen: %sSchermnaamDe schermnaam geeft een conflict met de gastauteur schermnaam.Ben je iets raars aan het doen?E-mailBewerkenGastauteur bewerkenWijzig profielE-mail: %sSamenvatting:FilterenVoornaamGastauteurGastauteursDeze gastauteur kan niet worden verwijderd omdat deze niet bestaat.Gastauteur verwijderd.Gastauteur bestaat nietGastauteur hersteld naar revisie van %sGastauteur opgeslagen.Gastauteur gepland op: %1$s. Voorbeeld profielGastauteur toegevoegd. Bekijk profiel Gastauteur bijgewerkt.Gastauteur bijgewerkt. Profiel bekijkenGastauteur bijgewerkt. Voorbeeld profielGastauteur kan niet worden aangemaakt zonder de schermnaam.IDJabber / Google TalkAchternaamLaat berichten toegewezen aan de verbonden gebruiker, %s.Verbonden accountj M Y @ H:iVan mijMohammad Jangda, Daniel Bachhuber, AutomatticNaamNieuwe gastauteurNieuwe reactie op je bericht "%s"Nieuwe pingback op bericht "%s"Nieuwe trackback op je bericht "%s"Er bestaat geen co-auteur met deze termGeen gastauteurs gevondenGeen gastauteurs gevonden in de prullenbak Er werden geen overeenkomende medeauteurs gevonden.Er bestaat geen gebruiker met deze IDOpmerking: Als je gastauteur en al zijn berichten wilt verwijderen dan moet je eerst de berichten verwijderen en dan de gastauteur.Permalink: %sKies een optie.Geef een geldige co-auteur login opGeef een geldige user_login opBerichtenBerichten van %sToewijzen aan een andere co-auteur:Toegewezen co-auteur bestaat nietVerwijderenVerwijder de bijzin van berichten (maar behoud de status van elk bericht).OpslaanGastauteurs zoekenZoek voor een auteurBekijk allesOverslaan - Bericht #%1$d heeft al medeauteurs toegewezen: %2$s.SlugMarkeren als spam: %sNaar de prullenbak: %sURL : %sUnieke slugGastauteur bijwerkenAan het updaten - Toevoegen van %1$s's auteursnaam aan bericht #%2$d.Gastauteur bekijkenBerichten bekijkenBerichten van deze auteur bekijkenBezoek %s’s siteSiteWebsite: %1$s (IP: %2$s , %3$s)Met verbonden accountZonder verbonden accountWordPress gebruikersverbindingYahoo IMHier kun je alle reacties op dit bericht zien:Hier kun je alle pingbacks op dit bericht zien:Hier kun je alle trackbacks op dit bericht zien:Je hebt geen rechten om deze actie uit te voeren.Je heb deze gastauteur geselecteerd om te verwijderen:[%1$s] Reactie: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"Nieuwe toevoegenhttps://wordpress.org/plugins/co-authors-plus/user_login kan niet worden gedupliceerd met de bestaande gastauteur of verbonden gebruikerlanguages/co-authors-plus-nl_NL.po000060400000046303147177171730013140 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2023-08-28 09:25:11+0000\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Berichten van %s" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Bezoek %s’s site" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Sta toe om meerdere auteurs toe te wijzen aan een bericht. Deze plugin is een uitgebreide versie van de co-auteurs plugin ontwikkeld door Weston Ruter" #: template-tags.php:91 msgid " and " msgstr " en " #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "Aan het updaten - Toevoegen van %1$s's auteursnaam aan bericht #%2$d." #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "Overslaan - Bericht #%1$d heeft al medeauteurs toegewezen: %2$s." #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "Klaar! %d bericht is beïnvloed." msgstr[1] "Klaar! %d berichten zijn beïnvloed." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "https://wordpress.org/plugins/co-authors-plus/" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Nieuwe toevoegen" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Verwijderen" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Bewerken" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Biografische informatie" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Naam" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Verwijderen" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filteren" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Contactinformatie" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Auteurs" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "j M Y @ H:i" #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "" "Aangepast veld verwijderd\n" "." #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Berichten" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Aangepast veld bijgewerkt." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Gastauteur verwijderd." #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Unieke slug" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Opmerking: Als je gastauteur en al zijn berichten wilt verwijderen dan moet je eerst de berichten verwijderen en dan de gastauteur." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Toewijzen aan een andere co-auteur:" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Laat berichten toegewezen aan de verbonden gebruiker, %s." #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Verwijder de bijzin van berichten (maar behoud de status van elk bericht)." #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Verwijdering bevestigen" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress gebruikersverbinding" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "– Niet verbonden –" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Gastauteur kan niet worden aangemaakt zonder de schermnaam." #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "De schermnaam geeft een conflict met de gastauteur schermnaam." #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Schermnaam" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Voornaam" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Achternaam" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s is een verplicht veld" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Wijzig profiel" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Berichten bekijken" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Verbonden account" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Gastauteur bestaat niet" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Er bestaat geen gebruiker met deze ID" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Profiel aanmaken" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-auteurs" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-auteur" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Bekijk alles" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Met verbonden account" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Zonder verbonden account" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Geef een geldige user_login op" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Geef een geldige co-auteur login op" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login kan niet worden gedupliceerd met de bestaande gastauteur of verbonden gebruiker" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Markeren als spam: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalink: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Naar de prullenbak: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Verwijderen: %s" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Samenvatting:" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Hier kun je alle trackbacks op dit bericht zien:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Nieuwe pingback op bericht \"%s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Hier kun je alle pingbacks op dit bericht zien:" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Auteur : %1$s (IP: %2$s , %3$s)" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Reactie:" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Hier kun je alle reacties op dit bericht zien:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Reactie: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Nieuwe trackback op je bericht \"%s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Website: %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Nieuwe reactie op je bericht \"%s\"" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Van mij" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Nieuwe toevoegen" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Berichten van deze auteur bekijken" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Gastauteurs" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Alle gastauteurs" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Gastauteur" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Gastauteurs zoeken" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Gastauteur bewerken" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Nieuwe gastauteur" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Gastauteur bekijken" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Nieuwe gastauteur toevoegen" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Geen gastauteurs gevonden" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Geen gastauteurs gevonden in de prullenbak " #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Gastauteur bijwerken" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Over de gastauteur" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Gastauteur bijgewerkt. Profiel bekijken" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Gastauteur bijgewerkt." #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Gastauteur bijgewerkt. Voorbeeld profiel" #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Gastauteur hersteld naar revisie van %s" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Gastauteur opgeslagen." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Ben je iets raars aan het doen?" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Je hebt geen rechten om deze actie uit te voeren." #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Deze gastauteur kan niet worden verwijderd omdat deze niet bestaat." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Co-auteur bestaat niet. Probeer het nogmaals." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Gastauteur toegevoegd. Bekijk profiel " #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Klik op een auteur om deze te bewerken. Sleep om de volgorde aan te passen. Klik op Verwijderen om ze te verwijderen." #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Zoek voor een auteur" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Klik om deze auteur te bewerken of sleep om de positie aan te passen" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Weet je zeker dat je deze auteur wilt verwijderen?" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Kies een optie." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Je heb deze gastauteur geselecteerd om te verwijderen:" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Er bestaat geen co-auteur met deze term" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Gastauteur gepland op: %1$s. Voorbeeld profiel" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Toegewezen co-auteur bestaat niet" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Site" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-mail" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Opslaan" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "Er werden geen overeenkomende medeauteurs gevonden." #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "E-mail: %s" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "Let op: activeer javascript of gebruikt een browser die javascript ondersteund om bericht auteurs te bewerken" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-pl_PL-1fdf421c05c1140f6d71444ea2b27638.json000060400000000526147177171730017672 0ustar00{"translation-revision-date":"2022-01-21 08:05:51+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"pl","plural-forms":"nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);"},"Authors":["Autorzy"]}}}languages/co-authors-plus-pl_PL-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000645147177171730020441 0ustar00{"translation-revision-date":"2022-01-21 08:05:51+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"pl","plural-forms":"nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);"},"Authors":["Autorzy"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-pl_PL.mo000060400000021300147177171730013127 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@!'I 8  DPdt % D!2T[b |D")3C!wM'iFYD2wz: -"((=#f$*!8(.%Dj p!|2= 6DTf{ H ] q   '  6 :(!;c!1!9! "("D"a"Xg" and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2022-01-21 08:05:51+0000 Language: pl Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2); X-Generator: GlotPress/4.0.0-alpha.7 i %s jest polem wymaganym-- Niezmapowany --AIMO autorze gościnnymDodajDodaj autora gościnnegoWszyscy autorzy gościnniPozwala na przypisywanie wielu autorów do wpisu. Wtyczka jest rozszerzoną wersją wtyczki Co-Authors stworzonej przez Westona Rutera.Czy na pewno usunąć wybranego autora?Autor : %1$s (IP: %2$s , %3$s)AutorzyInformacje biograficzneKliknij na autora, aby go zmienić. Przeciągnij, aby zmienić kolejność. Kliknij Usuń, aby usunąć autora.Kliknij, aby zmienić autora lub przeciągnij, aby zmienić jego pozycjęWspółautorWspółautorzyWspółautorzy PlusWspółautor nie istnieje. Proszę spróbować ponownie.Komentarz: Potwierdź usuwanieDane kontaktoweUtwórz profilWłasne pole zostało usunięte.Własne pole zostało zaktualizowane.UsuńUsuń: %sWyświetlana nazwaWyświetlana nazwa nie może kolidować z tą innego autora gościa.Robisz coś podejrzanego, co nie?E-mailEdytujEdytuj autora gościnnegoEdytuj profilZajawka:FiltrImięAutor gościnnyAutorzy gościnniAutor gościnny nie może zostać usunięty, ponieważ nie istnieje.Autor gościnny został usunięty.Autor gość nie istniejeAutor gościnny został przywrócona do wersji z %sAutor gościnny został zapisany.Publikacja autora gościnnego została zaplanowana na: %1$s. Podejrzyj profilWysłano autor gościnnego. Podejrzyj profilAutor gościnny został zaktualizowany.Autor gościnny został zaktualizowany. Zobacz profilAutor gościnny został zaktualizowany. Podejrzyj profilAutorzy goście nie mogą zostać utworzeni bez wyświetlanych nazw.IDJabber / Google TalkNazwiskoPozostaw posty przypisane do zmapowanego użytkownika, %s.Połączone kontoY-m-d H:iMojeMohammad Jangda, Daniel Bachhuber, AutomatticNazwaNowy autor gościnnyNowy komentarz do twojego wpisu „%s”Nowy pingback do twojego wpisu "%s"Nowy trackback do twojego wpisu "%s"Brak współautora dla terminuNie znaleziono żadnego autora gościnnegoBrak autorów gościnnych w koszuBrak użytkownika z takim IDInformacja: Jeśli chcesz usunąć tego autora gościnnego i wszystkie jego wpisy, to należy najpierw usunąć wszystkie wpisy, a dopiero potem autora.Bezpośredni odnośnik: %sProszę się upewnić, że coś wybrano.Proszę podać prawidłowy login współautoraProszę podać prawidłowy user_loginWpisyWpisy od %sPrzypisz do innego współautora:Współautor do ponownego przypisania nie istniejeUsuńUsuń podpis z wpisu (ale pozostaw wpisy w aktualnym stanie).ZapiszSzukaj autora gościnnegoSzukaj autoraPokaż wszystkoUproszczona nazwaOznacz jako spam: %sPrzenieś do kosza: %sAdres URL : %sUproszczona nazwaAktualizuj autora gościnnegoZobacz autora gościnnegoZobacz wpisyPokaż wpisy tego autoraOdwiedź witrynę internetową osoby podpisującej się „%s”Witryna internetowaWitryna: %1$s (IP: %2$s , %3$s)Z połączonymi kontamiBez połączonych kontMapowanie użytkowników wordpressowychYahoo IMWszystkie komentarze do wpisu można zobaczyć tutaj: Możesz zobaczyć wszystkie pingbacki do tego wpisu tutaj:Możesz zobaczyć wszystkie trackbacki do tego wpisu tutaj:Bra uprawnień do wykonania wybranego działania.Wybrano następującego autora gościnnego do usunięcia:[%1$s] Komentarz: „%2$s”[%1$s] Pingback: „%2$s”[%1$s] Trackback: „%2$s”Dodajuser_login nie może dublować istniejącego autora gościa lub zmapowanego użytkownikalanguages/co-authors-plus-pl_PL.po000060400000046267147177171730013155 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2022-01-21 08:05:51+0000\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Wpisy od %s" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Pozwala na przypisywanie wielu autorów do wpisu. Wtyczka jest rozszerzoną wersją wtyczki Co-Authors stworzonej przez Westona Rutera." #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Współautorzy Plus" #: template-tags.php:91 msgid " and " msgstr " i " #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Odwiedź witrynę internetową osoby podpisującej się „%s”" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-mail" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Edytuj" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtr" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Zapisz" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Wpisy" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Usuń" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Imię" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Nazwisko" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Usuń" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Autorzy" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Bezpośredni odnośnik: %s" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Nowy pingback do twojego wpisu \"%s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Nowy trackback do twojego wpisu \"%s\"" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Oznacz jako spam: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Usuń: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Przenieś do kosza: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: „%2$s”" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: „%2$s”" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Dane kontaktowe" #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Własne pole zostało usunięte." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Własne pole zostało zaktualizowane." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Proszę się upewnić, że coś wybrano." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Autor gościnny został usunięty." #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Uproszczona nazwa" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Wybrano następującego autora gościnnego do usunięcia:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Informacja: Jeśli chcesz usunąć tego autora gościnnego i wszystkie jego wpisy, to należy najpierw usunąć wszystkie wpisy, a dopiero potem autora." #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Dodaj" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Uproszczona nazwa" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Witryna internetowa" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Edytuj profil" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Przypisz do innego współautora:" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Pozostaw posty przypisane do zmapowanego użytkownika, %s." #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Usuń podpis z wpisu (ale pozostaw wpisy w aktualnym stanie)." #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "Mapowanie użytkowników wordpressowych" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Niezmapowany --" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Autorzy goście nie mogą zostać utworzeni bez wyświetlanych nazw." #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Wyświetlana nazwa nie może kolidować z tą innego autora gościa." #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Wyświetlana nazwa" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Połączone konto" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login nie może dublować istniejącego autora gościa lub zmapowanego użytkownika" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Autor gość nie istnieje" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Współautor do ponownego przypisania nie istnieje" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Brak użytkownika z takim ID" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Utwórz profil" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Współautorzy" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Współautor" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Pokaż wszystko" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Z połączonymi kontami" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Bez połączonych kont" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Proszę podać prawidłowy user_login" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Proszę podać prawidłowy login współautora" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Kliknij na autora, aby go zmienić. Przeciągnij, aby zmienić kolejność. Kliknij Usuń, aby usunąć autora." #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Pokaż wpisy tego autora" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Brak współautora dla terminu" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Czy na pewno usunąć wybranego autora?" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Kliknij, aby zmienić autora lub przeciągnij, aby zmienić jego pozycję" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Szukaj autora" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Autor : %1$s (IP: %2$s , %3$s)" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "Adres URL : %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Komentarz: " #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Wszystkie komentarze do wpisu można zobaczyć tutaj: " #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Nazwa" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s jest polem wymaganym" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Moje" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Potwierdź usuwanie" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Robisz coś podejrzanego, co nie?" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Nowy komentarz do twojego wpisu „%s”" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Informacje biograficzne" #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Współautor nie istnieje. Proszę spróbować ponownie." #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Autor gościnny nie może zostać usunięty, ponieważ nie istnieje." #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Bra uprawnień do wykonania wybranego działania." #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Autor gościnny został zaktualizowany. Podejrzyj profil" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Autor gościnny został zapisany." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Autor gościnny został przywrócona do wersji z %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Autor gościnny został zaktualizowany." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Autor gościnny został zaktualizowany. Zobacz profil" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Dodaj" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "O autorze gościnnym" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Aktualizuj autora gościnnego" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Brak autorów gościnnych w koszu" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Nie znaleziono żadnego autora gościnnego" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Szukaj autora gościnnego" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Zobacz autora gościnnego" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Nowy autor gościnny" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Edytuj autora gościnnego" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Dodaj autora gościnnego" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Wszyscy autorzy gościnni" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Autorzy gościnni" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Autor gościnny" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Publikacja autora gościnnego została zaplanowana na: %1$s. Podejrzyj profil" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Wysłano autor gościnnego. Podejrzyj profil" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Możesz zobaczyć wszystkie pingbacki do tego wpisu tutaj:" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Możesz zobaczyć wszystkie trackbacki do tego wpisu tutaj:" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Zajawka:" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Witryna: %1$s (IP: %2$s , %3$s)" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Komentarz: „%2$s”" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "Y-m-d H:i" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Zobacz wpisy" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" msgstr[2] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus.pot000060400000037425147177171730012331 0ustar00# Copyright (C) 2023 Mohammad Jangda, Daniel Bachhuber, Automattic # This file is distributed under the GPL v2 or later. msgid "" msgstr "" "Project-Id-Version: Co-Authors Plus 3.5.15\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/co-authors-plus\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-27T13:28:21+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.8.1\n" "X-Domain: co-authors-plus\n" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: co-authors-plus.php:99 msgid "Comment: " msgstr "" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "" #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "" #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "" #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: template-tags.php:91 msgid " and " msgstr "" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-pt_BR-1fdf421c05c1140f6d71444ea2b27638.json000060400000000407147177171730017670 0ustar00{"translation-revision-date":"2022-07-25 21:15:25+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"pt_BR","plural-forms":"nplurals=2; plural=n > 1;"},"Authors":["Autores"]}}}languages/co-authors-plus-pt_BR-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000526147177171730020437 0ustar00{"translation-revision-date":"2022-07-25 21:15:25+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"pt_BR","plural-forms":"nplurals=2; plural=n > 1;"},"Authors":["Autores"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-pt_BR.mo000060400000020576147177171730013145 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@QUr*vGc +  3@_ Y$+ B PZ aoA, 7cND7GJC 4- =I-M{"#!4='r 9&G'n! 'Hah     %9Aau$768& 4_ <   !!Q,! and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2022-07-25 21:15:25+0000 Language: pt_BR Plural-Forms: nplurals=2; plural=n > 1; X-Generator: GlotPress/4.0.0-alpha.7 e %s é um campo obrigatório -- Não mapeado --AIMSobre o autor convidadoAdicionar novoAdicionar novo autor convidadoTodos os autores convidadosPermite que múltiplos autores sejam designados a um post. Esse plugin é uma versão estendida do plugin Co-Authors desenvolvido por Weston Ruter.Tem certeza que deseja remover este autor?Autor : %1$s (IP: %2$s , %3$s)AutoresInformações biográficasClique em um autor para alterá-lo. Arraste-o para alterar a ordem. Clique em Remover para removê-loClique para alterar este autor, ou arraste-o para alterar sua posiçãoCoautorCoautoresCo-Authors PlusEste coautor não existe. Tentar novamente?Comentário:Confirmar exclusãoInformações de contatoCriar perfilCampo personalizado excluído.Campo personalizado atualizado.ExcluirExcluir: %sNome de exibiçãoO nome de exibição está em conflito com o nome de exibição de outro autor convidado.Fazendo algo suspeito, não?E-mailEditarEditar autor convidadoEditar perfilExcerto: FiltroPrimeiro nomeAutor convidadoAutores convidadosO autor convidado não pode ser excluído porque ele não existe.Autor convidado excluídoAutor convidado não existeAutor convidado restaurado da revisão de %sAutor convidado salvo.Autor convidado agendado para: %1$s. Ver perfilAutor convidado enviado. Ver perfilAutor convidado atualizadoAutor convidado atualizado. Ver perfilAutor convidado atualizado. Ver perfilAutores convidados não podem ser criados sem um nome de exibiçãoIDJabber / Google TalkSobrenomeDeixar posts designados para o usuário mapeado, %s.Conta vinculadaj M Y @ G:iMeuMohammad Jangda, Daniel Bachhuber, AutomatticNomeNovo autor convidadoNovo comentário no seu post "%s"Novo pingback no seu post "%s"Novo trackback no seu post "%s"Não existe coautor para este termoNenhum autor convidado encontradoNão foram encontrados autores convidados na lixeiraNão existe nenhum usuário com este IDObservação: se você quiser excluir o autor convidado e todas as postagens dele, exclua as postagens primeiro e depois volte para excluir o autor convidado.Permalink: %sCertifique-se de escolher uma opção.Especifique um usuário coautor válidoEspecifique um user_login válidoPostsPosts por %sDesignar para outro coautor:O coautor de reatribuição não existeRemoverRemover assinatura dos posts (mas deixar cada post em seu estado atual).SalvarPesquisar autores convidadosBuscar um autorMostrar tudoSlugSpam: %sLixeira: %sURL : %sSlug únicoAtualizar autor convidadoVer autores convidadosVer postsVer posts deste autorVisite o site de %sWebsiteWebsite: %1$s (IP: %2$s , %3$s)Com conta vinculadaSem conta vinculadaMapeamento de usuários do WordPressYahoo IMVocê pode ver todos os comentários do seu post aqui: Você pode ver todos os pingbacks para este post aqui:Você pode ver todos os trackbacks para este post aqui: Você não tem permissão para executar esta ação.Você especificou o seguinte autor convidado para exclusão:[%1$s] Comentário: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"Adicionar novouser_login não pode duplicar um autor convidado existente ou um usuário mapeadolanguages/co-authors-plus-pt_BR.po000060400000045543147177171730013151 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2022-07-25 21:15:25+0000\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: template-tags.php:91 msgid " and " msgstr " e " #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Visite o site de %s" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Posts por %s" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Permite que múltiplos autores sejam designados a um post. Esse plugin é uma versão estendida do plugin Co-Authors desenvolvido por Weston Ruter." #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Nome" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Sobrenome" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Informações de contato" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Informações biográficas" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Editar" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtro" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Remover" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Salvar" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Autores" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Buscar um autor" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Comentário:" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Novo comentário no seu post \"%s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Autor : %1$s (IP: %2$s , %3$s)" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Comentário: \"%2$s\"" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Website: %1$s (IP: %2$s , %3$s)" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Não foram encontrados autores convidados na lixeira" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Sobre o autor convidado" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Clique em um autor para alterá-lo. Arraste-o para alterar a ordem. Clique em Remover para removê-lo" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Posts" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Ver posts deste autor" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Não existe coautor para este termo" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Tem certeza que deseja remover este autor?" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Clique para alterar este autor, ou arraste-o para alterar sua posição" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Meu" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Você pode ver todos os comentários do seu post aqui: " #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Novo trackback no seu post \"%s\"" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Excerto: " #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Você pode ver todos os trackbacks para este post aqui: " #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Novo pingback no seu post \"%s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Você pode ver todos os pingbacks para este post aqui:" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalink: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Lixeira: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Excluir: %s" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Spam: %s" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Autor convidado" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Autores convidados" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Todos os autores convidados" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Adicionar novo autor convidado" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Editar autor convidado" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Novo autor convidado" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Ver autores convidados" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Pesquisar autores convidados" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Nenhum autor convidado encontrado" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Atualizar autor convidado" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Adicionar novo" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Autor convidado atualizado. Ver perfil" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Autor convidado atualizado" #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Autor convidado restaurado da revisão de %s" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Autor convidado salvo." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Autor convidado enviado. Ver perfil" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Autor convidado agendado para: %1$s. Ver perfil" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "j M Y @ G:i" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Autor convidado atualizado. Ver perfil" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Você não tem permissão para executar esta ação." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Este coautor não existe. Tentar novamente?" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Certifique-se de escolher uma opção." #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Autor convidado excluído" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Você especificou o seguinte autor convidado para exclusão:" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Designar para outro coautor:" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Deixar posts designados para o usuário mapeado, %s." #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Remover assinatura dos posts (mas deixar cada post em seu estado atual)." #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Confirmar exclusão" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Adicionar novo" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "Mapeamento de usuários do WordPress" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Não mapeado --" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Autores convidados não podem ser criados sem um nome de exibição" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Nome de exibição" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Primeiro nome" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-mail" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Website" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s é um campo obrigatório " #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login não pode duplicar um autor convidado existente ou um usuário mapeado" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Autor convidado não existe" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Não existe nenhum usuário com este ID" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Editar perfil" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Criar perfil" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Coautores" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Coautor" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Excluir" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Ver posts" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Slug único" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Especifique um user_login válido" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Sem conta vinculada" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Com conta vinculada" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Mostrar tudo" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Especifique um usuário coautor válido" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "O coautor de reatribuição não existe" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Conta vinculada" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "O nome de exibição está em conflito com o nome de exibição de outro autor convidado." #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Observação: se você quiser excluir o autor convidado e todas as postagens dele, exclua as postagens primeiro e depois volte para excluir o autor convidado." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Fazendo algo suspeito, não?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "O autor convidado não pode ser excluído porque ele não existe." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Campo personalizado excluído." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Campo personalizado atualizado." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-pt_PT-1fdf421c05c1140f6d71444ea2b27638.json000060400000000405147177171730017706 0ustar00{"translation-revision-date":"2017-11-28 10:18:47+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"pt","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autores"]}}}languages/co-authors-plus-pt_PT-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000524147177171730020455 0ustar00{"translation-revision-date":"2017-11-28 10:18:47+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"pt","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["Autores"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-pt_PT.mo000060400000020447147177171730013162 0ustar00m 6>Se,;CoU=   %( N X i v    >  . 5 : L Y c j u 7   ) $ e8 H  3 F1 6x   ,   - M R c   !   5 #&!(J P\%{E& + 7 D P\p *,3-`.12"9Qj@OSo-dmD? )   =^ e rE   0=C(oRk8T>i+   ->CXq&!)/231e m{"H 0 CQV_ h t %)O:X;;0 4< q    Z and %s is a required field-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)AuthorsBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorShow allSlugSpam it: %sTrash it: %sURL : %sUnique SlugUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newuser_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2017-11-28 10:18:47+0000 Language: pt Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 e %s é um campo obrigatório--Não mapeado--AIMSobre o autor convidadoAdicionar novoAdicionar autor convidadoTodos os autors convidadosPermite artigos com mais do que um autor. Este plugin é uma versão expandida do plugin Co-Authors, desenvolvido por Weston Ruter.Tem a certeza de que quer remover este autor?Autor: %1$s (IP: %2$s , %3$s)AutoresInformação biográficaClique num autor para o mudar. Arraste para mudar a ordem. Clique em Remover para o remover.Clique para mudar este autor ou arraste-o para mudar a sua posiçãoCo-autorCo-autoresCo-Authors PlusO co-autor não existe. Tentar novamente?Comentário: Confirmar eliminaçãoInformações de contactoCriar perfilCampo personalizado excluído.Campo personalizado actualizado.ApagarEliminar: %sNome exibidoMostrar conflictos de nomes com os nomes de outros autore convidados.Operação ilegalEmailEditarEditar autor convidadoEditar perfilExcerto: FiltrarNomeAutor convidadoAutores convidadosO autor convidado não pode ser eliminado porque não existe.Autor convidado eliminado.Autor convidado não existeAutor convidado restaurado da versão %sAutor convidado guardado.Autor convidado agendado para: %1$s. Pré-visualizar perfilAutor convidado submetido. Pré-visualizar perfilAutor convidado actualizado.Autor convidado actualizado. Ver perfilAutor convidado actualizado. Pré-visualizar perfilAutores convidados não podem ser criados sem nomes públicos.IDJabber/Google TalkApelidoDeixar os artigos atribuídos ao autor, %s.Conta ligadaj M, Y @ H:iMeuMohammad Jangda, Daniel Bachhuber, AutomatticNomeNovo autor convidadoNovo comentário em "%s"Novo pingback em "%s"Novo trackback em "%s"Nenhum co-autor existe para esse termoNenhum autor convidado encontradoNenhum autor convidado encontrado no lixoNenhum utilizador com essa IDNota: se pretende eliminar o autor convidado e todos os seus artigos, deveria eliminar primeiro os artigos e depois voltar aqui para eliminar o autor.Ligação permanente: %sPor favor escolha uma opção.Por favor especifique um login de co-autor válidoPor favor especifique um nome de utilizador válidoArtigosArtigos de %sAtribuir a outro co-autor:Co-autor a re-atribuir não existeEliminarRemover crédito dos artigos (deixando os artigos no seu estado actual).GuardarPesquisar autores convidadosPesquisar um autorMostrar todosSlugSpam: %sLixo: %sURL : %sURL únicaActualizar autor convidadoVer autor convidadoVer artigosVer artigos deste autorVisitar site de %sSiteSite: %1$s (IP: %2$s , %3$s)Com conta ligadaSem conta ligadaMapeamento de utilizador de WordPressYahoo IMPode visualizar todos os comentários a este artigo aqui: Pode visualizar todos os pingbacks para o seu artigo aqui: Pode visualizar todos os trackbacks para este artigo aqui: Não tem permissões para executar essa acção.Especificou este autor convidado para ser eliminado:[%1$s] Comentário: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"Adicionar novoo user_login não pode duplicar autores convidados ou utilizadores mapeados já existenteslanguages/co-authors-plus-pt_PT.po000060400000045414147177171730013166 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2017-11-28 10:18:47+0000\n" "Language: pt\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Permite artigos com mais do que um autor. Este plugin é uma versão expandida do plugin Co-Authors, desenvolvido por Weston Ruter." #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Artigos de %s" #: template-tags.php:91 msgid " and " msgstr " e " #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Visitar site de %s" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Nome" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Adicionar novo" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Apagar" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Editar" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtrar" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Meu" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Nome exibido" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Guardar" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Por favor especifique um login de co-autor válido" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Por favor especifique um nome de utilizador válido" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Ver artigos" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Sem conta ligada" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Com conta ligada" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Mostrar todos" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Co-autor" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Co-autores" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Criar perfil" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Editar perfil" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Nenhum utilizador com essa ID" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Co-autor a re-atribuir não existe" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Autor convidado não existe" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "o user_login não pode duplicar autores convidados ou utilizadores mapeados já existentes" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s é um campo obrigatório" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Informação biográfica" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber/Google Talk" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Site" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Conta ligada" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "Email" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Apelido" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Nome" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Mostrar conflictos de nomes com os nomes de outros autore convidados." #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Autores convidados não podem ser criados sem nomes públicos." #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "--Não mapeado--" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "Mapeamento de utilizador de WordPress" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Confirmar eliminação" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Remover crédito dos artigos (deixando os artigos no seu estado actual)." #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Deixar os artigos atribuídos ao autor, %s." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Atribuir a outro co-autor:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Nota: se pretende eliminar o autor convidado e todos os seus artigos, deveria eliminar primeiro os artigos e depois voltar aqui para eliminar o autor." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Especificou este autor convidado para ser eliminado:" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Informações de contacto" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "URL única" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Autor convidado eliminado." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Por favor escolha uma opção." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "O co-autor não existe. Tentar novamente?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "O autor convidado não pode ser eliminado porque não existe." #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Não tem permissões para executar essa acção." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Operação ilegal" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Autor convidado actualizado. Pré-visualizar perfil" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "j M, Y @ H:i" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Autor convidado agendado para: %1$s. Pré-visualizar perfil" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Autor convidado submetido. Pré-visualizar perfil" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Autor convidado guardado." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Autor convidado restaurado da versão %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Autor convidado actualizado." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Campo personalizado excluído." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Campo personalizado actualizado." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Autor convidado actualizado. Ver perfil" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Adicionar novo" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Sobre o autor convidado" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Actualizar autor convidado" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Nenhum autor convidado encontrado no lixo" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Nenhum autor convidado encontrado" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Pesquisar autores convidados" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Ver autor convidado" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Novo autor convidado" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Editar autor convidado" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Adicionar autor convidado" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Todos os autors convidados" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Autores convidados" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Autor convidado" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Spam: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Eliminar: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Lixo: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Ligação permanente: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: \"%2$s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Pode visualizar todos os pingbacks para o seu artigo aqui: " #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: \"%2$s\"" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Pode visualizar todos os trackbacks para este artigo aqui: " #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Excerto: " #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Site: %1$s (IP: %2$s , %3$s)" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Comentário: \"%2$s\"" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Pode visualizar todos os comentários a este artigo aqui: " #: co-authors-plus.php:99 msgid "Comment: " msgstr "Comentário: " #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Autor: %1$s (IP: %2$s , %3$s)" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Pesquisar um autor" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Clique para mudar este autor ou arraste-o para mudar a sua posição" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Tem a certeza de que quer remover este autor?" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Eliminar" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Ver artigos deste autor" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Artigos" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Autores" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Novo pingback em \"%s\"" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Novo comentário em \"%s\"" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Novo trackback em \"%s\"" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Clique num autor para o mudar. Arraste para mudar a ordem. Clique em Remover para o remover." #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Nenhum co-autor existe para esse termo" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" languages/co-authors-plus-ru_RU-1fdf421c05c1140f6d71444ea2b27638.json000060400000000611147177171730017713 0ustar00{"translation-revision-date":"2023-08-29 05:01:52+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"ru","plural-forms":"nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);"},"Authors":["\u0410\u0432\u0442\u043e\u0440\u044b"]}}}languages/co-authors-plus-ru_RU-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000001454147177171730020466 0ustar00{"translation-revision-date":"2023-08-29 05:01:52+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"ru","plural-forms":"nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);"},"Select An Author":["\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0430"],"Remove Author":["\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0430"],"Move down":["\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0438\u0436\u0435"],"Move Up":["\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0448\u0435"],"Authors":["\u0410\u0432\u0442\u043e\u0440\u044b"]}}}languages/co-authors-plus-ru_RU.mo000060400000035152147177171730013167 0ustar00|,' $F k  i   ! ) > J A\ ,' T t    o = N X c %s        & >3 r      79O)keHX3nF6 # 8,Bo ~ - ,K!k" #&! *%Io v E #;,h my5w $ 1 =I-]  "9 P[,d-.12 Sj.@7-$2MW5I8%^{j n=$"P# : I V c v |H!!!!M!J"'b"""1"5"!#.0#_#r#x#" $.$5$:F$)$$ $$ $$$$j%(%@%M%-=&k&v'-'d'u(i((( )P)2j) ) ))-)) ***:1*&l*A*A*H+K`+1+8+N,7f,,%-2-Y-DJ. ..3.G. 5/B/^/z/0 0070!S0u0a0 0"01e=1"134 4404W 5%a565#5;5$6C6 L67m69646 7 7k)7k7r8Pt8W8%9%C9,i999.9o9 and %s is a required field-- Author already exists (ID #%s); skipping.-- Created as guest author #%s-- Failed to create guest author: %s-- Not found; creating profile.-- Not mapped --Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browserAIMAbout the guest authorAdd NewAdd New Guest AuthorAll AuthorsAll Guest AuthorsAll done! %d post was affected.All done! %d posts were affected.Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)Author: %sAuthorsAvatarBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete Guest AuthorsDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileEmailEmail : %sExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountLogin NameM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticMove UpMove downNameNames of co-authors to save.New Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo matching co-authors were found.No user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove AuthorRemove AvatarRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorSelect An AuthorSet AvatarShow allSkipping - Post #%1$d already has co-authors assigned: %2$sSlugSpam it: %sText to search.There are no posts associated with this guest author.There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?There is a WordPress user with the same username as this guest author, please go back and link them in order to update.Trash it: %sURL : %sUnique SlugUpdate Guest AuthorUpdating - Adding %1$s's byline to post #%2$dUse AvatarView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingWritten byYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newhttps://automattic.comhttps://wordpress.org/plugins/co-authors-plus/user_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2023-08-29 05:01:52+0000 Language: ru Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2); X-Generator: GlotPress/4.0.0-alpha.7 и %s обязательное поле-- Автор уже существует (ID #%s); пропускается.-- Создано гостевым автором #%s-- Не удалось создать гостевого автора: %s-- Не найдено; создание профиля.-- Не привязан -- Примечание: чтобы редактировать авторов записей, пожалуйста, включите JavaScript или используйте браузер с поддержкой JavaScripttAIMО гостевом автореДобавить новоеДобавить нового гостевого автораВсе авторыВсе гостевые авторыВсе сделано! Было затронуто %d запись.Все сделано! Было затронуто %d записи.Все сделано! Было затронуто %d записей.Плагин позволяет назначить записи сразу несколько авторов. Этот плагин является расширенной версией плагина Co-AuthorsВы уверены, что хотите удалить этого автора?Автор : %1$s (IP: %2$s , %3$s)Автор: %sАвторыАватарБиографияЩелкните на автора для изменения. Перетащите для изменения их порядка. Для удаления щелкните на Удалить.Щелкните для изменения автора или перетащите для изменения позицииСоавторСоавторыСоавторствоСоавтор не существует. Попробуйте еще раз.Комментарий:Подтвердите удалениеКонтактыСоздать профильПроизвольное поле удалено.Произвольное поле обновлено.УдалитьУдалить гостевых авторовУдалить: %sОтображаемое имяЭто отображаемое имя уже существует для другого гостевого автораЧто-то пошло не такE-mailИзменитьРедактировать гостевого автораРедактировать профильEmailEmail : %sОтрывок:ФильтрИмяГостевой авторГостевые авторыГостевой автор не существует поэтому не может быть удаленГостевой автор удаленТакой гостевой автор не существуетГостевой автор восстановлен из редакции %sГостевой автор сохранен.Гостевой автор запланирован для: %1$s. Просмотреть профильГостевой автор отправлен. Просмотреть профильГостевой автор обновлен.Гостевой автор обновлен. Просмотреть профильГостевой автор обновлен. Просмотреть профильНельзя создать гостевого автора без отображаемого имени.IDJabber / Google TalkФамилияОставить привязку записей к пользователю %s.Привязанная учетная записьЛогинM j, Y @ G:iМоиMohammad Jangda, Daniel Bachhuber, AutomatticПереместить вышеПереместить нижеИмяИмена соавторов для сохранения.Новый гостевой авторНовый комментарий к вашей записи "%s"Новое уведомление к вашей записи "%s"Новая обратная ссылка к вашей записи "%s"Для этого термина не существует соавтораГостевые авторы не найденыВ корзине нет гостевых авторовНе найдено ни одного подходящего соавтора.Пользовать с таким ID не найденЕсли вы хотите удалить гостевого автора и все его записи, вам необходимо удалить сначала эти записи, а затем вернуться и удалить автора.Постоянная ссылка: %sПожалуйста, отметьте опцию.Пожалуйста, укажите корректное имя пользователяПожалуйста, укажите корректный user_loginЗаписиЗаписи автора %sНазначить другого соавтора:Переназначенный соавтор не существуетУбратьУдалить автораУдалить аватарУдалить подпись из записей (но оставить текущий статус для каждой записи)СохранитьПоискПоиск автораВыбрать автораУстановить аватарПоказать всеПропускаем - Для записи #%1$d уже назначены соавторы: %2$sЯрлыкОтправить в спам: %sТекст для поиска.С этим гостевым автором не связано ни одной публикации.Существует %d запись, ассоциированная с этим гостевым автором. Что следует сделать с этой записью?Существует %d записи, ассоциированные с этим гостевым автором. Что следует сделать с этими записями?Существует %d записей, ассоциированных с этим гостевым автором. Что следует сделать с этими записями?Автор с таким именем пользователя уже зарегистрирован в WordPress, пожалуйста, вернитесь назад и свяжите эти профили.В корзину: %sURL : %sУникальный ярылкОбновить гостевого автораОбновление - Добавлена %1$s подпись для записи #%2$dИспользовать аватарПросмотреть гостевого автораПросмотреть записиПросмотреть записи этого автораПосетить сайт %s’sСайтСайт: %1$s (IP: %2$s , %3$s)С привязанной учетной записьюБез привязанной учетной записиСвязь с пользователями WordPressАвтор:Yahoo IMВы можете просмотреть все комментарии к этой записи здесь:Вы можете просмотреть все уведомления к этой записи здесь:Вы можете просмотреть все обратные ссылки к этой записи здесь:У вас нет прав не выполнение этого действия.Вы указали этого гостевого автора для удаления:[%1$s] Комментарий: "%2$s"[%1$s] Уведомление: "%2$s"[%1$s] Обратная ссылка: "%2$s"Добавить новогоhttps://automattic.comhttps://wordpress.org/plugins/co-authors-plus/user_login не может повторяться с уже существующим пользователемlanguages/co-authors-plus-ru_RU.po000060400000056717147177171730013204 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2023-08-29 05:01:52+0000\n" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "Выбрать автора" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "Удалить автора" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "Переместить ниже" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "Переместить выше" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "Автор:" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "-- Создано гостевым автором #%s" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "-- Не удалось создать гостевого автора: %s" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "-- Не найдено; создание профиля." #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "-- Автор уже существует (ID #%s); пропускается." #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "Email" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "Логин" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "Автор с таким именем пользователя уже зарегистрирован в WordPress, пожалуйста, вернитесь назад и свяжите эти профили." #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "Существует %d запись, ассоциированная с этим гостевым автором. Что следует сделать с этой записью?" msgstr[1] "Существует %d записи, ассоциированные с этим гостевым автором. Что следует сделать с этими записями?" msgstr[2] "Существует %d записей, ассоциированных с этим гостевым автором. Что следует сделать с этими записями?" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "С этим гостевым автором не связано ни одной публикации." #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "Удалить гостевых авторов" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "Удалить аватар" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "Использовать аватар" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "Установить аватар" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "Аватар" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "Имена соавторов для сохранения." #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "Текст для поиска." #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "Автор: %s" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "Все авторы" #. Author URI of the plugin msgid "https://automattic.com" msgstr "https://automattic.com" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Плагин позволяет назначить записи сразу несколько авторов. Этот плагин является расширенной версией плагина Co-Authors" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "https://wordpress.org/plugins/co-authors-plus/" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Соавторство" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Посетить сайт %s’s" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Записи автора %s" #: template-tags.php:91 msgid " and " msgstr " и " #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "Все сделано! Было затронуто %d запись." msgstr[1] "Все сделано! Было затронуто %d записи." msgstr[2] "Все сделано! Было затронуто %d записей." #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "Обновление - Добавлена %1$s подпись для записи #%2$d" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "Пропускаем - Для записи #%1$d уже назначены соавторы: %2$s" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Пожалуйста, укажите корректное имя пользователя" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Пожалуйста, укажите корректный user_login" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Фильтр" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Просмотреть записи" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Удалить" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "Не найдено ни одного подходящего соавтора." #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Без привязанной учетной записи" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "С привязанной учетной записью" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Показать все" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Соавтор" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Соавторы" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Создать профиль" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Редактировать профиль" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Пользовать с таким ID не найден" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Переназначенный соавтор не существует" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Такой гостевой автор не существует" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "user_login не может повторяться с уже существующим пользователем" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s обязательное поле" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Биография" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber / Google Talk" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "Yahoo IM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Сайт" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Привязанная учетная запись" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-mail" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Ярлык" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Фамилия" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Имя" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Отображаемое имя" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Это отображаемое имя уже существует для другого гостевого автора" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Нельзя создать гостевого автора без отображаемого имени." #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Не привязан -- " #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "Связь с пользователями WordPress" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Добавить новое" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Подтвердите удаление" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Удалить подпись из записей (но оставить текущий статус для каждой записи)" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Оставить привязку записей к пользователю %s." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Назначить другого соавтора:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Если вы хотите удалить гостевого автора и все его записи, вам необходимо удалить сначала эти записи, а затем вернуться и удалить автора." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Вы указали этого гостевого автора для удаления:" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Контакты" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Имя" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Уникальный ярылк" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Сохранить" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Гостевой автор удален" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Пожалуйста, отметьте опцию." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Соавтор не существует. Попробуйте еще раз." #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Гостевой автор не существует поэтому не может быть удален" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "У вас нет прав не выполнение этого действия." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Что-то пошло не так" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Гостевой автор обновлен. Просмотреть профиль" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "M j, Y @ G:i" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Гостевой автор запланирован для: %1$s. Просмотреть профиль" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Гостевой автор отправлен. Просмотреть профиль" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Гостевой автор сохранен." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Гостевой автор восстановлен из редакции %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Гостевой автор обновлен." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Произвольное поле удалено." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Произвольное поле обновлено." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Гостевой автор обновлен. Просмотреть профиль" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Добавить нового" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "О гостевом авторе" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Обновить гостевого автора" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "В корзине нет гостевых авторов" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Гостевые авторы не найдены" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Поиск" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Просмотреть гостевого автора" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Новый гостевой автор" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Редактировать гостевого автора" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Добавить нового гостевого автора" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Все гостевые авторы" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Гостевые авторы" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Гостевой автор" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Отправить в спам: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Удалить: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "В корзину: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Постоянная ссылка: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Уведомление: \"%2$s\"" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Вы можете просмотреть все уведомления к этой записи здесь:" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Новое уведомление к вашей записи \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Обратная ссылка: \"%2$s\"" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Вы можете просмотреть все обратные ссылки к этой записи здесь:" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Отрывок:" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Сайт: %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Новая обратная ссылка к вашей записи \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Комментарий: \"%2$s\"" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Вы можете просмотреть все комментарии к этой записи здесь:" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Комментарий:" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "Email : %s" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Автор : %1$s (IP: %2$s , %3$s)" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Новый комментарий к вашей записи \"%s\"" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Мои" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Поиск автора" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Щелкните для изменения автора или перетащите для изменения позиции" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Вы уверены, что хотите удалить этого автора?" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Убрать" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Изменить" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Для этого термина не существует соавтора" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Просмотреть записи этого автора" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Записи" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Щелкните на автора для изменения. Перетащите для изменения их порядка. Для удаления щелкните на Удалить." #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "Примечание: чтобы редактировать авторов записей, пожалуйста, включите JavaScript или используйте браузер с поддержкой JavaScriptt" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Авторы" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" languages/co-authors-plus-sv_SE-1fdf421c05c1140f6d71444ea2b27638.json000060400000000420147177171730017674 0ustar00{"translation-revision-date":"2023-08-28 08:47:34+0000","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"sv_SE","plural-forms":"nplurals=2; plural=n != 1;"},"Authors":["F\u00f6rfattare"]}}}languages/co-authors-plus-sv_SE-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000646147177171730020453 0ustar00{"translation-revision-date":"2023-08-28 08:47:34+0000","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"sv_SE","plural-forms":"nplurals=2; plural=n != 1;"},"Select An Author":["V\u00e4lj en f\u00f6rfattare"],"Remove Author":["Ta bort f\u00f6rfattare"],"Move down":["Flytta ner"],"Move Up":["Flytta upp"],"Authors":["F\u00f6rfattare"]}}}languages/co-authors-plus-sv_SE.mo000060400000023357147177171730013156 0ustar00,<<=CZ$y  ,     o =w  %   ( 7 M c j  >       & 1 ; B M Z 7h   )  e Hv  3 F 6P ,  -0 8BGXv!"1M #&!@b ht%  E"'<Q bmv {5     8QYy ,-.*1Y2.2@a4:"Y.| +4# - 9D[S;JY)i   + ;IH( "3;D3pQv9R3r <  !.-2 ` kv{'!&* + .J 'y $ l!"{!%! !!!#!)""L"T"h"V{""""## 2#<#A#>Z## # #### $&$A$ ]$ g$$$$ $$3$1%2B%3u%9%%&& 9&G&.^&a& and %s is a required field-- Created as guest author #%s-- Failed to create guest author: %s-- Not mapped --AIMAbout the guest authorAdd NewAdd New Guest AuthorAll AuthorsAll Guest AuthorsAllows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.Are you sure you want to remove this author?Author : %1$s (IP: %2$s , %3$s)Author: %sAuthorsAvatarBiographical InfoClick on an author to change them. Drag to change their order. Click on Remove to remove them.Click to change this author, or drag to change their positionCo-AuthorCo-AuthorsCo-Authors PlusCo-author does not exists. Try again?Comment: Confirm DeletionContact InfoCreate ProfileCustom field deleted.Custom field updated.DeleteDelete Guest AuthorsDelete it: %sDisplay NameDisplay name conflicts with another guest author display name.Doin' something fishy, huh?E-mailEditEdit Guest AuthorEdit ProfileEmailEmail : %sExcerpt: FilterFirst NameGuest AuthorGuest AuthorsGuest author can't be deleted because it doesn't exist.Guest author deleted.Guest author does not existGuest author restored to revision from %sGuest author saved.Guest author scheduled for: %1$s. Preview profileGuest author submitted. Preview profileGuest author updated.Guest author updated. View profileGuest author updated. Preview profileGuest authors cannot be created without display names.IDJabber / Google TalkLast NameLeave posts assigned to the mapped user, %s.Linked AccountLogin NameM j, Y @ G:iMineMohammad Jangda, Daniel Bachhuber, AutomatticMove UpMove downNameNew Guest AuthorNew comment on your post "%s"New pingback on your post "%s"New trackback on your post "%s"No co-author exists for that termNo guest authors foundNo guest authors found in TrashNo matching co-authors were found.No user exists with that IDNote: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.Permalink: %sPlease make sure to pick an option.Please specify a valid co-author loginPlease specify a valid user_loginPostsPosts by %sReassign to another co-author:Reassignment co-author does not existRemoveRemove AuthorRemove AvatarRemove byline from posts (but leave each post in its current status).SaveSearch Guest AuthorsSearch for an authorSelect An AuthorSet AvatarShow allSlugSpam it: %sThere are no posts associated with this guest author.Trash it: %sURL : %sUnique SlugUpdate Guest AuthorUse AvatarView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteWebsite: %1$s (IP: %2$s , %3$s)With linked accountWithout linked accountWordPress User MappingWritten byYahoo IMYou can see all comments on this post here: You can see all pingbacks on this post here: You can see all trackbacks on this post here: You don't have permission to perform this action.You have specified this guest author for deletion:[%1$s] Comment: "%2$s"[%1$s] Pingback: "%2$s"[%1$s] Trackback: "%2$s"guest authorAdd Newhttps://automattic.comhttps://wordpress.org/plugins/co-authors-plus/user_login cannot duplicate existing guest author or mapped userProject-Id-Version: Plugins - Co-Authors Plus - Stable (latest release) Report-Msgid-Bugs-To: Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2023-09-18T17:14:46+00:00 PO-Revision-Date: 2023-08-28 08:47:34+0000 Language: sv_SE Plural-Forms: nplurals=2; plural=n != 1; X-Generator: GlotPress/4.0.0-alpha.7 och %s är ett obligatoriskt fält-- Skapad som gästförfattare #%s-- Misslyckades att skapa gästförfattare: %s-- Inte kopplad --AIMOm gästförfattarenLägg till nyLägg till ny gästförfattareAlla författareAlla gästförfattareTillåter att ett inlägg tilldelas flera författare. Detta tillägg är en vidareutvecklad version av "Co-Authors"-tillägget skrivet av Weston Ruter.Är du säker att du vill ta bort denna författare?Författare : %1$s (IP: %2$s, %3$s)Författare: %sFörfattareProfilbildBiografisk informationKlicka på författare för att ändra dem. Drag för att ändra ordning på dem. Klicka på Ta bort för att ta bort dem.Klicka för att ändra denna författare, eller drag för att ändra deras positionMedförfattareMedförfattareCo-Authors PlusMedförfattare finns inte. Försök igen?Kommentar: Bekräfta borttagningKontaktinformationSkapa profilAnpassat fält borttaget.Anpassat fält uppdaterat.Ta bortTa bort gästförfattareTa bort det: %sVisningsnamnVisningsnamn skapar konflikt med en annan gästförfattares visningsnamn.Nu gör du allt något skumt, eller hur?E-postRedigeraRedigera gästförfattareRedigera profilE-postE-post: %sUtdrag: FiltreraFörnamnGästförfattareGästförfattareGästförfattare kan inte tas bort eftersom den inte finns.Gästförfattare borttagen.Gästförfattare finns inteGästförfattare återställd till version från %sGästförfattare sparad.Gästförfattare schemalagd för: %1$s. Förhandsvisa profilGästförfattare inskickad. Förhandsvisa profilGästförfattare uppdaterat.Gästförfattare uppdaterad. Visa profilGästförfattare uppdaterad. Förhandsvisa profilGästförfattare kan inte skapas utan visningsnamn.IDJabber/Google TalkEfternamnLämna inlägg tilldelade till den kopplade användaren, %s.Länkat kontoInloggningsnamnM j, Y @ G:iMinMohammad Jangda, Daniel Bachhuber, AutomatticFlytta uppFlytta nerNamnNy gästförfattareNy kommentar till ditt inlägg ”%s”Ny pingback på ditt inlägg "%s"Ny trackback på ditt inlägg ”%s”Ingen medförfattare finns för den termenInga gästförfattare hittadesInga gästförfattare hittades i papperskorgenInga matchande medförfattare hittades.Ingen användare finns med detta ID.Observera: Om du vill radera gästförfattaren och alla tillhörande inlägg så borde du först radera inläggen och sedan återvända och radera gästförfattaren.Permalänk: %sSe till att välja ett alternativ.Ange ett giltigt medförfattare aliasSpecificera en giltig user_loginInläggPublicerat av %sTilldela en annan gästförfattare:Tilldelad gästförfattare existerar inteTa bortTa bort författareTa bort profilbildTa bort signatur från inlägg (men låt varje inlägg behålla sin nuvarande status).SparaSök gästförfattareSök efter en författareVälj en författareStäll in profilbildVisa allaSlugMärk som skräppost: %sDet finns inga inlägg associerade med denna gästförfattare.Lägg i papperskorgen: %sURL : %sUnik slugUppdatera gästförfattareAnvänd profilbildVisa gästförfattareVisa inläggVisa alla inlägg av denna författareBesök %s’s webbplatsWebbplatsWebbplats: %1$s (IP: %2$s, %3$s)Med länkat kontoUtan länkat kontoWordPress AnvändarkopplingSkriven avYahooIMDu kan se alla kommentarer på detta inlägg här: Du kan se alla pingbacks på detta inlägg här: Du kan se alla trackbacks på detta inlägg här: Du har inte behörighet att utföra denna åtgärd.Du har inte angivit denna gästförfattare för radering:[%1$s] Kommentar: ”%2$s”[%1$s] Pingback: ”%2$s”[%1$s] Trackback: ”%2$s”Lägg till nyhttps://automattic.comhttps://wordpress.org/plugins/co-authors-plus/"user_login" kan inte vara det samma som en existerande gästförfattare eller kopplad användarelanguages/co-authors-plus-sv_SE.po000060400000046727147177171730013167 0ustar00msgid "" msgstr "" "Project-Id-Version: Plugins - Co-Authors Plus - Stable (latest release)\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2023-09-18T17:14:46+00:00\n" "PO-Revision-Date: 2023-08-28 08:47:34+0000\n" "Language: sv_SE\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: GlotPress/4.0.0-alpha.7\n" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "Välj en författare" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "Ta bort författare" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "Flytta ner" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "Flytta upp" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "Skriven av" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "-- Skapad som gästförfattare #%s" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "-- Misslyckades att skapa gästförfattare: %s" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "E-post" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "Inloggningsnamn" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "Det finns inga inlägg associerade med denna gästförfattare." #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "Ta bort gästförfattare" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "Ta bort profilbild" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "Använd profilbild" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "Ställ in profilbild" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "Profilbild" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "Författare: %s" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "Alla författare" #. Author URI of the plugin msgid "https://automattic.com" msgstr "https://automattic.com" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "Mohammad Jangda, Daniel Bachhuber, Automattic" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "Tillåter att ett inlägg tilldelas flera författare. Detta tillägg är en vidareutvecklad version av \"Co-Authors\"-tillägget skrivet av Weston Ruter." #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "https://wordpress.org/plugins/co-authors-plus/" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "Co-Authors Plus" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Besök %s’s webbplats" #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Publicerat av %s" #: template-tags.php:91 msgid " and " msgstr " och " #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "Ange ett giltigt medförfattare alias" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "Specificera en giltig user_login" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Filtrera" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Visa inlägg" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Ta bort" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "Inga matchande medförfattare hittades." #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "Utan länkat konto" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "Med länkat konto" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Visa alla" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "Medförfattare" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "Medförfattare" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Skapa profil" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Redigera profil" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "Ingen användare finns med detta ID." #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "Tilldelad gästförfattare existerar inte" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Gästförfattare finns inte" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "\"user_login\" kan inte vara det samma som en existerande gästförfattare eller kopplad användare" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s är ett obligatoriskt fält" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Biografisk information" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "Jabber/Google Talk" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "YahooIM" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "AIM" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Webbplats" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "Länkat konto" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "E-post" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "Slug" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Efternamn" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Förnamn" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "Visningsnamn" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "ID" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "Visningsnamn skapar konflikt med en annan gästförfattares visningsnamn." #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "Gästförfattare kan inte skapas utan visningsnamn." #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Inte kopplad --" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "WordPress Användarkoppling" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Lägg till ny" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Bekräfta borttagning" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "Ta bort signatur från inlägg (men låt varje inlägg behålla sin nuvarande status)." #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "Lämna inlägg tilldelade till den kopplade användaren, %s." #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "Tilldela en annan gästförfattare:" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "Observera: Om du vill radera gästförfattaren och alla tillhörande inlägg så borde du först radera inläggen och sedan återvända och radera gästförfattaren." #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "Du har inte angivit denna gästförfattare för radering:" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Kontaktinformation" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "Namn" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "Unik slug" #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Spara" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Gästförfattare borttagen." #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "Se till att välja ett alternativ." #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "Medförfattare finns inte. Försök igen?" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "Gästförfattare kan inte tas bort eftersom den inte finns." #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "Du har inte behörighet att utföra denna åtgärd." #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "Nu gör du allt något skumt, eller hur?" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "Gästförfattare uppdaterad. Förhandsvisa profil" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "M j, Y @ G:i" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "Gästförfattare schemalagd för: %1$s. Förhandsvisa profil" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "Gästförfattare inskickad. Förhandsvisa profil" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "Gästförfattare sparad." #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "Gästförfattare återställd till version från %s" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "Gästförfattare uppdaterat." #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "Anpassat fält borttaget." #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "Anpassat fält uppdaterat." #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Gästförfattare uppdaterad. Visa profil" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Lägg till ny" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Om gästförfattaren" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Uppdatera gästförfattare" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "Inga gästförfattare hittades i papperskorgen" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Inga gästförfattare hittades" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Sök gästförfattare" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Visa gästförfattare" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Ny gästförfattare" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Redigera gästförfattare" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Lägg till ny gästförfattare" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Alla gästförfattare" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Gästförfattare" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Gästförfattare" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "Märk som skräppost: %s" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "Ta bort det: %s" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "Lägg i papperskorgen: %s" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "Permalänk: %s" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "[%1$s] Pingback: ”%2$s”" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "Du kan se alla pingbacks på detta inlägg här: " #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "Ny pingback på ditt inlägg \"%s\"" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "[%1$s] Trackback: ”%2$s”" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "Du kan se alla trackbacks på detta inlägg här: " #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "Utdrag: " #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "Webbplats: %1$s (IP: %2$s, %3$s)" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "Ny trackback på ditt inlägg ”%s”" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "[%1$s] Kommentar: ”%2$s”" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "Du kan se alla kommentarer på detta inlägg här: " #: co-authors-plus.php:99 msgid "Comment: " msgstr "Kommentar: " #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "URL : %s" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "E-post: %s" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "Författare : %1$s (IP: %2$s, %3$s)" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "Ny kommentar till ditt inlägg ”%s”" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Min" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Sök efter en författare" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "Klicka för att ändra denna författare, eller drag för att ändra deras position" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "Är du säker att du vill ta bort denna författare?" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Ta bort" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Redigera" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "Ingen medförfattare finns för den termen" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Visa alla inlägg av denna författare" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Inlägg" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "Klicka på författare för att ändra dem. Drag för att ändra ordning på dem. Klicka på Ta bort för att ta bort dem." #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Författare" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" languages/co-authors-plus-uk-1fdf421c05c1140f6d71444ea2b27638.json000060400000000553147177171730017303 0ustar00{"translation-revision-date":"2014-03-30 19:29+0200","generator":"WP-CLI\/2.8.1","source":"src\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"uk","plural-forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"},"Authors":["\u0410\u0432\u0442\u043e\u0440\u0438"]}}}languages/co-authors-plus-uk-dfbff627e6c248bcb3b61d7d06da9ca9.json000060400000000672147177171730020052 0ustar00{"translation-revision-date":"2014-03-30 19:29+0200","generator":"WP-CLI\/2.8.1","source":"build\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"uk","plural-forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"},"Authors":["\u0410\u0432\u0442\u043e\u0440\u0438"],"Move Up":[""],"Move down":[""],"Remove Author":[""],"Select An Author":[""]}}}languages/co-authors-plus-uk.mo000060400000006657147177171730012562 0ustar00,| "*?QY ku     3, `jo  .9SltW'(.W;q$ )'$ .L {  6 #    ; 3Y - [  ( (/ 7X G  "  ! .2 a { 0 8 ) =' &e   and %s is a required field-- Not mapped --About the guest authorAdd NewAdd New Guest AuthorAll Guest AuthorsAuthorsBiographical InfoComment: Confirm DeletionContact InfoCreate ProfileDeleteEditEdit Guest AuthorEdit ProfileFilterFirst NameGuest AuthorGuest AuthorsGuest author deleted.Guest author does not existGuest author updated. View profileLast NameMineNew Guest AuthorNo guest authors foundNo guest authors found in TrashPostsPosts by %sRemoveSaveSearch Guest AuthorsSearch for an authorShow allUpdate Guest AuthorView Guest AuthorView PostsView posts by this authorVisit %s’s websiteWebsiteguest authorAdd NewProject-Id-Version: Co-Authors Plus Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus Last-Translator: Jurko Chervony Language-Team: skinik MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POT-Creation-Date: 2014-03-17 15:59:18+00:00 PO-Revision-Date: 2014-03-30 19:29+0200 Language: uk X-Generator: Poedit 1.6.4 Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Poedit-SourceCharset: UTF-8 X-Poedit-Basepath: .. X-Poedit-SearchPath-0: . та %s — обов’язкове поле-- Не визначено --Про гостьового автораДодати новогоДодати нового гостьового автораВсі гостьові авториАвториОписКоментар:Підтвердити видаленняКонтактна інформаціяСтворити обліковий записВидалитиРедагуватиРедагувати гостьового автораРедагувати профільФільтруватиІм’яГостьовий авторГостьові авториГостьового автора видалено.Гостьовий автор не існуєГостьового автора оновлено. ПереглянутиПрізвищеМоєНовий гостьовий авторНе знайдено гостьових авторівВ кошику не знайдено гостьових авторівПублікаціїМатеріали автора %sВидалитиЗберегтиШукати гостьових авторівШукати автораПоказати всеОновити гостьового автораПереглянути гостьового автораПереглянути мареріалиПереглянути всі матеріали автораВідвідати %s’s сайтСайтДодати новогоlanguages/co-authors-plus-uk.po000060400000042432147177171730012554 0ustar00msgid "" msgstr "" "Project-Id-Version: Co-Authors Plus\n" "Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus\n" "Last-Translator: Jurko Chervony \n" "Language-Team: skinik \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: 2014-03-17 15:59:18+00:00\n" "PO-Revision-Date: 2014-03-30 19:29+0200\n" "Language: uk\n" "X-Generator: Poedit 1.6.4\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: ..\n" "X-Poedit-SearchPath-0: .\n" #: php/class-coauthors-plus.php:197 #: php/class-coauthors-plus.php:395 #: php/class-coauthors-plus.php:515 #: php/class-coauthors-plus.php:604 #: php/class-coauthors-plus.php:1649 #: build/index.js:1 #: src/index.js:20 msgid "Authors" msgstr "Автори" #: php/class-coauthors-plus.php:472 #: php/class-coauthors-plus.php:606 #: php/class-coauthors-plus.php:1400 msgid "Click on an author to change them. Drag to change their order. Click on Remove to remove them." msgstr "" #: php/class-coauthors-plus.php:567 #: php/class-coauthors-wp-list-table.php:177 msgid "Posts" msgstr "Публікації" #: php/class-coauthors-plus.php:586 msgid "View posts by this author" msgstr "Переглянути всі матеріали автора" #: php/class-coauthors-plus.php:649 #: php/class-coauthors-plus.php:667 msgid "No co-author exists for that term" msgstr "" #: php/class-coauthors-plus.php:1395 #: php/class-coauthors-wp-list-table.php:239 msgid "Edit" msgstr "Редагувати" #: php/class-coauthors-plus.php:1396 msgid "Remove" msgstr "Видалити" #: php/class-coauthors-plus.php:1397 msgid "Are you sure you want to remove this author?" msgstr "" #: php/class-coauthors-plus.php:1398 msgid "Click to change this author, or drag to change their position" msgstr "" #: php/class-coauthors-plus.php:1399 msgid "Search for an author" msgstr "Шукати автора" #: php/class-coauthors-plus.php:1441 msgid "Mine" msgstr "Моє" #. translators: Post title. #: co-authors-plus.php:90 msgid "New comment on your post \"%s\"" msgstr "" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:92 msgid "Author : %1$s (IP: %2$s , %3$s)" msgstr "" #. translators: Comment author URL. #: co-authors-plus.php:96 #: co-authors-plus.php:109 #: co-authors-plus.php:120 msgid "URL : %s" msgstr "" #: co-authors-plus.php:99 msgid "Comment: " msgstr "Коментар:" #: co-authors-plus.php:100 msgid "You can see all comments on this post here: " msgstr "" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:102 msgid "[%1$s] Comment: \"%2$s\"" msgstr "" #. translators: Post title. #: co-authors-plus.php:105 msgid "New trackback on your post \"%s\"" msgstr "" #. translators: 1: comment author, 2: author IP, 3: author domain #: co-authors-plus.php:107 #: co-authors-plus.php:118 msgid "Website: %1$s (IP: %2$s , %3$s)" msgstr "" #: co-authors-plus.php:110 #: co-authors-plus.php:121 msgid "Excerpt: " msgstr "" #: co-authors-plus.php:111 msgid "You can see all trackbacks on this post here: " msgstr "" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:113 msgid "[%1$s] Trackback: \"%2$s\"" msgstr "" #. translators: Post title. #: co-authors-plus.php:116 msgid "New pingback on your post \"%s\"" msgstr "" #: co-authors-plus.php:122 msgid "You can see all pingbacks on this post here: " msgstr "" #. translators: 1: blog name, 2: post title #: co-authors-plus.php:124 msgid "[%1$s] Pingback: \"%2$s\"" msgstr "" #. translators: Comment URL. #: co-authors-plus.php:128 msgid "Permalink: %s" msgstr "" #. translators: URL for trashing a comment. #: co-authors-plus.php:131 msgid "Trash it: %s" msgstr "" #. translators: URL for deleting a comment. #: co-authors-plus.php:134 msgid "Delete it: %s" msgstr "" #. translators: URL for marking a comment as spam. #: co-authors-plus.php:137 msgid "Spam it: %s" msgstr "" #: php/class-coauthors-guest-authors.php:89 #: php/class-coauthors-guest-authors.php:1547 #: php/class-coauthors-guest-authors.php:1620 msgid "Guest Author" msgstr "Гостьовий автор" #: php/class-coauthors-guest-authors.php:90 msgid "Guest Authors" msgstr "Гостьові автори" #: php/class-coauthors-guest-authors.php:91 msgid "All Guest Authors" msgstr "Всі гостьові автори" #: php/class-coauthors-guest-authors.php:92 msgid "Add New Guest Author" msgstr "Додати нового гостьового автора" #: php/class-coauthors-guest-authors.php:93 msgid "Edit Guest Author" msgstr "Редагувати гостьового автора" #: php/class-coauthors-guest-authors.php:94 msgid "New Guest Author" msgstr "Новий гостьовий автор" #: php/class-coauthors-guest-authors.php:95 msgid "View Guest Author" msgstr "Переглянути гостьового автора" #: php/class-coauthors-guest-authors.php:96 msgid "Search Guest Authors" msgstr "Шукати гостьових авторів" #: php/class-coauthors-guest-authors.php:97 msgid "No guest authors found" msgstr "Не знайдено гостьових авторів" #: php/class-coauthors-guest-authors.php:98 msgid "No guest authors found in Trash" msgstr "В кошику не знайдено гостьових авторів" #: php/class-coauthors-guest-authors.php:99 msgid "Update Guest Author" msgstr "Оновити гостьового автора" #: php/class-coauthors-guest-authors.php:100 msgid "About the guest author" msgstr "Про гостьового автора" #: php/class-coauthors-guest-authors.php:114 msgctxt "guest author" msgid "Add New" msgstr "Додати нового" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:168 #: php/class-coauthors-guest-authors.php:175 msgid "Guest author updated. View profile" msgstr "Гостьового автора оновлено. Переглянути" #: php/class-coauthors-guest-authors.php:169 msgid "Custom field updated." msgstr "" #: php/class-coauthors-guest-authors.php:170 msgid "Custom field deleted." msgstr "" #: php/class-coauthors-guest-authors.php:171 msgid "Guest author updated." msgstr "" #. translators: %s: date and time of the revision #: php/class-coauthors-guest-authors.php:173 msgid "Guest author restored to revision from %s" msgstr "" #: php/class-coauthors-guest-authors.php:176 msgid "Guest author saved." msgstr "" #. translators: Guest author URL #: php/class-coauthors-guest-authors.php:178 msgid "Guest author submitted. Preview profile" msgstr "" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:181 msgid "Guest author scheduled for: %1$s. Preview profile" msgstr "" #. translators: Publish box date format, see http://php.net/date #: php/class-coauthors-guest-authors.php:183 msgid "M j, Y @ G:i" msgstr "" #. translators: Guest author profile preview URL. #: php/class-coauthors-guest-authors.php:187 msgid "Guest author updated. Preview profile" msgstr "" #: php/class-coauthors-guest-authors.php:205 #: php/class-coauthors-guest-authors.php:244 #: php/class-coauthors-guest-authors.php:472 msgid "Doin' something fishy, huh?" msgstr "" #: php/class-coauthors-guest-authors.php:209 #: php/class-coauthors-guest-authors.php:249 msgid "You don't have permission to perform this action." msgstr "" #: php/class-coauthors-guest-authors.php:255 #: php/class-coauthors-guest-authors.php:478 msgid "Guest author can't be deleted because it doesn't exist." msgstr "" #: php/class-coauthors-guest-authors.php:271 msgid "Co-author does not exists. Try again?" msgstr "" #: php/class-coauthors-guest-authors.php:281 msgid "Please make sure to pick an option." msgstr "" #: php/class-coauthors-guest-authors.php:433 msgid "Guest author deleted." msgstr "Гостьового автора видалено." #: php/class-coauthors-guest-authors.php:452 msgid "Save" msgstr "Зберегти" #: php/class-coauthors-guest-authors.php:453 msgid "Unique Slug" msgstr "" #: php/class-coauthors-guest-authors.php:455 msgid "Name" msgstr "" #: php/class-coauthors-guest-authors.php:456 msgid "Contact Info" msgstr "Контактна інформація" #: php/class-coauthors-guest-authors.php:488 msgid "You have specified this guest author for deletion:" msgstr "" #: php/class-coauthors-guest-authors.php:494 msgid "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author." msgstr "" #: php/class-coauthors-guest-authors.php:523 msgid "Reassign to another co-author:" msgstr "" #. translators: Name of a linked user account. #: php/class-coauthors-guest-authors.php:530 msgid "Leave posts assigned to the mapped user, %s." msgstr "" #: php/class-coauthors-guest-authors.php:535 msgid "Remove byline from posts (but leave each post in its current status)." msgstr "" #: php/class-coauthors-guest-authors.php:543 #: php/class-coauthors-guest-authors.php:545 msgid "Confirm Deletion" msgstr "Підтвердити видалення" #: php/class-coauthors-guest-authors.php:556 msgid "Add New" msgstr "Додати нового" #: php/class-coauthors-guest-authors.php:626 msgid "WordPress User Mapping" msgstr "" #: php/class-coauthors-guest-authors.php:631 msgid "-- Not mapped --" msgstr "-- Не визначено --" #: php/class-coauthors-guest-authors.php:775 #: php/class-coauthors-guest-authors.php:786 msgid "Guest authors cannot be created without display names." msgstr "" #: php/class-coauthors-guest-authors.php:806 msgid "Display name conflicts with another guest author display name." msgstr "" #: php/class-coauthors-guest-authors.php:1027 #: php/class-coauthors-guest-authors.php:1577 msgid "ID" msgstr "" #: php/class-coauthors-guest-authors.php:1034 #: php/class-coauthors-guest-authors.php:1579 #: php/class-coauthors-wp-list-table.php:172 msgid "Display Name" msgstr "" #: php/class-coauthors-guest-authors.php:1040 #: php/class-coauthors-guest-authors.php:1581 #: php/class-coauthors-wp-list-table.php:173 msgid "First Name" msgstr "Ім’я" #: php/class-coauthors-guest-authors.php:1045 #: php/class-coauthors-guest-authors.php:1582 #: php/class-coauthors-wp-list-table.php:174 msgid "Last Name" msgstr "Прізвище" #: php/class-coauthors-guest-authors.php:1050 msgid "Slug" msgstr "" #: php/class-coauthors-guest-authors.php:1057 #: php/class-coauthors-wp-list-table.php:175 msgid "E-mail" msgstr "" #: php/class-coauthors-guest-authors.php:1063 #: php/class-coauthors-wp-list-table.php:176 msgid "Linked Account" msgstr "" #: php/class-coauthors-guest-authors.php:1068 #: php/class-coauthors-guest-authors.php:1583 msgid "Website" msgstr "Сайт" #: php/class-coauthors-guest-authors.php:1584 msgid "AIM" msgstr "" #: php/class-coauthors-guest-authors.php:1585 msgid "Yahoo IM" msgstr "" #: php/class-coauthors-guest-authors.php:1586 msgid "Jabber / Google Talk" msgstr "" #: php/class-coauthors-guest-authors.php:1074 #: php/class-coauthors-guest-authors.php:1587 msgid "Biographical Info" msgstr "Опис" #. translators: Name of a form field. #: php/class-coauthors-guest-authors.php:1251 msgid "%s is a required field" msgstr "%s — обов’язкове поле" #: php/class-coauthors-guest-authors.php:1257 msgid "user_login cannot duplicate existing guest author or mapped user" msgstr "" #: php/class-coauthors-guest-authors.php:1313 msgid "Guest author does not exist" msgstr "Гостьовий автор не існує" #: php/class-coauthors-guest-authors.php:1328 msgid "Reassignment co-author does not exist" msgstr "" #: php/class-coauthors-guest-authors.php:1368 msgid "No user exists with that ID" msgstr "" #: php/class-coauthors-guest-authors.php:1431 msgid "Edit Profile" msgstr "Редагувати профіль" #: php/class-coauthors-guest-authors.php:1440 msgid "Create Profile" msgstr "Створити обліковий запис" #: php/class-coauthors-wp-list-table.php:23 msgid "Co-Authors" msgstr "" #: php/class-coauthors-wp-list-table.php:24 msgid "Co-Author" msgstr "" #: php/class-coauthors-wp-list-table.php:89 msgid "Show all" msgstr "Показати все" #: php/class-coauthors-wp-list-table.php:90 msgid "With linked account" msgstr "" #: php/class-coauthors-wp-list-table.php:91 msgid "Without linked account" msgstr "" #: php/class-coauthors-wp-list-table.php:242 msgid "Delete" msgstr "Видалити" #: php/class-coauthors-wp-list-table.php:244 msgid "View Posts" msgstr "Переглянути мареріали" #: php/class-coauthors-wp-list-table.php:291 msgid "Filter" msgstr "Фільтрувати" #: php/class-wp-cli.php:231 msgid "Please specify a valid user_login" msgstr "" #: php/class-wp-cli.php:235 msgid "Please specify a valid co-author login" msgstr "" #: template-tags.php:91 msgid " and " msgstr " та " #. translators: Author display name. #: template-tags.php:239 #: template-tags.php:635 msgid "Posts by %s" msgstr "Матеріали автора %s" #. translators: Author display name. #: template-tags.php:409 #: template-tags.php:419 msgid "Visit %s’s website" msgstr "Відвідати %s’s сайт" #. Plugin Name of the plugin msgid "Co-Authors Plus" msgstr "" #. Description of the plugin msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter." msgstr "" #. Author of the plugin msgid "Mohammad Jangda, Daniel Bachhuber, Automattic" msgstr "" #. Plugin URI of the plugin msgid "https://wordpress.org/plugins/co-authors-plus/" msgstr "" #. Author URI of the plugin msgid "https://automattic.com" msgstr "" #. translators: Comment author email address. #: co-authors-plus.php:94 msgid "Email : %s" msgstr "" #. translators: Comment author IP address. #: co-authors-plus.php:98 msgid "Whois : https://whois.arin.net/rest/ip/%s" msgstr "" #: php/class-coauthors-endpoint.php:65 msgid "Text to search." msgstr "" #: php/class-coauthors-endpoint.php:70 msgid "Names of existing co-authors to exclude from search results." msgstr "" #: php/class-coauthors-endpoint.php:113 msgid "Names of co-authors to save." msgstr "" #: php/class-coauthors-guest-authors.php:101 msgid "Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:102 msgid "Set Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:103 msgid "Use Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:104 msgid "Remove Avatar" msgstr "" #: php/class-coauthors-guest-authors.php:486 msgid "Delete Guest Authors" msgstr "" #: php/class-coauthors-guest-authors.php:492 msgid "There are no posts associated with this guest author." msgstr "" #. translators: Count of posts #: php/class-coauthors-guest-authors.php:497 msgid "There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?" msgid_plural "There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: php/class-coauthors-guest-authors.php:800 msgid "There is a WordPress user with the same username as this guest author, please go back and link them in order to update." msgstr "" #: php/class-coauthors-guest-authors.php:1578 msgid "Login Name" msgstr "" #: php/class-coauthors-guest-authors.php:1580 msgid "Email" msgstr "" #: php/class-coauthors-plus.php:198 msgid "All Authors" msgstr "" #: php/class-coauthors-plus.php:465 msgid "Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser" msgstr "" #. translators: Author display name. #: php/class-coauthors-plus.php:1805 msgid "Author: %s" msgstr "" #: php/class-coauthors-wp-list-table.php:164 msgid "No matching co-authors were found." msgstr "" #. translators: 1: Post ID, 2: Comma-separated list of co-author slugs. #: php/class-wp-cli.php:248 msgid "Skipping - Post #%1$d already has co-authors assigned: %2$s" msgstr "" #. translators: 1: Co-author login, 2: Post ID #: php/class-wp-cli.php:258 msgid "Updating - Adding %1$s's byline to post #%2$d" msgstr "" #. translators: Count of posts. #: php/class-wp-cli.php:267 msgid "All done! %d post was affected." msgid_plural "All done! %d posts were affected." msgstr[0] "" msgstr[1] "" msgstr[2] "" #. translators: Guest Author ID. #: php/class-wp-cli.php:902 msgid "-- Author already exists (ID #%s); skipping." msgstr "" #: php/class-wp-cli.php:905 msgid "-- Not found; creating profile." msgstr "" #. translators: The error message. #: php/class-wp-cli.php:922 msgid "-- Failed to create guest author: %s" msgstr "" #. translators: Guest Author ID. #: php/class-wp-cli.php:932 msgid "-- Created as guest author #%s" msgstr "" #: php/integrations/yoast.php:258 msgid "Written by" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:74 msgid "Move Up" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:85 msgid "Move down" msgstr "" #: build/index.js:1 #: src/components/author-selection/index.jsx:102 msgid "Remove Author" msgstr "" #: build/index.js:1 #: src/components/co-authors/index.jsx:189 msgid "Select An Author" msgstr "" lib/select2/select2.css000060400000042422147177171730010745 0ustar00/* Version: 3.2 Timestamp: Mon Sep 10 10:38:04 PDT 2012 */ .select2-container { position: relative; display: inline-block; /* inline-block for ie7 */ zoom: 1; *display: inline; vertical-align: top; } .select2-container, .select2-drop, .select2-search, .select2-search input{ /* Force border-box so that % widths fit the parent container without overlap because of margin/padding. More Info : http://www.quirksmode.org/css/box.html */ -moz-box-sizing: border-box; /* firefox */ -ms-box-sizing: border-box; /* ie */ -webkit-box-sizing: border-box; /* webkit */ -khtml-box-sizing: border-box; /* konqueror */ box-sizing: border-box; /* css3 */ } .select2-container .select2-choice { background-color: #fff; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white)); background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 50%); background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%); background-image: -o-linear-gradient(bottom, #eeeeee 0%, #ffffff 50%); background-image: -ms-linear-gradient(top, #eeeeee 0%, #ffffff 50%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#ffffff', GradientType = 0); background-image: linear-gradient(top, #eeeeee 0%, #ffffff 50%); -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid #aaa; display: block; overflow: hidden; white-space: nowrap; position: relative; height: 26px; line-height: 26px; padding: 0 0 0 8px; color: #444; text-decoration: none; } .select2-container.select2-drop-above .select2-choice { border-bottom-color: #aaa; -webkit-border-radius:0px 0px 4px 4px; -moz-border-radius:0px 0px 4px 4px; border-radius:0px 0px 4px 4px; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.9, white)); background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 90%); background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 90%); background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 90%); background-image: -ms-linear-gradient(top, #eeeeee 0%,#ffffff 90%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 ); background-image: linear-gradient(top, #eeeeee 0%,#ffffff 90%); } .select2-container .select2-choice span { margin-right: 26px; display: block; overflow: hidden; white-space: nowrap; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis; text-overflow: ellipsis; } .select2-container .select2-choice abbr { display: block; position: absolute; right: 26px; top: 8px; width: 12px; height: 12px; font-size: 1px; background: url('select2.png') right top no-repeat; cursor: pointer; text-decoration: none; border:0; outline: 0; } .select2-container .select2-choice abbr:hover { background-position: right -11px; cursor: pointer; } .select2-drop { background: #fff; color: #000; border: 1px solid #aaa; border-top: 0; position: absolute; top: 100%; -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); -moz-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); -o-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); box-shadow: 0 4px 5px rgba(0, 0, 0, .15); z-index: 9999; width:100%; margin-top:-1px; -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } .select2-drop.select2-drop-above { -webkit-border-radius: 4px 4px 0px 0px; -moz-border-radius: 4px 4px 0px 0px; border-radius: 4px 4px 0px 0px; margin-top:1px; border-top: 1px solid #aaa; border-bottom: 0; -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); -moz-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); -o-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); } .select2-container .select2-choice div { -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; background: #ccc; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%); background-image: -ms-linear-gradient(top, #cccccc 0%, #eeeeee 60%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#cccccc', endColorstr = '#eeeeee', GradientType = 0); background-image: linear-gradient(top, #cccccc 0%, #eeeeee 60%); border-left: 1px solid #aaa; position: absolute; right: 0; top: 0; display: block; height: 100%; width: 18px; } .select2-container .select2-choice div b { background: url('select2.png') no-repeat 0 1px; display: block; width: 100%; height: 100%; } .select2-search { display: inline-block; white-space: nowrap; z-index: 10000; min-height: 26px; width: 100%; margin: 0; padding-left: 4px; padding-right: 4px; } .select2-search-hidden { display: block; position: absolute; left: -10000px; } .select2-search input { background: #fff url('select2.png') no-repeat 100% -22px; background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee)); background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%); background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%); background: url('select2.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%); background: url('select2.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%); background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%, #eeeeee 99%); padding: 4px 20px 4px 5px; outline: 0; border: 1px solid #aaa; font-family: sans-serif; font-size: 1em; width:100%; margin:0; height:auto !important; min-height: 26px; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; border-radius: 0; -moz-border-radius: 0; -webkit-border-radius: 0; } .select2-drop.select2-drop-above .select2-search input { margin-top:4px; } .select2-search input.select2-active { background: #fff url('spinner.gif') no-repeat 100%; background: url('spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee)); background: url('spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%); background: url('spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%); background: url('spinner.gif') no-repeat 100%, -o-linear-gradient(bottom, white 85%, #eeeeee 99%); background: url('spinner.gif') no-repeat 100%, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%); background: url('spinner.gif') no-repeat 100%, linear-gradient(top, #ffffff 85%, #eeeeee 99%); } .select2-container-active .select2-choice, .select2-container-active .select2-choices { -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); -moz-box-shadow : 0 0 5px rgba(0,0,0,.3); -o-box-shadow : 0 0 5px rgba(0,0,0,.3); box-shadow : 0 0 5px rgba(0,0,0,.3); border: 1px solid #5897fb; outline: none; } .select2-dropdown-open .select2-choice { border: 1px solid #aaa; border-bottom-color: transparent; -webkit-box-shadow: 0 1px 0 #fff inset; -moz-box-shadow : 0 1px 0 #fff inset; -o-box-shadow : 0 1px 0 #fff inset; box-shadow : 0 1px 0 #fff inset; background-color: #eee; background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee)); background-image: -webkit-linear-gradient(center bottom, white 0%, #eeeeee 50%); background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%); background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%); background-image: -ms-linear-gradient(top, #ffffff 0%,#eeeeee 50%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 ); background-image: linear-gradient(top, #ffffff 0%,#eeeeee 50%); -webkit-border-bottom-left-radius : 0; -webkit-border-bottom-right-radius: 0; -moz-border-radius-bottomleft : 0; -moz-border-radius-bottomright: 0; border-bottom-left-radius : 0; border-bottom-right-radius: 0; } .select2-dropdown-open .select2-choice div { background: transparent; border-left: none; } .select2-dropdown-open .select2-choice div b { background-position: -18px 1px; } /* results */ .select2-results { margin: 4px 4px 4px 0; padding: 0 0 0 4px; position: relative; overflow-x: hidden; overflow-y: auto; max-height: 200px; } .select2-results ul.select2-result-sub { margin: 0 0 0 0; } .select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px } .select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px } .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px } .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px } .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px } .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px } .select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px } .select2-results li { list-style: none; display: list-item; } .select2-results li.select2-result-with-children > .select2-result-label { font-weight: bold; } .select2-results .select2-result-label { padding: 3px 7px 4px; margin: 0; cursor: pointer; } .select2-results .select2-highlighted { background: #3875d7; color: #fff; } .select2-results li em { background: #feffde; font-style: normal; } .select2-results .select2-highlighted em { background: transparent; } .select2-results .select2-no-results, .select2-results .select2-searching, .select2-results .select2-selection-limit { background: #f4f4f4; display: list-item; } /* disabled look for already selected choices in the results dropdown .select2-results .select2-disabled.select2-highlighted { color: #666; background: #f4f4f4; display: list-item; cursor: default; } .select2-results .select2-disabled { background: #f4f4f4; display: list-item; cursor: default; } */ .select2-results .select2-disabled { display: none; } .select2-more-results.select2-active { background: #f4f4f4 url('spinner.gif') no-repeat 100%; } .select2-more-results { background: #f4f4f4; display: list-item; } /* disabled styles */ .select2-container.select2-container-disabled .select2-choice { background-color: #f4f4f4; background-image: none; border: 1px solid #ddd; cursor: default; } .select2-container.select2-container-disabled .select2-choice div { background-color: #f4f4f4; background-image: none; border-left: 0; } /* multiselect */ .select2-container-multi .select2-choices { background-color: #fff; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%); border: 1px solid #aaa; margin: 0; padding: 0; cursor: text; overflow: hidden; height: auto !important; height: 1%; position: relative; } .select2-container-multi .select2-choices { min-height: 26px; } .select2-container-multi.select2-container-active .select2-choices { -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); -moz-box-shadow : 0 0 5px rgba(0,0,0,.3); -o-box-shadow : 0 0 5px rgba(0,0,0,.3); box-shadow : 0 0 5px rgba(0,0,0,.3); border: 1px solid #5897fb; outline: none; } .select2-container-multi .select2-choices li { float: left; list-style: none; } .select2-container-multi .select2-choices .select2-search-field { white-space: nowrap; margin: 0; padding: 0; } .select2-container-multi .select2-choices .select2-search-field input { color: #666; background: transparent !important; font-family: sans-serif; font-size: 100%; height: 15px; padding: 5px; margin: 1px 0; outline: 0; border: 0; -webkit-box-shadow: none; -moz-box-shadow : none; -o-box-shadow : none; box-shadow : none; } .select2-container-multi .select2-choices .select2-search-field input.select2-active { background: #fff url('spinner.gif') no-repeat 100% !important; } .select2-default { color: #999 !important; } .select2-container-multi .select2-choices .select2-search-choice { -webkit-border-radius: 3px; -moz-border-radius : 3px; border-radius : 3px; -moz-background-clip : padding; -webkit-background-clip: padding-box; background-clip : padding-box; background-color: #e4e4e4; filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 ); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); -moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); color: #333; border: 1px solid #aaaaaa; line-height: 13px; padding: 3px 5px 3px 18px; margin: 3px 0 3px 5px; position: relative; cursor: default; } .select2-container-multi .select2-choices .select2-search-choice span { cursor: default; } .select2-container-multi .select2-choices .select2-search-choice-focus { background: #d4d4d4; } .select2-search-choice-close { display: block; position: absolute; right: 3px; top: 4px; width: 12px; height: 13px; font-size: 1px; background: url('select2.png') right top no-repeat; outline: none; } .select2-container-multi .select2-search-choice-close { left: 3px; } .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover { background-position: right -11px; } .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close { background-position: right -11px; } /* disabled styles */ .select2-container-multi.select2-container-disabled .select2-choices{ background-color: #f4f4f4; background-image: none; border: 1px solid #ddd; cursor: default; } .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { background-image: none; background-color: #f4f4f4; border: 1px solid #ddd; padding: 3px 5px 3px 5px; } .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none; } /* end multiselect */ .select2-result-selectable .select2-match, .select2-result-unselectable .select2-result-selectable .select2-match { text-decoration: underline; } .select2-result-unselectable .select2-match { text-decoration: none; } .select2-offscreen { position: absolute; left: -10000px; } /* Retina-ize icons */ @media only screen and (-webkit-min-device-pixel-ratio: 1.5) { .select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b { background-image: url(select2x2.png) !important; background-repeat: no-repeat !important; background-size: 60px 40px !important; } .select2-search input { background-position: 100% -21px !important; } } lib/select2/select2.min.js000060400000105176147177171730011361 0ustar00/* Copyright 2012 Igor Vaynberg Version: 3.2 Timestamp: Mon Sep 10 10:38:04 PDT 2012 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with the License. You may obtain a copy of the License in the LICENSE file, or at: http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ (function(e){"undefined"==typeof e.fn.each2&&e.fn.extend({each2:function(g){for(var i=e([0]),m=-1,s=this.length;++ma.length)return[]; c=a.split(b);d=0;for(j=c.length;dd?c.push(a):(c.push(a.substring(0,d)),c.push(""),c.push(a.substring(d,d+b)),c.push(""),c.push(a.substring(d+b,a.length)))}function C(a){var b, c=0,d=null,j=a.quietMillis||100;return function(h){window.clearTimeout(b);b=window.setTimeout(function(){var b=c+=1,j=a.data,n=a.transport||e.ajax,f=a.traditional||!1,g=a.type||"GET",j=j.call(this,h.term,h.page,h.context);null!==d&&d.abort();d=n.call(null,{url:a.url,dataType:a.dataType,data:j,type:g,traditional:f,success:function(d){bd.tokenSeparators.length)return g;for(;;){h=-1;k=0; for(n=d.tokenSeparators.length;kh)break;f=a.substring(0,h);a=a.substring(h+o.length);if(0=a}};var I=1;G=function(){return I++}; e(document).delegate("body","mousemove",function(a){e.data(document,"select2-lastpos",{x:a.pageX,y:a.pageY})});e(document).ready(function(){e(document).delegate("body","mousedown touchend",function(a){var b=e(a.target).closest("div.select2-container").get(0),c;b?e(document).find("div.select2-container-active").each(function(){this!==b&&e(this).data("select2").blur()}):(b=e(a.target).closest("div.select2-drop").get(0),e(document).find("div.select2-drop-active").each(function(){this!==b&&e(this).data("select2").blur()})); b=e(a.target);c=b.attr("for");"LABEL"===a.target.tagName&&(c&&0\|])/g,"\\$1");this.container.attr("id",this.containerId);var d=!1,j;this.body=function(){!1===d&&(j=a.element.closest("body"),d=!0);return j};a.element.attr("class")!==g&&this.container.addClass(a.element.attr("class").replace(/validate\[[\S ]+] ?/,""));this.container.css(v(a.containerCss));this.container.addClass(v(a.containerCssClass));this.opts.element.data("select2",this).hide().before(this.container);this.container.data("select2", this);this.dropdown=this.container.find(".select2-drop");this.dropdown.addClass(v(a.dropdownCssClass));this.dropdown.data("select2",this);this.results=b=this.container.find(".select2-results");this.search=c=this.container.find("input.select2-input");c.attr("tabIndex",this.opts.element.attr("tabIndex"));this.resultsPage=0;this.context=null;this.initContainer();this.initContainerWidth();this.results.bind("mousemove",function(a){var b=e.data(document,"select2-lastpos");(b===g||b.x!==a.pageX||b.y!==a.pageY)&& e(a.target).trigger("mousemove-filtered",a)});this.dropdown.delegate(".select2-results","mousemove-filtered",this.bind(this.highlightUnderEvent));var h=this.results,f=A(80,function(a){h.trigger("scroll-debounced",a)});h.bind("scroll",function(a){0<=i(a.target,h.get())&&f(a)});this.dropdown.delegate(".select2-results","scroll-debounced",this.bind(this.loadMoreIfNeeded));e.fn.mousewheel&&b.mousewheel(function(a,c,d,e){c=b.scrollTop();0=c-e?(b.scrollTop(0),l(a)):0>e&&b.get(0).scrollHeight-b.scrollTop()+ e<=b.height()&&(b.scrollTop(b.get(0).scrollHeight-b.height()),l(a))});c.bind("keydown",function(){e.data(c,"keyup-change-value")===g&&e.data(c,"keyup-change-value",c.val())});c.bind("keyup",function(){var a=e.data(c,"keyup-change-value");a!==g&&c.val()!==a&&(e.removeData(c,"keyup-change-value"),c.trigger("keyup-change"))});c.bind("keyup-change",this.bind(this.updateResults));c.bind("focus",function(){c.addClass("select2-focused");" "===c.val()&&c.val("")});c.bind("blur",function(){c.removeClass("select2-focused")}); this.dropdown.delegate(".select2-results","mouseup",this.bind(function(a){0 element.");});a=e.extend({},{populateResults:function(b, c,d){var f,n=this.opts.id,o=this;f=function(b,c,j){var h,l,i,m,r,p,q;h=0;for(l=b.length;h0;p=e("
  • ");p.addClass("select2-results-dept-"+j);p.addClass("select2-result");p.addClass(m?"select2-result-selectable":"select2-result-unselectable");r&&p.addClass("select2-result-with-children");p.addClass(o.opts.formatResultCssClass(i));m=e("
    ");m.addClass("select2-result-label");q=a.formatResult(i,m,d);q!==g&&m.html(o.opts.escapeMarkup(q)); p.append(m);if(r){r=e("
      ");r.addClass("select2-result-sub");f(i.children,r,j+1);p.append(r)}p.data("select2-data",i);c.append(p)}};f(c,b,0)}},e.fn.select2.defaults,a);"function"!==typeof a.id&&(d=a.id,a.id=function(a){return a[d]});if(c)a.query=this.bind(function(a){var c={results:[],more:false},d=a.term,f,n,o;o=function(b,c){var e;if(b.is("option"))a.matcher(d,b.text(),b)&&c.push({id:b.attr("value"),text:b.text(),element:b.get(),css:b.attr("class")});else if(b.is("optgroup")){e={text:b.attr("label"), children:[],element:b.get(),css:b.attr("class")};b.children().each2(function(a,b){o(b,e.children)});e.children.length>0&&c.push(e)}};f=b.children();if(this.getPlaceholder()!==g&&f.length>0){n=f[0];e(n).text()===""&&(f=f.not(n))}f.each2(function(a,b){o(b,c.results)});a.callback(c)}),a.id=function(a){return a.id},a.formatResultCssClass=function(a){return a.css};else if(!("query"in a))if("ajax"in a){if((c=a.element.data("ajax-url"))&&0=this.body().scrollTop(),k=this.dropdown.hasClass("select2-drop-above"),n;"static"!==this.body().css("position")&& (n=this.body().offset(),b-=n.top,f-=n.left);k?(k=!0,!g&&j&&(k=!1)):(k=!1,!j&&g&&(k=!0));k?(b=a.top-d,this.container.addClass("select2-drop-above"),this.dropdown.addClass("select2-drop-above")):(this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above"));a=e.extend({top:b,left:f,width:c},v(this.opts.dropdownCss));this.dropdown.css(a)},shouldOpen:function(){var a;if(this.opened())return!1;a=e.Event("open");this.opts.element.trigger(a);return!a.isDefaultPrevented()}, clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above");this.dropdown.removeClass("select2-drop-above")},open:function(){if(!this.shouldOpen())return!1;window.setTimeout(this.bind(this.opening),1);return!0},opening:function(){var a=this.containerId,b=this.containerSelector,c="scroll."+a,d="resize."+a;this.container.parents().each(function(){e(this).bind(c,function(){var a=e(b);0==a.length&&e(this).unbind(c);a.select2("close")})});e(window).bind(d,function(){var a= e(b);0==a.length&&e(window).unbind(d);a.select2("close")});this.clearDropdownAlignmentPreference();" "===this.search.val()&&this.search.val("");this.container.addClass("select2-dropdown-open").addClass("select2-container-active");this.updateResults(!0);this.dropdown[0]!==this.body().children().last()[0]&&this.dropdown.detach().appendTo(this.body());this.dropdown.show();this.positionDropdown();this.dropdown.addClass("select2-drop-active");this.ensureHighlightVisible();this.focusSearch()},close:function(){if(this.opened()){var a= this;this.container.parents().each(function(){e(this).unbind("scroll."+a.containerId)});e(window).unbind("resize."+this.containerId);this.clearDropdownAlignmentPreference();this.dropdown.hide();this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active");this.results.empty();this.clearSearch();this.opts.element.trigger(e.Event("close"))}},clearSearch:function(){},ensureHighlightVisible:function(){var a=this.results,b,c,d,f;c=this.highlight();0>c||(0==c?a.scrollTop(0): (b=a.find(".select2-result-selectable"),d=e(b[c]),f=d.offset().top+d.outerHeight(),c===b.length-1&&(b=a.find("li.select2-more-results"),0b&&a.scrollTop(a.scrollTop()+(f-b)),d=d.offset().top-a.offset().top,0>d&&a.scrollTop(a.scrollTop()+d)))},moveHighlight:function(a){for(var b=this.results.find(".select2-result-selectable"),c=this.highlight();-1=b.length&&(a=b.length-1);0>a&&(a=0);b.removeClass("select2-highlighted");e(b[a]).addClass("select2-highlighted");this.ensureHighlightVisible()},countSelectableResults:function(){return this.results.find(".select2-result-selectable").not(".select2-disabled").length}, highlightUnderEvent:function(a){a=e(a.target).closest(".select2-result-selectable");if(0=c&&(b.addClass("select2-active"),this.opts.query({term:f,page:d,context:g,matcher:this.opts.matcher,callback:this.bind(function(c){e.opened()&&(e.opts.populateResults.call(this,a,c.results,{term:f,page:d,context:g}),!0===c.more?(b.detach().appendTo(a).text(e.opts.formatLoadMore(d+1)),window.setTimeout(function(){e.loadMoreIfNeeded()},10)):b.remove(),e.positionDropdown(),e.resultsPage=d)})})))},tokenize:function(){},updateResults:function(a){function b(){f.scrollTop(0);d.removeClass("select2-active"); k.positionDropdown()}function c(a){f.html(k.opts.escapeMarkup(a));b()}var d=this.search,f=this.results,h=this.opts,i,k=this;if(!(!0!==a&&(!1===this.showSearchInput||!this.opened()))){d.addClass("select2-active");if(1<=h.maximumSelectionSize&&(i=this.data(),e.isArray(i)&&i.length>=h.maximumSelectionSize&&u(h.formatSelectionTooBig,"formatSelectionTooBig"))){c("
    • "+h.formatSelectionTooBig(h.maximumSelectionSize)+"
    • ");return}d.val().length"+h.formatInputTooShort(d.val(),h.minimumInputLength)+""):(c("
    • "+h.formatSearching()+"
    • "),i=this.tokenize(),i!=g&&null!=i&&d.val(i),this.resultsPage=1,h.query({term:d.val(),page:this.resultsPage,context:null,matcher:h.matcher,callback:this.bind(function(i){var l;this.opened()&&((this.context=i.context===g?null:i.context,this.opts.createSearchChoice&&""!==d.val()&&(l=this.opts.createSearchChoice.call(null, d.val(),i.results),l!==g&&null!==l&&k.id(l)!==g&&null!==k.id(l)&&0===e(i.results).filter(function(){return m(k.id(this),k.id(l))}).length&&i.results.unshift(l)),0===i.results.length&&u(h.formatNoMatches,"formatNoMatches"))?c("
    • "+h.formatNoMatches(d.val())+"
    • "):(f.empty(),k.opts.populateResults.call(this,f,i.results,{term:d.val(),page:this.resultsPage,context:null}),!0===i.more&&u(h.formatLoadMore,"formatLoadMore")&&(f.append("
    • "+k.opts.escapeMarkup(h.formatLoadMore(this.resultsPage))+ "
    • "),window.setTimeout(function(){k.loadMoreIfNeeded()},10)),this.postprocessResults(i,a),b()))})}))}},cancel:function(){this.close()},blur:function(){this.close();this.container.removeClass("select2-container-active");this.dropdown.removeClass("select2-drop-active");this.search[0]===document.activeElement&&this.search.blur();this.clearSearch();this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){this.search.show();this.search.focus(); window.setTimeout(this.bind(function(){this.search.show();this.search.focus();this.search.val(this.search.val())}),10)},selectHighlighted:function(){var a=this.highlight(),b=this.results.find(".select2-highlighted").not(".select2-disabled"),c=b.closest(".select2-result-selectable").data("select2-data");c&&(b.addClass("select2-disabled"),this.highlight(a),this.onSelect(c))},getPlaceholder:function(){return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")|| this.opts.placeholder},initContainerWidth:function(){var a=function(){var a,c,d,f;if("off"===this.opts.width)return null;if("element"===this.opts.width)return 0===this.opts.element.outerWidth()?"auto":this.opts.element.outerWidth()+"px";if("copy"===this.opts.width||"resolve"===this.opts.width){a=this.opts.element.attr("style");if(a!==g){a=a.split(";");d=0;for(f=a.length;d
      ",{"class":"select2-container"}).html("
      ")}, opening:function(){this.search.show();this.parent.opening.apply(this,arguments);this.dropdown.removeClass("select2-offscreen")},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.dropdown.removeAttr("style").addClass("select2-offscreen").insertAfter(this.selection).show())},focus:function(){this.close();this.selection.focus()},isFocused:function(){return this.selection[0]===document.activeElement},cancel:function(){this.parent.cancel.apply(this,arguments);this.selection.focus()}, initContainer:function(){var a,b=this.dropdown;this.selection=a=this.container.find(".select2-choice");this.search.bind("keydown",this.bind(function(a){if(this.enabled)if(a.which===f.PAGE_UP||a.which===f.PAGE_DOWN)l(a);else if(this.opened())switch(a.which){case f.UP:case f.DOWN:this.moveHighlight(a.which===f.UP?-1:1);l(a);break;case f.TAB:case f.ENTER:this.selectHighlighted();l(a);break;case f.ESC:this.cancel(a),l(a)}else a.which===f.TAB||f.isControl(a)||f.isFunctionKey(a)||a.which===f.ESC||!1=== this.opts.openOnEnter&&a.which===f.ENTER||this.open()}));this.search.bind("focus",this.bind(function(){this.selection.attr("tabIndex","-1")}));this.search.bind("blur",this.bind(function(){this.opened()||this.container.removeClass("select2-container-active");window.setTimeout(this.bind(function(){this.selection.attr("tabIndex",this.opts.element.attr("tabIndex"))}),10)}));a.bind("mousedown",this.bind(function(){this.opened()?(this.close(),this.selection.focus()):this.enabled&&this.open()}));b.bind("mousedown", this.bind(function(){this.search.focus()}));a.bind("focus",this.bind(function(){this.container.addClass("select2-container-active");this.search.attr("tabIndex","-1")}));a.bind("blur",this.bind(function(){this.opened()||this.container.removeClass("select2-container-active");window.setTimeout(this.bind(function(){this.search.attr("tabIndex",this.opts.element.attr("tabIndex"))}),10)}));a.bind("keydown",this.bind(function(a){if(this.enabled)if(a.which===f.PAGE_UP||a.which===f.PAGE_DOWN)l(a);else if(!(a.which=== f.TAB||f.isControl(a)||f.isFunctionKey(a)||a.which===f.ESC)&&!(!1===this.opts.openOnEnter&&a.which===f.ENTER))if(a.which==f.DELETE)this.opts.allowClear&&this.clear();else{this.open();if(a.which!==f.ENTER&&!(48>a.which)){var b=String.fromCharCode(a.which).toLowerCase();a.shiftKey&&(b=b.toUpperCase());this.search.focus();this.search.val(b)}l(a)}}));a.delegate("abbr","mousedown",this.bind(function(a){this.enabled&&(this.clear(),l(a),this.close(),this.triggerChange(),this.selection.focus())}));this.setPlaceholder(); this.search.bind("focus",this.bind(function(){this.container.addClass("select2-container-active")}))},clear:function(){this.opts.element.val("");this.selection.find("span").empty();this.selection.removeData("select2-data");this.setPlaceholder()},initSelection:function(){if(""===this.opts.element.val())this.close(),this.setPlaceholder();else{var a=this;this.opts.initSelection.call(null,this.opts.element,function(b){b!==g&&null!==b&&(a.updateSelection(b),a.close(),a.setPlaceholder())})}},prepareOpts:function(){var a= this.parent.prepareOpts.apply(this,arguments);"select"===a.element.get(0).tagName.toLowerCase()&&(a.initSelection=function(a,c){var d=a.find(":selected");e.isFunction(c)&&c({id:d.attr("value"),text:d.text()})});return a},setPlaceholder:function(){var a=this.getPlaceholder();""===this.opts.element.val()&&a!==g&&!(this.select&&""!==this.select.find("option:first").text())&&(this.selection.find("span").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.selection.find("abbr").hide())}, postprocessResults:function(a,b){var c=0,d=this,f=!0;this.results.find(".select2-result-selectable").each2(function(a,b){if(m(d.id(b.data("select2-data")),d.opts.element.val()))return c=a,!1});this.highlight(c);!0===b&&(f=this.showSearchInput=F(a.results)>=this.opts.minimumResultsForSearch,this.dropdown.find(".select2-search")[f?"removeClass":"addClass"]("select2-search-hidden"),e(this.dropdown,this.container)[f?"addClass":"removeClass"]("select2-with-searchbox"))},onSelect:function(a){var b=this.opts.element.val(); this.opts.element.val(this.id(a));this.updateSelection(a);this.close();this.selection.focus();m(b,this.id(a))||this.triggerChange()},updateSelection:function(a){var b=this.selection.find("span");this.selection.data("select2-data",a);b.empty();a=this.opts.formatSelection(a,b);a!==g&&b.append(this.opts.escapeMarkup(a));this.selection.removeClass("select2-default");this.opts.allowClear&&this.getPlaceholder()!==g&&this.selection.find("abbr").show()},val:function(){var a,b=null,c=this;if(0===arguments.length)return this.opts.element.val(); a=arguments[0];if(this.select)this.select.val(a).find(":selected").each2(function(a,c){b={id:c.attr("value"),text:c.text()};return!1}),this.updateSelection(b),this.setPlaceholder();else{if(this.opts.initSelection===g)throw Error("cannot call val() if initSelection() is not defined");a?(this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){c.opts.element.val(!a?"":c.id(a));c.updateSelection(a);c.setPlaceholder()})):this.clear()}},clearSearch:function(){this.search.val("")}, data:function(a){var b;if(0===arguments.length)return b=this.selection.data("select2-data"),b==g&&(b=null),b;!a||""===a?this.clear():(this.opts.element.val(!a?"":this.id(a)),this.updateSelection(a))}});z=x(w,{createContainer:function(){return e("
      ",{"class":"select2-container select2-container-multi"}).html("
      ")}, prepareOpts:function(){var a=this.parent.prepareOpts.apply(this,arguments);"select"===a.element.get(0).tagName.toLowerCase()&&(a.initSelection=function(a,c){var d=[];a.find(":selected").each2(function(a,b){d.push({id:b.attr("value"),text:b.text()})});e.isFunction(c)&&c(d)});return a},initContainer:function(){var a;this.searchContainer=this.container.find(".select2-search-field");this.selection=a=this.container.find(".select2-choices");this.search.bind("keydown",this.bind(function(b){if(this.enabled){if(b.which=== f.BACKSPACE&&""===this.search.val()){this.close();var c;c=a.find(".select2-search-choice-focus");if(0i(d.id(this),b)&&(b.push(d.id(this)),c.push(this))});a=c;this.selection.find(".select2-search-choice").remove();e(a).each(function(){d.addSelectedChoice(this)});d.postprocessResults()},tokenize:function(){var a=this.search.val(),a=this.opts.tokenizer(a,this.data(),this.bind(this.onSelect), this.opts);null!=a&&a!=g&&(this.search.val(a),0
      "), c=this.id(a),d=this.getVal(),f;f=this.opts.formatSelection(a,b);b.find("div").replaceWith("
      "+this.opts.escapeMarkup(f)+"
      ");b.find(".select2-search-choice-close").bind("mousedown",l).bind("click dblclick",this.bind(function(a){this.enabled&&(e(a.target).closest(".select2-search-choice").fadeOut("fast",this.bind(function(){this.unselect(e(a.target));this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");this.close();this.focusSearch()})).dequeue(), l(a))})).bind("focus",this.bind(function(){this.enabled&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))}));b.data("select2-data",a);b.insertBefore(this.searchContainer);d.push(c);this.setVal(d)},unselect:function(a){var b=this.getVal(),c,d,a=a.closest(".select2-search-choice");if(0===a.length)throw"Invalid argument: "+a+". Must be .select2-search-choice";c=a.data("select2-data");d=i(this.id(c),b);0<=d&&(b.splice(d,1),this.setVal(b),this.select&& this.postprocessResults());a.remove();this.triggerChange({removed:c})},postprocessResults:function(){var a=this.getVal(),b=this.results.find(".select2-result-selectable"),c=this.results.find(".select2-result-with-children"),d=this;b.each2(function(b,c){var e=d.id(c.data("select2-data"));0<=i(e,a)?c.addClass("select2-disabled").removeClass("select2-result-selectable"):c.removeClass("select2-disabled").addClass("select2-result-selectable")});c.each2(function(a,b){0==b.find(".select2-result-selectable").length? b.addClass("select2-disabled"):b.removeClass("select2-disabled")});b.each2(function(a,b){if(!b.hasClass("select2-disabled")&&b.hasClass("select2-result-selectable"))return d.highlight(0),!1})},resizeSearch:function(){var a,b,c,d,f=this.search.outerWidth()-this.search.width();a=this.search;q||(c=a[0].currentStyle||window.getComputedStyle(a[0],null),q=e("
      ").css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle, fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),e("body").append(q));q.text(a.val());a=q.width()+10;b=this.search.offset().left;c=this.selection.width();d=this.selection.offset().left;b=c-(b-d)-f;bb&&(b=c-f);this.search.width(b)},getVal:function(){var a;if(this.select)return a=this.select.val(),null===a?[]:a;a=this.opts.element.val();return s(a,this.opts.separator)},setVal:function(a){var b;this.select?this.select.val(a):(b= [],e(a).each(function(){0>i(this,b)&&b.push(this)}),this.opts.element.val(0===b.length?"":b.join(this.opts.separator)))},val:function(){var a,b=[],c=this;if(0===arguments.length)return this.getVal();if(a=arguments[0])if(this.setVal(a),this.select)this.select.find(":selected").each(function(){b.push({id:e(this).attr("value"),text:e(this).text()})}),this.updateSelection(b);else{if(this.opts.initSelection===g)throw Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element, function(a){var b=e(a).map(c.id);c.setVal(b);c.updateSelection(a);c.clearSearch()})}else this.opts.element.val(""),this.updateSelection([]);this.clearSearch()},onSortStart:function(){if(this.select)throw Error("Sorting of elements is not supported when attached to instead.");this.search.width(0);this.searchContainer.hide()},onSortEnd:function(){var a=[],b=this;this.searchContainer.show();this.searchContainer.appendTo(this.searchContainer.parent());this.resizeSearch(); this.selection.find(".select2-search-choice").each(function(){a.push(b.opts.id(e(this).data("select2-data")))});this.setVal(a);this.triggerChange()},data:function(a){var b=this,c;if(0===arguments.length)return this.selection.find(".select2-search-choice").map(function(){return e(this).data("select2-data")}).get();a||(a=[]);c=e.map(a,function(a){return b.opts.id(a)});this.setVal(c);this.updateSelection(a);this.clearSearch()}});e.fn.select2=function(){var a=Array.prototype.slice.call(arguments,0),b, c,d,f,h="val destroy opened open close focus isFocused container onSortStart onSortEnd enable disable positionDropdown data".split(" ");this.each(function(){if(0===a.length||"object"===typeof a[0])b=0===a.length?{}:e.extend({},a[0]),b.element=e(this),"select"===b.element.get(0).tagName.toLowerCase()?f=b.element.attr("multiple"):(f=b.multiple||!1,"tags"in b&&(b.multiple=f=!0)),c=f?new z:new y,c.init(b);else if("string"===typeof a[0]){if(0>i(a[0],h))throw"Unknown method: "+a[0];d=g;c=e(this).data("select2"); if(c!==g&&(d="container"===a[0]?c.container:c[a[0]].apply(c,a.slice(1)),d!==g))return!1}else throw"Invalid arguments to select2 plugin: "+a;});return d===g?this:d};e.fn.select2.defaults={width:"copy",closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c){b=[];B(a.text,c.term,b);return b.join("")},formatSelection:function(a){return a?a.text:g},formatResultCssClass:function(){return g},formatNoMatches:function(){return"No matches found"}, formatInputTooShort:function(a,b){return"Please enter "+(b-a.length)+" more characters"},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results..."},formatSearching:function(){return"Searching..."},minimumResultsForSearch:0,minimumInputLength:0,maximumSelectionSize:0,id:function(a){return a.id},matcher:function(a,b){return 0<=b.toUpperCase().indexOf(a.toUpperCase())},separator:",",tokenSeparators:[],tokenizer:H, escapeMarkup:function(a){return a&&"string"===typeof a?a.replace(/&/g,"&"):a},blurOnChange:!1};window.Select2={query:{ajax:C,local:D,tags:E},util:{debounce:A,markMatch:B},"class":{"abstract":w,single:y,multi:z}}}})(jQuery); lib/select2/select2.png000060400000001145147177171730010736 0ustar00PNG  IHDR<(,IDATxKaJ.b]*(Ɉvd <P!RqTСH#GyRدHt0L>9,m)yuم};)IJ,Q(XV &OhF! { n{,%]אGc5x >@3 &2 %C,bE؀u9=T67)E " loy[eCÚ & Dm# QȼŪj ބv@ TeMܽ;G9b}1̟ǾT: hC f G+WwXx$V.E(<`Q¶{a~(|sjF<\%k'KAT+y ^pOI>. %{'cJkx!x'?lKSoZ_- J.tp7AL=[/AደUrwB!xJ~~og S\E` AC5P"qabl cP$#]`Ӓl]pZr`ӂӒl\p(I+%x`@11&(mWIENDB`lib/select2/spinner.gif000060400000003471147177171730011040 0ustar00GIF89aFFFzzzXXX$$$666hhh! NETSCAPE2.0!Created with ajaxload.info! ,w  !DBAH¬aD@ ^AXP@"UQ# B\; 1 o:2$v@ $|,3 _# d53" s5 e!! ,v i@e9DAA/`ph$Ca%@ pHxFuSx# .݄YfL_" p 3BW ]|L \6{|z87[7!! ,x  e9DE"2r,qPj`8@8bH, *0- mFW9LPE3+ (B"  f{*BW_/ @_$~Kr7Ar7!! ,v 4e9!H"* Q/@-4ép4R+-pȧ`P(6᠝U/  *,)(+/]"lO/*Ak K]A~666!! ,l ie9"* -80H=N; TEqe UoK2_WZ݌V1jgWe@tuH//w`?f~#6#!! ,~ ,e9"* ; pR%#0` 'c(J@@/1i4`VBV u}"caNi/ ] ))-Lel  mi} me[+!! ,y Ie9"M6*¨"7E͖@G((L&pqj@Z %@wZ) pl( ԭqu*R&c `))( s_J>_\'Gm7$+!! ,w Ie9*, (*(B5[1 ZIah!GexzJ0e6@V|U4Dm%$͛p \Gx }@+| =+ 1- Ea5l)+!! ,y )䨞'AKڍ,E\(l&;5 5D03a0--ÃpH4V % i p[R"| #  6iZwcw*!! ,y )䨞,K*0 a;׋аY8b`4n ¨Bbbx,( Ƚ  % >  2*i* /:+$v*!! ,u )䨞l[$ Jq[q 3`Q[5:IX!0rAD8 CvHPfiiQAP@pC %D PQ46  iciNj0w )#!! ,y ). q ,G Jr(J8 C*B,&< h W~-`, ,>; 8RN<, <1T] c' qk$ @)#!;php/api/endpoints/class-coauthors-controller.php000060400000024135147177171730016133 0ustar00coauthors_plus = $coauthors_plus; } /** * Register Rest Routes * * @since 3.6.0 */ public function register_routes(): void { $this->register_coauthors_route(); $this->register_coauthor_route(); } /** * Register Co-Authors Route * * Provide a post ID as an integer to retrieve an array of associated co-authors. * * Example: `/wp-json/coauthors/v1/coauthors?post_id=11111` * * @since 3.6.0 */ public function register_coauthors_route(): void { register_rest_route( 'coauthors/v1', '/coauthors', array( 'args' => array( 'post_id' => array( 'description' => __( 'Unique identifier for a post.', 'co-authors-plus' ), 'type' => 'integer', 'required' => true, 'validate_callback' => function( $post_id ): bool { return 0 !== absint( $post_id ); }, 'sanitize_callback' => function( $post_id ): int { return absint( $post_id ); }, ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => '__return_true' ), ) ); } /** * Register Co-Author Route * * Provide a user nicename as a hyphen-separated string to retrieve a single co-author. * * Example: `/wp-json/coauthors/v1/coauthors/user-nicename` * * @since 3.6.0 */ public function register_coauthor_route(): void { register_rest_route( 'coauthors/v1', '/coauthors/(?P[\w-]+)', array( 'args' => array( 'user_nicename' => array( 'description' => __( 'Nicename / slug for co-author.', 'co-authors-plus' ), 'type' => 'string', 'required' => true, 'validate_callback' => function( $slug ): bool { return is_string( $slug ); }, 'sanitize_callback' => function( $slug ) { return sanitize_title( $slug ); }, ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => '__return_true', ), ) ); } /** * Get Item * * @since 3.6.0 * @param WP_REST_Request $request * @return WP_REST_Response|WP_Error */ public function get_item( $request ) { $coauthor = $this->coauthors_plus->get_coauthor_by( 'user_nicename', $request->get_param( 'user_nicename' ) ); if ( ! is_object( $coauthor ) ) { return new WP_Error( 'rest_not_found', __( 'Sorry, we could not find that co-author.', 'co-authors-plus' ), array( 'status' => 404 ) ); } if ( ! self::is_coauthor( $coauthor ) ) { return new WP_Error( 'rest_unusable_data', __( 'Sorry, an unusable response was produced.', 'co-authors-plus' ), array( 'status' => 404 ) ); } return self::prepare_item_for_response( $coauthor, $request ); } /** * Is Valid CoAuthor * * @since 3.6.0 * @param WP_User|stdClass $coauthor */ public static function is_coauthor( $coauthor ): bool { return $coauthor instanceof \WP_User || self::is_guest_author( $coauthor ); } /** * Is Guest Author * * @since 3.6.0 * @param WP_User|stdClass $coauthor */ public static function is_guest_author( $coauthor ): bool { return property_exists( $coauthor, 'type' ) && 'guest-author' === $coauthor->type; } /** * Get Items * * @since 3.6.0 * @param WP_REST_Request $request * @return WP_REST_Response|WP_Error */ public function get_items( $request ) { $coauthors = get_coauthors( $request->get_param( 'post_id' ) ); if ( ! is_array( $coauthors ) ) { return new WP_Error( 'rest_unusable_data', __( 'Sorry, an unusable response was produced.', 'co-authors-plus' ), array( 'status' => 406 ) ); } return rest_ensure_response( array_map( function( $author ) use ( $request ) : array { return $this->prepare_response_for_collection( $this->prepare_item_for_response( $author, $request ) ); }, $coauthors ) ); } /** * Retrieves the CoAuthor schema, conforming to JSON Schema. * * @since 3.6.0 * @return array Item schema data. */ public function get_item_schema(): array { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'coauthor', 'type' => 'object', 'properties' => array( 'id' => array( 'description' => __( 'Either user ID or guest author ID.', 'co-authors-plus' ), 'type' => 'integer', 'context' => array( 'view' ), 'readonly' => true, ), 'display_name' => array( 'description' => __( 'Author name for display.', 'co-authors-plus' ), 'type' => 'string', 'context' => array( 'view' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'Author description.', 'co-authors-plus' ), 'type' => 'object', 'context' => array( 'view' ), 'readonly' => true, 'properties' => array( 'raw' => array( 'description' => __( 'Author description as stored in database.', 'co-authors-plus' ), 'type' => 'string', 'context' => array( 'view' ), 'readonly' => true, ), 'rendered' => array( 'description' => __( 'Author description as rendered in HTML content.', 'co-authors-plus' ), 'type' => 'string', 'context' => array( 'view' ), 'readonly' => true, ), ), ), 'user_nicename' => array( 'description' => __( 'Unique author slug.', 'co-authors-plus' ), 'type' => 'string', 'context' => array( 'view' ), 'readonly' => true, ), 'link' => array( 'description' => __( 'URL of author archive.', 'co-authors-plus' ), 'type' => 'string', 'context' => array( 'view' ), 'readonly' => true, ), 'featured_media' => array( 'description' => __( 'ID of guest author featured image.', 'co-authors-plus' ), 'type' => 'integer', 'context' => array( 'view' ), 'readonly' => true, ), ), ); if ( get_option( 'show_avatars' ) ) { $schema['properties']['avatar_urls'] = array( 'description' => __( 'URL for author avatar.', 'co-authors-plus' ), 'type' => 'object', 'context' => array( 'view' ), 'readonly' => true, ); } // Take a snapshot of which fields are in the schema pre-filtering. $schema_fields = array_keys( $schema['properties'] ); $schema = apply_filters( 'rest_coauthors_item_schema', $schema ); // Emit a _doing_it_wrong warning if user tries to add new properties using this filter. $new_fields = array_diff( array_keys( $schema['properties'] ), $schema_fields ); if ( count( $new_fields ) > 0 ) { _doing_it_wrong( __METHOD__, sprintf( /* translators: %s: register_rest_field */ esc_html__( 'Please use %s to add new schema properties.', 'co-authors-plus' ), 'register_rest_field' ), '5.4.0' ); } $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Prepare Item For Response * * @since 3.6.0 * @param stdClass|WP_User $author * @param WP_REST_Request $request * @return WP_REST_Response|WP_Error */ public function prepare_item_for_response( $author, $request ) { $fields = $this->get_fields_for_response( $request ); if ( $author instanceof \WP_User ) { $author = $author->data; $author->description = get_user_meta( $author->ID, 'description', true ); } $data = array(); if ( rest_is_field_included( 'id', $fields ) ) { $data['id'] = (int) $author->ID; } if ( rest_is_field_included( 'avatar_urls', $fields ) ) { $data['avatar_urls'] = rest_get_avatar_urls( $author->ID ); } if ( rest_is_field_included( 'description', $fields ) ) { $data['description'] = array(); } if ( rest_is_field_included( 'description.raw', $fields ) ) { $data['description']['raw'] = (string) $author->description; } if ( rest_is_field_included( 'description.rendered', $fields ) ) { $data['description']['rendered'] = wp_kses_post( wpautop( wptexturize( (string) $author->description ) ) ); } if ( rest_is_field_included( 'display_name', $fields ) ) { $data['display_name'] = (string) $author->display_name; } if ( rest_is_field_included( 'link', $fields ) ) { $data['link'] = (string) get_author_posts_url( $author->ID, $author->user_nicename ); } if ( rest_is_field_included( 'featured_media', $fields ) ) { if ( self::is_guest_author( $author ) ) { $data['featured_media'] = (int) get_post_thumbnail_id( $author->ID ); } else { $data['featured_media'] = 0; } } if ( rest_is_field_included( 'user_nicename', $fields ) ) { $data['user_nicename'] = (string) $author->user_nicename; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); /** * Filters the post data for a REST API response. * * @since 3.6.0 * @param WP_REST_Response $response The response object. * @param stdClass|WP_User $author * @param WP_REST_Request $request Request object. */ return apply_filters( 'rest_prepare_coauthor', $response, $author, $request ); } } php/blocks/block-coauthor-avatar/class-block-coauthor-avatar.php000060400000006030147177171730021016 0ustar00 array( __CLASS__, 'render_block' ), ) ); } /** * Render Block * * @since 3.6.0 * @param array $attributes * @param string $content * @param WP_Block $block * @return string */ public static function render_block( array $attributes, string $content, WP_Block $block ): string { $author = $block->context['co-authors-plus/author'] ?? array(); $layout = $block->context['co-authors-plus/layout'] ?? ''; if ( empty( $author ) ) { return ''; } $avatar_urls = $author['avatar_urls'] ?? array(); if ( empty( $avatar_urls ) ) { return ''; } $display_name = esc_html( $author['display_name'] ?? '' ); $link = esc_url( $author['link'] ?? '' ); $is_link = '' !== $link && $attributes['isLink'] ?? false; $rel = $attributes['rel'] ?? ''; $size = $attributes['size'] ?? array_key_first( $avatar_urls ); $align = esc_attr( $attributes['align'] ?? '' ); $srcset = array_map( function( $size, $url ) { return "{$url} {$size}w"; }, array_keys( $avatar_urls ), array_values( $avatar_urls ) ); $image_attributes = array_merge( array( 'src' => $avatar_urls[ $size ], 'width' => $size, 'height' => $size, 'sizes' => "{$size}px", 'srcset' => implode( ', ', $srcset ), 'style' => '', 'class' => '', ), get_block_core_post_featured_image_border_attributes( $attributes ) ); $style_attribute_key_map = array( 'verticalAlign' => 'vertical-align', ); $styles = array_map( function( string $key, string $style ) use ( $attributes ) : string { if ( empty( $attributes[ $key ] ) ) { return ''; } return sprintf( '%s;', safecss_filter_attr( "{$style}:{$attributes[$key]}" ) ); }, array_keys( $style_attribute_key_map ), array_values( $style_attribute_key_map ) ); $image_attributes['style'] .= implode( '', $styles ); $image = Templating::render_self_closing_element( 'img', Templating::render_attributes( $image_attributes ) ); if ( $is_link ) { $link_attributes = Templating::render_attributes( array( 'href' => $link, 'rel' => $rel, 'title' => sprintf( __( 'Posts by %s', 'co-authors-plus' ), $display_name ), ) ); $inner_content = Templating::render_element( 'a', $link_attributes, $image ); } else { $inner_content = $image; } return Templating::render_element( 'div', get_block_wrapper_attributes( array( 'class' => ( 'default' !== $layout && ! empty( $align ) && 'none' !== $align ) ? "align{$align}" : '' ) ), $inner_content ); } } php/blocks/block-coauthor-description/class-block-coauthor-description.php000060400000003266147177171730023140 0ustar00 array( __CLASS__, 'render_block' ), ) ); } /** * Render Block * * @since 3.6.0 * @param array $attributes * @param string $content * @param WP_Block $block * @return string */ public static function render_block( array $attributes, string $content, WP_Block $block ): string { $author = $block->context['co-authors-plus/author'] ?? array(); if ( empty( $author ) ) { return ''; } $description = $author['description']['raw'] ?? ''; if ( '' === $description ) { return ''; } return Templating::render_element( 'div', get_block_wrapper_attributes( self::get_custom_block_wrapper_attributes( $attributes ) ), wp_kses_post( wpautop( wptexturize( $description ) ) ) ); } /** * Get Custom Block Wrapper Attributes * * @since 3.6.0 * @param array $attributes * @return array */ public static function get_custom_block_wrapper_attributes( array $attributes ): array { $default = array( 'class' => 'is-layout-flow', ); $text_align = $attributes['textAlign'] ?? ''; if ( empty( $text_align ) ) { return $default; } return array( 'class' => $default['class'] . ' ' . sanitize_html_class( "has-text-align-{$text_align}" ), ); } } php/blocks/block-coauthor-image/class-block-coauthor-image.php000060400000006262147177171730020435 0ustar00 array( __CLASS__, 'render_block' ), ) ); } /** * Render Block * * @since 3.6.0 * @param array $attributes * @param string $content * @param WP_Block $block * @return string */ public static function render_block( array $attributes, string $content, WP_Block $block ): string { $author = $block->context['co-authors-plus/author'] ?? array(); $layout = $block->context['co-authors-plus/layout'] ?? ''; if ( empty( $author ) ) { return ''; } $featured_media_id = absint( $author['featured_media'] ?? 0 ); $display_name = esc_html( $author['display_name'] ?? '' ); $link = esc_url( $author['link'] ?? '' ); $align = esc_attr( $attributes['align'] ?? '' ); if ( 0 === $featured_media_id ) { return ''; } $attributes = array_merge( array( 'width' => '', 'height' => '', 'sizeSlug' => 'thumbnail', 'scale' => '', 'aspectRatio' => '', 'isLink' => false, 'rel' => '', 'verticalAlign' => '', ), $attributes ); if ( empty( $attributes['width'] ) && ! empty( $attributes['height'] ) ) { $attributes['width'] = 'auto'; } $style_attribute_key_map = array( 'width' => 'width', 'height' => 'height', 'scale' => 'object-fit', 'aspectRatio' => 'aspect-ratio', 'verticalAlign' => 'vertical-align', ); $styles = array_map( function( string $key, string $style ) use ( $attributes ) : string { if ( empty( $attributes[ $key ] ) ) { return ''; } return sprintf( '%s;', safecss_filter_attr( "{$style}:{$attributes[$key]}" ) ); }, array_keys( $style_attribute_key_map ), array_values( $style_attribute_key_map ) ); $image_attributes = array_merge( array( 'class' => '', 'style' => '', ), get_block_core_post_featured_image_border_attributes( $attributes ) ); $image_attributes['style'] .= implode( '', $styles ); $feature_image = wp_get_attachment_image( $featured_media_id, $attributes['sizeSlug'], false, $image_attributes ); if ( '' !== $link && true === $attributes['isLink'] ) { $link_attributes = Templating::render_attributes( array( 'href' => $author['link'], 'rel' => $attributes['rel'], 'title' => sprintf( __( 'Posts by %s', 'co-authors-plus' ), $display_name ), ) ); $inner_content = Templating::render_element( 'a', $link_attributes, $feature_image ); } else { $inner_content = $feature_image; } return Templating::render_element( 'figure', get_block_wrapper_attributes( array( 'class' => ( 'default' !== $layout && ! empty( $align ) && 'none' !== $align ) ? "align{$align}" : '' ) ), $inner_content ); } } php/blocks/block-coauthor-name/class-block-coauthor-name.php000060400000005015147177171730020124 0ustar00 array( __CLASS__, 'render_block' ), ) ); } /** * Render Block * * @since 3.6.0 * @param array $attributes * @param string $content * @param WP_Block $block * @return string */ public static function render_block( array $attributes, string $content, WP_Block $block ): string { $author = $block->context['co-authors-plus/author'] ?? array(); if ( empty( $author ) ) { return ''; } $display_name = esc_html( $author['display_name'] ?? '' ); $link = esc_url( $author['link'] ?? '' ); if ( '' === $display_name ) { return ''; } $attributes = array_merge( array( 'isLink' => false, 'rel' => '', 'tagName' => 'p', 'textAlign' => '', ), $attributes ); if ( '' !== $link && true === $attributes['isLink'] ) { $link_attributes = Templating::render_attributes( array( 'href' => $link, 'rel' => $attributes['rel'], 'title' => sprintf( __( 'Posts by %s', 'co-authors-plus' ), $display_name ), ) ); $inner_content = Templating::render_element( 'a', $link_attributes, $display_name ); } else { $inner_content = $display_name; } $tag_name = self::sanitize_tag_name( $attributes['tagName'] ); return Templating::render_element( $tag_name, get_block_wrapper_attributes( self::get_custom_block_wrapper_attributes( $attributes ) ), $inner_content ); } /** * Sanitize Tag Name * * @since 3.6.0 * @param string $tag_name * @return string */ public static function sanitize_tag_name( string $tag_name ): string { if ( in_array( $tag_name, array_keys( wp_kses_allowed_html( 'post' ) ), true ) ) { return $tag_name; } return 'p'; } /** * Get Custom Block Wrapper Attributes * * @since 3.6.0 * @param array $attributes * @return array */ public static function get_custom_block_wrapper_attributes( array $attributes ): array { $text_align = $attributes['textAlign'] ?? ''; if ( empty( $text_align ) ) { return array(); } return array( 'class' => sanitize_html_class( "has-text-align-{$text_align}" ), ); } } php/blocks/block-coauthors/class-block-coauthors.php000060400000017324147177171730016644 0ustar00 array( __CLASS__, 'render_block' ), ) ); } /** * Separator Internationalization * Provide i18n for the default prefix, separators and suffix attributes during block registration. * * @param array $settings Array of determined settings for registering a block type. * @param array $metadata Metadata provided for registering a block type. * @return array Updated settings that include internationalized attributes. */ public static function separator_internationalization( array $settings, array $metadata ): array { if ( ! array_key_exists( 'name', $metadata ) ) { return $settings; } if ( 'co-authors-plus/coauthors' !== $metadata['name'] ) { return $settings; } return array_merge( $settings, array( 'attributes' => array_merge( $settings['attributes'], array( 'prefix' => array( 'type' => 'string', 'default' => apply_filters( 'coauthors_default_before', __( 'By ', 'co-authors-plus' ) ), ), 'separator' => array( 'type' => 'string', 'default' => apply_filters( 'coauthors_default_between', ', ' ), ), 'lastSeparator' => array( 'type' => 'string', 'default' => apply_filters( 'coauthors_default_between_last', __( ' and ', 'co-authors-plus' ) ), ), 'suffix' => array( 'type' => 'string', 'default' => apply_filters( 'coauthors_default_after', '' ), ), ) ), ) ); } /** * Render Block * * @since 3.6.0 * @param array $attributes * @param string $content * @param WP_Block $block * @return string */ public static function render_block( array $attributes, string $content, WP_Block $block ): string { $post_id = array_key_exists( 'postId', $block->context ) ? absint( $block->context['postId'] ) : 0; if ( 0 === $post_id ) { return ''; } $authors = Blocks::get_authors_with_api_schema( $post_id ); if ( empty( $authors ) ) { return ''; } $blocks = self::render_coauthors_blocks_with_template( self::get_block_as_template( $block ), $authors ); $separators = self::get_separators( count( $blocks ), $attributes ); $blocks_with_separators = self::merge_blocks_with_separators( $blocks, $separators ); if ( 'default' === $attributes['layout']['type'] ) { array_unshift( $blocks_with_separators, self::render_prefix( $attributes['prefix'] ?? '' ) ); array_push( $blocks_with_separators, self::render_suffix( $attributes['suffix'] ?? '' ) ); } return current( $block->parsed_block['innerContent'] ) . implode( $blocks_with_separators ) . end( $block->parsed_block['innerContent'] ); } /** * Get Composed Map Function * Use array reduce so an unknown array of functions can be used as single array_map callback * * @since 3.6.0 * @param array $fns * @return callable */ public static function get_composed_map_function( ...$fns ): callable { return function ( $value ) use ( $fns ) { return array_reduce( $fns, function( $v, callable $f ) { return $f( $v ); }, $value ); }; } /** * Render Prefix * * @since 3.6.0 * @param string $prefix * @return string */ public static function render_prefix( string $prefix ): string { if ( empty( $prefix ) ) { return $prefix; } return Templating::render_element( 'span', 'class="wp-block-co-authors-plus-coauthors__prefix"', $prefix ); } /** * Render Suffix * * @since 3.6.0 * @param string $suffix * @return string */ public static function render_suffix( string $suffix ): string { if ( empty( $suffix ) ) { return $suffix; } return Templating::render_element( 'span', 'class="wp-block-co-authors-plus-coauthors__suffix"', $suffix ); } /** * Render Co-Authors Blocks with Template * * @since 3.6.0 * @param array $template * @param array $authors * @return array */ public static function render_coauthors_blocks_with_template( array $template, array $authors ): array { return array_map( self::get_composed_map_function( self::get_template_render_function( $template ), // To match JSX from editor, remove line-breaks between blocks. function( $content ) { return str_replace( "\n", '', $content ); }, // To match JSX from editor, trim whitespace around blocks. 'trim', Templating::get_render_element_function( 'div', 'class="wp-block-co-authors-plus-coauthor"' ) ), $authors ); } /** * Merge Blocks with Separators * * @since 3.6.0 * @param array $blocks * @param array $separators * @return array */ private static function merge_blocks_with_separators( array $blocks, array $separators ): array { return array_map( function( ...$args ) : string { return implode( $args ); }, $blocks, $separators ); } /** * Get Separators * * @since 3.6.0 * @param int $count * @param array $attributes */ private static function get_separators( int $count, array $attributes ): array { if ( 1 === $count ) { return array(); } if ( 'default' !== $attributes['layout']['type'] ) { return array(); } $separator = self::get_separator( $attributes ); $last_separator = self::get_last_separator( $attributes, $separator ); $separators = array_fill( 0, $count - 1, $separator ); if ( ! empty( $separators ) ) { array_splice( $separators, -1, 1, $last_separator ); } return $separators; } /** * Get Separator * * @since 3.6.0 * @param array $attributes * @return string $separator */ private static function get_separator( array $attributes ): string { $separator = esc_html( $attributes['separator'] ?? '' ); if ( '' === $separator ) { return $separator; } return Templating::render_element( 'span', 'class="wp-block-co-authors-plus-coauthors__separator"', $separator ); } /** * Get Last Separator * * @since 3.6.0 * @param array $attributes * @param string $default */ private static function get_last_separator( array $attributes, string $default ): string { $last_separator = esc_html( $attributes['lastSeparator'] ?? '' ); if ( '' === $last_separator ) { return $default; } return Templating::render_element( 'span', 'class="wp-block-co-authors-plus-coauthors__separator"', $last_separator ); } /** * Get Template Render Function * * @since 3.6.0 * @param array $block_template * @return callable */ private static function get_template_render_function( array $block_template ): callable { return function( array $author ) use ( $block_template ): string { return ( new WP_Block( $block_template, array( 'co-authors-plus/author' => $author, 'co-authors-plus/layout' => $block_template['attrs']['layout']['type'] ?? 'default' ) ) )->render( array( 'dynamic' => false, ) ); }; } /** * Get Block as Template * * @since 3.6.0 * @param WP_Block $block * @return array */ private static function get_block_as_template( WP_Block $block ): array { return array_merge( $block->parsed_block, array( 'innerContent' => array_slice( $block->parsed_block['innerContent'], 1, -1 ), 'blockName' => 'core/null', ) ); } } php/blocks/templating/class-templating.php000060400000004517147177171730014756 0ustar00{$content}"; } /** * Get Render Element Function * Dependency inject render_element so you can use in array_map or add_filter. * * @since 3.6.0 * @param string $name * @param null|string $attributes * @return callable */ public static function get_render_element_function( string $name, ?string $attributes = '' ): callable { return function( string $content ) use ( $name, $attributes ) : string { return self::render_element( $name, $attributes, $content ); }; } /** * Render Self Closing Element * * @since 3.6.0 * @param string $name * @param null|string $attributes * @return string */ public static function render_self_closing_element( string $name, ?string $attributes = '' ): string { return "<{$name} $attributes/>"; } /** * Render Attribute String * * @since 3.6.0 * @param string|int $key Attribute key. * @param mixed $value Attribute value. For boolean attributes, set value the same as the key. * @return string */ public static function render_attribute_string( $key, $value ): string { if ( empty( $value ) ) { return ''; } if ( $key === $value ) { return $key; } return sprintf( '%s="%s"', $key, esc_attr( $value ) ); } /** * Render Attributes * * @since 3.6.0 * @param array $attributes An associative array of attributes and their values. */ public static function render_attributes( array $attributes ): string { $attribute_strings = array_map( array( __CLASS__, 'render_attribute_string' ), array_keys( $attributes ), array_values( $attributes ) ); $validated_attribute_strings = array_values( array_filter( $attribute_strings, function( $value ) { return is_string( $value ) && '' !== $value; } ) ); return implode( ' ', $validated_attribute_strings ); } } php/blocks/class-blocks.php000060400000013413147177171730011716 0ustar00 $author, ); } /** * Block Uses Author Context * * @param string $block_name Block name to check for use of author context. * @return bool Whether the `uses_context` property of the registered block type includes `'co-authors-plus/author'` */ public static function block_uses_author_context( string $block_name ): bool { $block = WP_Block_Type_Registry::get_instance()->get_registered( $block_name ); if ( ! $block instanceof \WP_Block_Type ) { return false; } return in_array( 'co-authors-plus/author', $block->uses_context, true ); } /** * Enqueue Store * * @since 3.6.0 */ public static function enqueue_store(): void { $asset = require dirname( COAUTHORS_PLUS_FILE ) . '/build/blocks-store/index.asset.php'; wp_enqueue_script( 'coauthors-blocks-store', plugins_url( '/co-authors-plus/build/blocks-store/index.js' ), $asset['dependencies'], $asset['version'] ); $data = apply_filters( 'coauthors_blocks_store_data', array( 'authorPlaceholder' => array( 'id' => 0, 'display_name' => __( 'FirstName LastName', 'co-authors-plus' ), 'description' => array( 'raw' => __( 'Placeholder description from Co-Authors block.', 'co-authors-plus' ), 'rendered' => '

      ' . __( 'Placeholder description from Co-Authors block.', 'co-authors-plus' ) . '

      ', ), 'link' => '#', 'featured_media' => 0, 'avatar_urls' => array_map( '__return_empty_string', array_flip( rest_get_avatar_sizes() ) ), ), ) ); wp_localize_script( 'coauthors-blocks-store', 'coAuthorsBlocks', $data ); } /** * Get CoAuthor with API Schema * * Use the global WP_REST_Server to fetch author data, * so that it matches what a user would see in the editor. * * @since 3.6.0 * @param false|WP_User|stdClass $author An author object from CoAuthors Plus. * @return null|array Either an array of data about an author, or null. */ public static function get_author_with_api_schema( $author ): ?array { if ( ! ( $author instanceof \stdClass || $author instanceof \WP_User ) ) { return null; } $data = rest_get_server()->dispatch( WP_REST_Request::from_url( home_url( sprintf( '/wp-json/coauthors/v1/coauthors/%s', $author->user_nicename ) ) ) )->get_data(); if ( ! is_array( $data ) ) { return null; } // Lack of an `id` indicates an author was not found. if ( ! array_key_exists( 'id', $data ) ) { return null; } // The presence of `code` indicates this is an error response. if ( array_key_exists( 'code', $data ) ) { return null; } return $data; } /** * Get CoAuthors with API Schema * * Use the global WP_REST_Server to fetch co-authors for a post, * so that it matches what a user would see in the editor. * * @since 3.6.0 * @param int $post_id Post ID for querying co-authors. * @param array $data Co-authors as returned by the REST API. */ public static function get_authors_with_api_schema( int $post_id ): array { $data = rest_get_server()->dispatch( WP_REST_Request::from_url( home_url( sprintf( '/wp-json/coauthors/v1/coauthors?post_id=%d', $post_id ) ) ) )->get_data(); if ( ! is_array( $data ) ) { return array(); } // The presence of `code` indicates this is an error response. if ( array_key_exists( 'code', $data ) ) { return array(); } return $data; } } php/integrations/amp/meta-author.php000060400000000170147177171730013566 0ustar00get( 'post_id' ) ); ?> php/integrations/yoast/class-coauthor.php000060400000010457147177171730014662 0ustar00determine_user_id(); if ( ! $user_id ) { return false; } $data = $this->build_person_data( $user_id, true ); $data['@type'] = 'Person'; unset( $data['logo'] ); // If this is a post and the author archives are enabled, set the author archive url as the author url. if ( $this->helpers->options->get( 'disable-author' ) !== true ) { $data['url'] = $this->helpers->user->get_the_author_posts_url( $user_id ); } return $data; } /** * Generate the Person data given a user ID. * * @param int $user_id User ID. * * @return array|bool */ public function generate_from_user_id( $user_id ) { $this->user_id = $user_id; return $this->generate(); } /** * Generate the Person data given a Guest Author object. * * @param object $guest_author The Guest Author object. * * @return array|bool */ public function generate_from_guest_author( $guest_author ) { $data = $this->build_person_data_for_guest_author( $guest_author, true ); $data['@type'] = 'Person'; unset( $data['logo'] ); // If this is a post and the author archives are enabled, set the author archive url as the author url. if ( $this->helpers->options->get( 'disable-author' ) !== true ) { $data['url'] = \get_author_posts_url( $guest_author->ID, $guest_author->user_nicename ); } return $data; } /** * Determines a User ID for the Person data. * * @return bool|int User ID or false upon return. */ protected function determine_user_id() { return $this->user_id; } /** * Builds our array of Schema Person data for a given Guest Author. * * @param object $guest_author The Guest Author object. * @param bool $add_hash Whether the person's image url hash should be added to the image id. * * @return array An array of Schema Person data. */ protected function build_person_data_for_guest_author( $guest_author, $add_hash = false ): array { $schema_id = $this->context->site_url . Schema_IDs::PERSON_LOGO_HASH; $data = [ '@type' => $this->type, '@id' => $schema_id . \wp_hash( $guest_author->user_login . $guest_author->ID . 'guest' ), ]; $data['name'] = $this->helpers->schema->html->smart_strip_tags( $guest_author->display_name ); $data = $this->set_image_from_avatar( $data, $guest_author, $schema_id, $add_hash ); // If local avatar is present, override. $avatar_meta = \wp_get_attachment_image_src( \get_post_thumbnail_id( $guest_author->ID ) ); if ( $avatar_meta ) { $avatar_meta = [ 'url' => $avatar_meta[0], 'width' => $avatar_meta[1], 'height' => $avatar_meta[2], ]; $data['image'] = $this->helpers->schema->image->generate_from_attachment_meta( $schema_id, $avatar_meta, $data['name'], $add_hash ); } if ( ! empty( $guest_author->description ) ) { $data['description'] = $this->helpers->schema->html->smart_strip_tags( $guest_author->description ); } $data = $this->add_guest_author_same_as_urls( $data, $guest_author ); return $data; } /** * Builds our SameAs array. * * @param array $data The Person schema data. * @param WP_User $guest_author The user data object. * * @return array The Person schema data. */ protected function add_guest_author_same_as_urls( $data, $guest_author ): array { $same_as_urls = []; // Add the "Website" field from co-authors' contact info. if ( ! empty( $guest_author->website ) ) { $same_as_urls[] = $guest_author->website; } // When CAP adds it, add the social profiles here. if ( ! empty( $same_as_urls ) ) { $same_as_urls = \array_values( \array_unique( $same_as_urls ) ); $data['sameAs'] = $same_as_urls; } return $data; } } php/integrations/amp.php000060400000001363147177171730011345 0ustar00ID ); $authors_json = array(); foreach ( $authors as $author ) { $authors_json[] = array( '@type' => 'Person', 'name' => $author->display_name, ); } $metadata['author'] = $authors_json; return $metadata; } function cap_set_amp_author_meta_template( $file, $type, $post ) { if ( 'meta-author' === $type ) { $file = __DIR__ . '/amp/meta-author.php'; } return $file; } php/integrations/yoast.php000060400000025620147177171730011731 0ustar00=' ); } /** * This integration was originally built in Yoast and left behind a feature flag * * Now that we are moving it to this plugin, lets make sure to not load it if the Yoast version is enabled to avoid conflicts * * @return boolean */ protected static function is_yoast_legacy_integration_enabled(): bool { return defined( 'YOAST_SEO_COAUTHORS_PLUS' ) && YOAST_SEO_COAUTHORS_PLUS; } /** * Register the hooks * * @return void */ public static function register_hooks(): void { add_filter( 'wpseo_schema_graph', [ __CLASS__, 'filter_graph' ], 11, 2 ); add_filter( 'wpseo_schema_author', [ __CLASS__, 'filter_author_graph' ], 11, 4 ); add_filter( 'wpseo_schema_profilepage', [ __CLASS__, 'filter_schema_profilepage' ], 11, 4 ); add_filter( 'wpseo_meta_author', [ __CLASS__, 'filter_author_meta' ], 11, 2 ); add_filter( 'wpseo_enhanced_slack_data', [__CLASS__, 'filter_slack_data'], 10, 2 ); add_filter( 'wpseo_robots_array', [ __CLASS__, 'allow_indexing_guest_author_archive' ], 10, 2 ); add_filter( 'wpseo_opengraph_url', [ __CLASS__, 'fix_guest_author_archive_url_presenter' ], 10, 2 ); add_filter( 'wpseo_replacements', [ __CLASS__, 'filter_author_name_variable' ], 10, 2 ); } /** * Filters the graph output of authors archive for guest authors. * * @param array $data The schema graph. * @param Meta_Tags_Context $context The context object. * @param Abstract_Schema_Piece $graph_piece_generator The graph piece generator. * @param Abstract_Schema_Piece[] $graph_piece_generators The graph piece generators. * * @return array The (potentially altered) schema graph. */ public static function filter_schema_profilepage( $data, $context, $graph_piece_generator, $graph_piece_generators ): array { if ( ! is_author() ) { return $data; } $user = get_queried_object(); if ( empty( $user->type ) || $user->type !== 'guest-author' ) { return $data; } // Fix author URL. $author_url = get_author_posts_url( $user->ID, $user->user_nicename ); $graph_piece_generator->context->canonical = $author_url; $graph_piece_generator->context->main_schema_id = $author_url; return $graph_piece_generator->generate(); } /** * Filters the graph output to add authors. * * @param array $data The schema graph. * @param Meta_Tags_Context $context The context object. * @param Abstract_Schema_Piece $graph_piece_generator The graph piece generator. * @param Abstract_Schema_Piece[] $graph_piece_generators The graph piece generators. * * @return array The (potentially altered) schema graph. */ public static function filter_author_graph( $data, $context, $graph_piece_generator, $graph_piece_generators ): array { if ( ! isset( $data['image']['url'] ) ) { return $data; } if ( isset( $data['image']['@id'] ) ) { $data['image']['@id'] .= md5( $data['image']['url'] ); } if ( isset( $data['logo']['@id'] ) ) { $data['logo']['@id'] .= md5( $data['image']['url'] ); } return $data; } /** * Filters the graph output to add authors. * * @param array $data The schema graph. * @param Meta_Tags_Context $context Context object. * * @return array The (potentially altered) schema graph. */ public static function filter_graph( $data, $context ): array { if ( ! is_singular() ) { return $data; } if ( ! function_exists( 'get_coauthors' ) ) { return $data; } /** * Contains the authors from the Co-Authors Plus plugin. * * @var WP_User[] $author_objects */ $author_objects = get_coauthors( $context->post->ID ); $ids = []; $authors = []; // Add the authors to the schema. foreach ( $author_objects as $author ) { $author_generator = new CoAuthor(); $author_generator->context = $context; $author_generator->helpers = YoastSEO()->helpers; if ( $author instanceof WP_User ) { $author_data = $author_generator->generate_from_user_id( $author->ID ); } elseif ( ! empty( $author->type ) && $author->type === 'guest-author' ) { $author_data = $author_generator->generate_from_guest_author( $author ); } if ( ! empty( $author_data ) ) { $ids[] = [ '@id' => $author_data['@id'] ]; $authors[] = $author_data; } } $schema_types = new Schema_Types(); $article_types = array_column( $schema_types->get_article_type_options(), 'value' ); // Change the author reference to reference our multiple authors. $add_to_graph = false; foreach ( $data as $key => $piece ) { if ( in_array( $piece['@type'], $article_types, true ) ) { $data[ $key ]['author'] = $ids; $add_to_graph = true; break; } } if ( $add_to_graph ) { // Clean all Persons from the schema, as the user stored as post owner might be incorrectly added if the post has only guest authors as authors. $data = array_filter( $data, function( $piece ) { return empty( $piece['@type'] ) || $piece['@type'] !== 'Person'; } ); if ( ! empty( $author_data ) ) { if ( $context->site_represents !== 'person' || $author->ID !== $context->site_user_id ) { $data = array_merge( $data, $authors ); } } } return $data; } /** * Filters the author meta tag * * @param string $author_name The article author's display name. Return empty to disable the tag. * @param Indexable_Presentation $presentation The presentation of an indexable. * @return string */ public static function filter_author_meta( $author_name, $presentation ): string { $author_objects = get_coauthors( $presentation->context->post->id ); // Fallback in case of error. if ( empty( $author_objects ) ) { return $author_name; } return self::get_authors_display_names_output( $author_objects ); } /** * Filter the enhanced data for sharing on Slack. * * @param array $data The enhanced Slack sharing data. * @param Indexable_Presentation $presentation The presentation of an indexable. * @return array The potentially amended enhanced Slack sharing data. */ public static function filter_slack_data( $data, $presentation ): array { $author_objects = get_coauthors( $presentation->context->post->id ); // Fallback in case of error. if ( empty( $author_objects ) ) { return $data; } $output = self::get_authors_display_names_output( $author_objects ); $data[ \__( 'Written by', 'co-authors-plus' ) ] = $output; return $data; } /** * Returns the list of authors display names separated by commas. * * @param WP_User[] $author_objects The list of authors. * @return string Author display names separated by commas. */ private static function get_authors_display_names_output( $author_objects ): string { $output = ''; foreach ( $author_objects as $i => $author ) { $output .= $author->display_name; if ( $i <= ( count( $author_objects ) - 2 ) ) { $output .= ', '; } } return $output; } /** * Co-Authors Plus and Yoast are incompatible where the author archives for guest authors are output as noindex. * This filter will determine if we're on an author archive and reset the robots.txt string properly. * * See https://github.com/Yoast/wordpress-seo/issues/9147. * * @param string $robots The meta robots directives to be echoed. * @param Indexable_Presentation $presentation The presentation of an indexable. */ public static function allow_indexing_guest_author_archive( $robots, $presentation ) { if ( ! is_author() ) { return $robots; } if ( ! is_a( $presentation, Indexable_Author_Archive_Presentation::class ) ) { return $robots; } $post_type = get_post_type( get_queried_object_id() ); if ( 'guest-author' !== $post_type ) { return $robots; } /* * If this is a guest author archive and hasn't manually been set to noindex, * make sure the robots.txt string is set properly. */ if ( empty( $presentation->model->is_robots_noindex ) || 0 === (int) $presentation->model->is_robots_noindex ) { if ( ! is_array( $robots ) ) { $robots = []; } $robots['index'] = 'index'; $robots['follow'] = 'follow'; } return $robots; } public static function fix_guest_author_archive_url_presenter( $url, $presenter ) { if ( ! is_author() ) { return $url; } $user = get_queried_object(); if ( empty( $user->type ) || $user->type !== 'guest-author' ) { return $url; } return get_author_posts_url( $user->ID, $user->user_nicename ); } /** * Uses guest authors in the '%%name%%' Yoast variable when needed. * * See https://yoast.com/features/meta-tag-variables/. * * @param array $replacements Key/val pair of variables and their transformed value. * @param stdClass $args Info about current queried object. * @return array Modified $replacements. */ public static function filter_author_name_variable( $replacements, $args ): array { if ( isset( $replacements['%%name%%'], $args->ID ) ) { $author_objects = get_coauthors( $args->ID ); // Fallback in case of error. if ( empty( $author_objects ) ) { return $replacements; } $replacements['%%name%%'] = self::get_authors_display_names_output( $author_objects ); } return $replacements; } } Yoast::init(); php/class-coauthors-endpoint.php000060400000016222147177171730013012 0ustar00[\d]+)'; /** * An instance of the Co_Authors_Plus class. */ public $coauthors; /** * WP_REST_API constructor. */ public function __construct( $coauthors_instance ) { $this->coauthors = $coauthors_instance; add_action( 'rest_api_init', array( $this, 'add_endpoints' ) ); add_action( 'wp_loaded', array( $this, 'modify_responses' ) ); } /** * Register endpoints. */ public function add_endpoints(): void { register_rest_route( static::NS, static::SEARCH_ROUTE, array( array( 'methods' => 'GET', 'callback' => array( $this, 'get_coauthors_search_results' ), 'permission_callback' => array( $this, 'can_edit_coauthors' ), 'args' => array( 'q' => array( 'description' => __( 'Text to search.', 'co-authors-plus' ), 'required' => false, 'type' => 'string', ), 'existing_authors' => array( 'description' => __( 'Names of existing co-authors to exclude from search results.', 'co-authors-plus' ), 'type' => 'string', 'required' => false, ), ), ), ) ); register_rest_route( static::NS, static::AUTHORS_ROUTE . static::ENDPOINT_POST_ID_REGEX, array( array( 'methods' => 'GET', 'callback' => array( $this, 'get_coauthors' ), 'permission_callback' => array( $this, 'can_edit_coauthors' ), 'args' => array( 'post_id' => array( 'required' => true, 'type' => 'number', 'validate_callback' => array( $this, 'validate_numeric' ), ), ), ), ) ); register_rest_route( static::NS, static::AUTHORS_ROUTE . static::ENDPOINT_POST_ID_REGEX, array( array( 'methods' => 'POST', 'callback' => array( $this, 'update_coauthors' ), 'permission_callback' => array( $this, 'can_edit_coauthors' ), 'args' => array( 'post_id' => array( 'required' => true, 'type' => 'number', 'validate_callback' => array( $this, 'validate_numeric' ), ), 'new_authors' => array( 'description' => __( 'Names of co-authors to save.', 'co-authors-plus' ), 'type' => 'string', 'required' => false, ), ), ), ) ); } /** * Search and return authors based on a text query. * * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function get_coauthors_search_results( $request ): WP_REST_Response { $response = array(); $search = strtolower( $request->get_param( 'q' ) ); $ignorable = $request->get_param( 'existing_authors' ) ?? ''; $ignore = explode( ',', $ignorable ); $authors = $this->coauthors->search_authors( $search, $ignore ); if ( ! empty( $authors ) ) { foreach ( $authors as $author ) { $response[] = $this->_format_author_data( $author ); } } return rest_ensure_response( $response ); } /** * Return a single author. * * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function get_coauthors( $request ): WP_REST_Response { $response = array(); $this->_build_authors_response( $response, $request ); return rest_ensure_response( $response ); } /** * Update co-authors. * * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function update_coauthors( $request ): WP_REST_Response { $response = array(); if ( ! empty( $request->get_param( 'new_authors' ) ) ) { $coauthors = explode( ',', $request->get_param( 'new_authors' ) ); // Replace all existing authors $this->coauthors->add_coauthors( $request->get_param( 'post_id' ), $coauthors ); $this->_build_authors_response( $response, $request ); } return rest_ensure_response( $response ); } /** * Validate input arguments. * * @param mixed $param Value to validate. * @return bool */ public function validate_numeric( $param ): bool { return is_numeric( $param ); } /** * Permissions for updating co-authors. * * @return bool */ public function can_edit_coauthors(): bool { return $this->coauthors->current_user_can_set_authors(); } /** * Helper function to consistently format the author data for * the response. * * @param object $author The result from co-authors methods. * @return array */ public function _format_author_data( $author ): array { return array( 'id' => esc_html( $author->ID ), 'userNicename' => esc_html( rawurldecode( $author->user_nicename ) ), 'login' => esc_html( $author->user_login ), 'email' => sanitize_email( $author->user_email ), 'displayName' => esc_html( str_replace( '∣', '|', $author->display_name ) ), 'avatar' => esc_url( get_avatar_url( $author->ID ) ), ); } /** * Get authors' data and add it to the response. * * @param array The response array. * @param int The post ID from the request. */ public function _build_authors_response( &$response, $request ): void { $authors = get_coauthors( $request->get_param( 'post_id' ) ); if ( ! empty( $authors ) ) { foreach ( $authors as $author ) { $response[] = $this->_format_author_data( $author ); } } } /** * Add filters to REST endpoints for each post that * supports co-authors. */ public function modify_responses(): void { $post_types = $this->coauthors->supported_post_types(); if ( empty( $post_types ) || ! is_array( $post_types ) ) { return; } foreach ( $post_types as $post_type ) { add_filter( 'rest_prepare_' . $post_type, array( $this, 'remove_author_link' ), 10, 3 ); } } /** * Remove the link for wp:action-assign-author to remove the author * select from the document sidebar. * * @see https://github.com/WordPress/gutenberg/pull/6630 * * @param WP_REST_Response $response Response object. * @param WP_Post $post The current post object. * @param WP_REST_Request $request Request object. * @return WP_REST_Response */ public function remove_author_link( $response, $post, $request ): WP_REST_Response { if ( ! isset( $request['context'] ) || 'edit' !== $request['context'] ) { return $response; } require_once ABSPATH . '/wp-admin/includes/post.php'; if ( ! \use_block_editor_for_post( $post ) ) { return $response; } $links = $response->get_links(); if ( ! isset( $links[ static::SUPPORT_LINK ] ) ) { return $response; } $response->remove_link( static::SUPPORT_LINK ); return $response; } } php/class-coauthors-guest-authors.php000060400000161266147177171730014015 0ustar00parent_page = apply_filters( 'coauthors_guest_author_parent_page', $this->parent_page ); // Allow users to change the required cap for modifying guest authors $this->list_guest_authors_cap = apply_filters( 'coauthors_guest_author_manage_cap', $this->list_guest_authors_cap ); // Set up default labels, but allow themes to modify $this->labels = apply_filters( 'coauthors_guest_author_labels', array( 'singular' => __( 'Guest Author', 'co-authors-plus' ), 'plural' => __( 'Guest Authors', 'co-authors-plus' ), 'all_items' => __( 'All Guest Authors', 'co-authors-plus' ), 'add_new_item' => __( 'Add New Guest Author', 'co-authors-plus' ), 'edit_item' => __( 'Edit Guest Author', 'co-authors-plus' ), 'new_item' => __( 'New Guest Author', 'co-authors-plus' ), 'view_item' => __( 'View Guest Author', 'co-authors-plus' ), 'search_items' => __( 'Search Guest Authors', 'co-authors-plus' ), 'not_found' => __( 'No guest authors found', 'co-authors-plus' ), 'not_found_in_trash' => __( 'No guest authors found in Trash', 'co-authors-plus' ), 'update_item' => __( 'Update Guest Author', 'co-authors-plus' ), 'metabox_about' => __( 'About the guest author', 'co-authors-plus' ), 'featured_image' => __( 'Avatar', 'co-authors-plus' ), 'set_featured_image' => __( 'Set Avatar', 'co-authors-plus' ), 'use_featured_image' => __( 'Use Avatar', 'co-authors-plus' ), 'remove_featured_image' => __( 'Remove Avatar', 'co-authors-plus' ), ) ); // Register a post type to store our guest authors $args = array( 'label' => $this->labels['singular'], 'labels' => array( 'name' => $this->labels['plural'] ?? '', 'singular_name' => $this->labels['singular'] ?? '', 'add_new' => _x( 'Add New', 'guest author', 'co-authors-plus' ), 'all_items' => $this->labels['all_items'] ?? '', 'add_new_item' => $this->labels['add_new_item'] ?? '', 'edit_item' => $this->labels['edit_item'] ?? '', 'new_item' => $this->labels['new_item'] ?? '', 'view_item' => $this->labels['view_item'] ?? '', 'search_items' => $this->labels['search_items'] ?? '', 'not_found' => $this->labels['not_found'] ?? '', 'not_found_in_trash' => $this->labels['not_found_in_trash'] ?? '', 'featured_image' => $this->labels['featured_image'] ?? '', 'set_featured_image' => $this->labels['set_featured_image'] ?? '', 'use_featured_image' => $this->labels['use_featured_image'] ?? '', 'remove_featured_image' => $this->labels['remove_featured_image'] ?? '', ), 'public' => true, 'publicly_queryable' => false, 'exclude_from_search' => true, 'show_in_menu' => false, 'show_in_rest' => true, 'supports' => array( 'thumbnail', ), 'taxonomies' => array( $coauthors_plus->coauthor_taxonomy, ), 'rewrite' => false, 'query_var' => false, ); register_post_type( $this->post_type, $args ); // Hacky way to remove the title and the editor remove_post_type_support( $this->post_type, 'title' ); remove_post_type_support( $this->post_type, 'editor' ); } /** * Filter the messages that appear when saving or updating a guest author * * @since 3.0 */ public function filter_post_updated_messages( $messages ) { global $post; if ( $this->post_type !== $post->post_type ) { return $messages; } $guest_author = $this->get_guest_author_by( 'ID', $post->ID ); $guest_author_link = $this->filter_author_link( '', $guest_author->ID, $guest_author->user_nicename ); $messages[ $this->post_type ] = array( 0 => '', // Unused. Messages start at index 1. /* translators: Guest author URL */ 1 => sprintf( __( 'Guest author updated. View profile', 'co-authors-plus' ), esc_url( $guest_author_link ) ), 2 => __( 'Custom field updated.', 'co-authors-plus' ), 3 => __( 'Custom field deleted.', 'co-authors-plus' ), 4 => __( 'Guest author updated.', 'co-authors-plus' ), /* translators: %s: date and time of the revision */ 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Guest author restored to revision from %s', 'co-authors-plus' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, /* translators: Guest author URL */ 6 => sprintf( __( 'Guest author updated. View profile', 'co-authors-plus' ), esc_url( $guest_author_link ) ), 7 => __( 'Guest author saved.', 'co-authors-plus' ), /* translators: Guest author URL */ 8 => sprintf( __( 'Guest author submitted. Preview profile', 'co-authors-plus' ), esc_url( add_query_arg( 'preview', 'true', $guest_author_link ) ) ), 9 => sprintf( /* translators: Guest author profile preview URL. */ __( 'Guest author scheduled for: %1$s. Preview profile', 'co-authors-plus' ), // translators: Publish box date format, see http://php.net/date date_i18n( __( 'M j, Y @ G:i', 'co-authors-plus' ), strtotime( $post->post_date ) ), esc_url( $guest_author_link ) ), /* translators: Guest author profile preview URL. */ 10 => sprintf( __( 'Guest author updated. Preview profile', 'co-authors-plus' ), esc_url( add_query_arg( 'preview', 'true', $guest_author_link ) ) ), ); return $messages; } /** * Handle the admin action to create a guest author based * on an existing user * * @since 3.0 */ public function handle_create_guest_author_action(): void { if ( ! isset( $_GET['action'], $_GET['nonce'], $_GET['user_id'] ) || 'cap-create-guest-author' !== $_GET['action'] ) { return; } if ( ! wp_verify_nonce( $_GET['nonce'], 'create-guest-author' ) ) { wp_die( esc_html__( "Doin' something fishy, huh?", 'co-authors-plus' ) ); } if ( ! current_user_can( $this->list_guest_authors_cap ) ) { wp_die( esc_html__( "You don't have permission to perform this action.", 'co-authors-plus' ) ); } $user_id = (int) $_GET['user_id']; // Create the guest author $post_id = $this->create_guest_author_from_user_id( $user_id ); if ( is_wp_error( $post_id ) ) { wp_die( esc_html( $post_id->get_error_message() ) ); } do_action( 'cap_guest_author_create' ); // Redirect to the edit Guest Author screen $edit_link = get_edit_post_link( $post_id, 'redirect' ); $redirect_to = add_query_arg( 'message', 'guest-author-created', $edit_link ); wp_safe_redirect( esc_url_raw( $redirect_to ) ); exit; } /** * Handle the admin action to delete a guest author and possibly reassign their posts * * @since 3.0 */ public function handle_delete_guest_author_action(): void { global $coauthors_plus; if ( ! isset( $_POST['action'], $_POST['reassign'], $_POST['_wpnonce'], $_POST['id'] ) || 'delete-guest-author' != $_POST['action'] ) { return; } // Verify the user is who they say they are if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'delete-guest-author' ) ) { wp_die( esc_html__( "Doin' something fishy, huh?", 'co-authors-plus' ) ); } // Make sure they can perform the action if ( ! current_user_can( $this->list_guest_authors_cap ) ) { wp_die( esc_html__( "You don't have permission to perform this action.", 'co-authors-plus' ) ); } // Make sure the guest author actually exists $guest_author = $this->get_guest_author_by( 'ID', (int) $_POST['id'] ); if ( ! $guest_author ) { wp_die( esc_html__( "Guest author can't be deleted because it doesn't exist.", 'co-authors-plus' ) ); } // Perform the reassignment if needed $guest_author_term = $coauthors_plus->get_author_term( $guest_author ); switch ( $_POST['reassign'] ) { // Leave assigned to the current linked account case 'leave-assigned': $reassign_to = $guest_author->linked_account; break; // Reassign to a different user case 'reassign-another': if ( isset( $_POST['leave-assigned-to'] ) ) { $user_nicename = sanitize_title( $_POST['leave-assigned-to'] ); $reassign_to = $coauthors_plus->get_coauthor_by( 'user_nicename', $user_nicename ); if ( ! $reassign_to ) { wp_die( esc_html__( 'Co-author does not exists. Try again?', 'co-authors-plus' ) ); } $reassign_to = $reassign_to->user_login; } break; // Remove the byline, but don't delete the post case 'remove-byline': $reassign_to = false; break; default: wp_die( esc_html__( 'Please make sure to pick an option.', 'co-authors-plus' ) ); } $retval = $this->delete( $guest_author->ID, $reassign_to ); $args = array( 'page' => 'view-guest-authors', ); if ( is_wp_error( $retval ) ) { $args['message'] = 'delete-error'; } else { $args['message'] = 'guest-author-deleted'; do_action( 'cap_guest_author_del' ); } // Redirect to safety $redirect_to = add_query_arg( array_map( 'rawurlencode', $args ), admin_url( $this->parent_page ) ); wp_safe_redirect( esc_url_raw( $redirect_to ) ); exit; } /** * Given a search query, suggest some co-authors that might match it * * @since 3.0 */ public function handle_ajax_search_coauthors_to_assign(): void { global $coauthors_plus; if ( ! current_user_can( $this->list_guest_authors_cap ) ) { die(); } if ( ! isset( $_GET['q'] ) ) { die(); } $search = sanitize_text_field( $_GET['q'] ); if ( ! empty( $_GET['guest_author'] ) ) { $ignore = array( $this->get_guest_author_by( 'ID', (int) $_GET['guest_author'] )->user_login ); } else { $ignore = array(); } $results = wp_list_pluck( $coauthors_plus->search_authors( $search, $ignore ), 'user_login' ); $retval = array(); foreach ( $results as $user_login ) { $coauthor = $coauthors_plus->get_coauthor_by( 'user_login', $user_login ); $retval[] = (object) array( 'display_name' => $coauthor->display_name, 'user_login' => $coauthor->user_login, 'id' => $coauthor->user_nicename, ); } echo wp_json_encode( $retval ); die(); } /** * Some redirection we need to do for linked accounts * * @todo support author ID query vars */ public function action_parse_request( $query ) { if ( ! isset( $query->query_vars['author_name'] ) ) { return $query; } // No redirection needed on admin requests if ( is_admin() ) { return $query; } $coauthor = $this->get_guest_author_by( 'linked_account', sanitize_title( $query->query_vars['author_name'] ) ); if ( is_object( $coauthor ) && $query->query_vars['author_name'] != $coauthor->user_login ) { global $wp_rewrite; $link = $wp_rewrite->get_author_permastruct(); if ( empty( $link ) ) { $file = home_url( '/' ); $link = $file . '?author_name=' . $coauthor->user_login; } else { $link = home_url( user_trailingslashit( str_replace( '%author%', $coauthor->user_login, $link ) ) ); } wp_safe_redirect( $link ); exit; } return $query; } /** * Add the admin menus for seeing all co-authors * * @since 3.0 */ public function action_admin_menu(): void { add_submenu_page( $this->parent_page, $this->labels['plural'], $this->labels['plural'], $this->list_guest_authors_cap, 'view-guest-authors', array( $this, 'view_guest_authors_list' ) ); } /** * Enqueue any scripts or styles used for Guest Authors * * @since 3.0 */ public function action_admin_enqueue_scripts(): void { global $pagenow; // Enqueue our guest author CSS on the related pages if ( $this->parent_page === $pagenow && isset( $_GET['page'] ) && 'view-guest-authors' === $_GET['page'] ) { wp_enqueue_script( 'jquery-select2', plugins_url( 'lib/select2/select2.min.js', __DIR__ ), array( 'jquery' ), COAUTHORS_PLUS_VERSION ); wp_enqueue_style( 'cap-jquery-select2-css', plugins_url( 'lib/select2/select2.css', __DIR__ ), false, COAUTHORS_PLUS_VERSION ); wp_enqueue_style( 'guest-authors-css', plugins_url( 'css/guest-authors.css', __DIR__ ), false, COAUTHORS_PLUS_VERSION ); wp_enqueue_script( 'guest-authors-js', plugins_url( 'js/guest-authors.js', __DIR__ ), false, COAUTHORS_PLUS_VERSION ); } elseif ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) && $this->post_type === get_post_type() ) { add_action( 'admin_head', array( $this, 'change_title_icon' ) ); } } /** * Change the icon appearing next to the title * Core doesn't allow us to filter screen_icon(), so changing the ID is the next best thing * * @since 3.0.1 */ public function change_title_icon(): void { ?> parent_page != $pagenow || ! isset( $_REQUEST['message'] ) ) { return; } $message = $_REQUEST['message'] === 'guest-author-deleted' ? __( 'Guest author deleted.', 'co-authors-plus' ) : false; if ( $message ) { echo '

      ' . esc_html( $message ) . '

      '; } } /** * Register the meta boxes used for Guest Authors. * * @since 3.0 */ public function action_add_meta_boxes(): void { global $coauthors_plus; if ( get_post_type() == $this->post_type ) { // Remove the submitpost meta box because we have our own. remove_meta_box( 'submitdiv', $this->post_type, 'side' ); remove_meta_box( 'slugdiv', $this->post_type, 'normal' ); add_meta_box( 'coauthors-manage-guest-author-save', __( 'Save', 'co-authors-plus' ), array( $this, 'metabox_manage_guest_author_save' ), $this->post_type, 'side' ); add_meta_box( 'coauthors-manage-guest-author-slug', __( 'Unique Slug', 'co-authors-plus' ), array( $this, 'metabox_manage_guest_author_slug' ), $this->post_type, 'side' ); // Our meta boxes with co-author details. add_meta_box( 'coauthors-manage-guest-author-name', __( 'Name', 'co-authors-plus' ), array( $this, 'metabox_manage_guest_author_name' ), $this->post_type, 'normal' ); add_meta_box( 'coauthors-manage-guest-author-contact-info', __( 'Contact Info', 'co-authors-plus' ), array( $this, 'metabox_manage_guest_author_contact_info' ), $this->post_type, 'normal' ); add_meta_box( 'coauthors-manage-guest-author-bio', $this->labels['metabox_about'], array( $this, 'metabox_manage_guest_author_bio' ), $this->post_type, 'normal' ); } } /** * View a list table of all guest authors * * @since 3.0 */ public function view_guest_authors_list(): void { // Allow guest authors to be deleted if ( isset( $_GET['action'], $_GET['id'], $_GET['_wpnonce'] ) && 'delete' == $_GET['action'] ) { // Make sure the user is who they say they are if ( ! wp_verify_nonce( $_GET['_wpnonce'], 'guest-author-delete' ) ) { wp_die( esc_html__( "Doin' something fishy, huh?", 'co-authors-plus' ) ); } // Make sure the guest author actually exists $guest_author = $this->get_guest_author_by( 'ID', (int) $_GET['id'] ); if ( ! $guest_author ) { wp_die( esc_html__( "Guest author can't be deleted because it doesn't exist.", 'co-authors-plus' ) ); } // get post count global $coauthors_plus; $count = $coauthors_plus->get_guest_author_post_count( $guest_author ); echo '
      '; echo '

      ' . esc_html__( 'Delete Guest Authors', 'co-authors-plus' ) . '

      '; echo '
      '; echo '

      ' . esc_html__( 'You have specified this guest author for deletion:', 'co-authors-plus' ) . '

      '; echo '

      #' . esc_html( $guest_author->ID . ': ' . $guest_author->display_name ) . '

      '; // display wording differently per post count if ( 0 === $count ) { $post_count_message = '

      ' . esc_html__( 'There are no posts associated with this guest author.', 'co-authors-plus' ) . '

      '; } else { $note = '

      ' . __( "Note: If you'd like to delete the guest author and all of their posts, you should delete their posts first and then come back to delete the guest author.", 'co-authors-plus' ) . '

      '; $post_count_message_text = sprintf( /* translators: Count of posts */ _n( 'There is %d post associated with this guest author. What should be done with the post assigned to this Guest Author?', 'There are %d posts associated with this guest author. What should be done with the posts assigned to this Guest Author?', $count, 'co-authors-plus' ), number_format_i18n( $count ) ); $post_count_message = '

      ' . $post_count_message_text . '

      ' . $note; } $allowed_html = array( 'p' => array( 'class' => array(), ), ); echo wp_kses( $post_count_message, $allowed_html ); echo '
      '; // Hidden stuffs echo ''; wp_nonce_field( 'delete-guest-author' ); echo ''; echo '
        '; // only show delete options if post count > 0 if ( $count > 0 ) { // Reassign to another user echo '
      • '; echo ''; echo '
      • '; // Leave mapped to a linked account if ( get_user_by( 'login', $guest_author->linked_account ) ) { echo '
      • '; } // Remove bylines from the posts echo '
      • '; } else { echo ''; } echo '
      '; // disable disabled submit button for 0 post count if ( 0 === $count ) { submit_button( __( 'Confirm Deletion', 'co-authors-plus' ), 'secondary' ); } else { submit_button( __( 'Confirm Deletion', 'co-authors-plus' ), 'secondary', 'submit', true, array( 'disabled' => 'disabled' ) ); } echo '
      '; echo '
      '; } else { ?>

      add_guest_author_cap ) ) { $add_new_url = admin_url( "post-new.php?post_type={$this->post_type}" ); ?>
      prepare_items(); $cap_list_table->display(); ?>
      post_status, array( 'pending', 'publish', 'draft' ) ) ) { $button_text = $this->labels['update_item']; } else { $button_text = $this->labels['add_new_item']; } submit_button( $button_text, 'primary', 'publish', false ); // Secure all of our requests wp_nonce_field( 'guest-author-nonce', 'guest-author-nonce' ); } /** * Meta box for editing this guest author's slug or changing the linked account * * @since 3.0 */ public function metabox_manage_guest_author_slug(): void { global $post; $pm_key = $this->get_post_meta_key( 'user_login' ); $existing_slug = get_post_meta( $post->ID, $pm_key, true ); echo ''; // Taken from grist_authors. $linked_account_key = $this->get_post_meta_key( 'linked_account' ); $linked_account = get_post_meta( $post->ID, $linked_account_key, true ); if ( $user = get_user_by( 'login', $linked_account ) ) { $linked_account_id = $user->ID; } else { $linked_account_id = -1; } // If user_login is the same as linked account, don't let the association be removed if ( $linked_account == $existing_slug ) { add_filter( 'wp_dropdown_users', array( $this, 'filter_wp_dropdown_users_to_disable' ) ); } $linked_account_user_ids = wp_list_pluck( $this->get_all_linked_accounts(), 'ID' ); if ( false !== ( $key = array_search( $linked_account_id, $linked_account_user_ids ) ) ) { unset( $linked_account_user_ids[ $key ] ); } echo '

      '; wp_dropdown_users( apply_filters( 'coauthors_guest_author_linked_account_args', array( 'show_option_none' => __( '-- Not mapped --', 'co-authors-plus' ), 'name' => esc_attr( $this->get_post_meta_key( 'linked_account' ) ), // If we're adding an author or if there is no post author (0), then use -1 (which is show_option_none). // We then take -1 on save and convert it back to 0. (#blamenacin) 'selected' => $linked_account_id, // Don't let user accounts to be linked to more than one guest author 'exclude' => $linked_account_user_ids, ) ) ); echo '

      '; remove_filter( 'wp_dropdown_users', array( $this, 'filter_wp_dropdown_users_to_disable' ) ); } /** * Make a wp_dropdown_users disabled * Only applied if the user_login value for the guest author matches its linked account * * @since 3.0 */ public function filter_wp_dropdown_users_to_disable( $output ) { return str_replace( ''; } else { echo ''; } echo ''; } echo ''; } /** * Meta box to display all the pertinent contact details for a Guest Author not linked to * user account. * * @since 3.0 */ public function metabox_manage_guest_author_contact_info(): void { global $post; $fields = $this->get_guest_author_fields( 'contact-info' ); echo ''; foreach ( $fields as $field ) { $pm_key = $this->get_post_meta_key( $field['key'] ); $value = get_post_meta( $post->ID, $pm_key, true ); echo ''; } echo '
      '; echo ''; echo ''; if ( ! isset( $field['input'] ) ) { $field['input'] = 'text'; } $field['input'] = apply_filters( 'coauthors_name_field_type_' . $pm_key, $field['input'] ); if ( $field['input'] === 'checkbox' ) { echo ''; } else { echo ''; } echo '
      '; } /** * Meta box to edit the bio and other biographical details of the Guest Author. * * @since 3.0 */ public function metabox_manage_guest_author_bio(): void { global $post; $fields = $this->get_guest_author_fields( 'about' ); echo ''; foreach ( $fields as $field ) { $pm_key = $this->get_post_meta_key( $field['key'] ); $value = get_post_meta( $post->ID, $pm_key, true ); printf( ' ', esc_attr( $pm_key ), esc_html( $field['label'] ), esc_attr( $pm_key ), esc_textarea( $value ) ); } echo '
      '; } /** * When a guest author is created or updated, we need to properly create * the post_name based on some data provided by the user * * @since 3.0 */ public function manage_guest_author_filter_post_data( $post_data, $original_args ) { if ( $post_data['post_type'] != $this->post_type ) { return $post_data; } // @todo caps check if ( ! isset( $_POST['guest-author-nonce'] ) || ! wp_verify_nonce( $_POST['guest-author-nonce'], 'guest-author-nonce' ) ) { return $post_data; } // Validate the display name if ( empty( $_POST['cap-display_name'] ) ) { wp_die( esc_html__( 'Guest authors cannot be created without display names.', 'co-authors-plus' ) ); } $post_data['post_title'] = sanitize_text_field( $_POST['cap-display_name'] ); $slug = sanitize_title( get_post_meta( $original_args['ID'], $this->get_post_meta_key( 'user_login' ), true ) ); if ( ! $slug ) { $slug = sanitize_title( $_POST['cap-display_name'] ); } // Uh oh, no guest authors without slugs if ( ! $slug ) { wp_die( esc_html__( 'Guest authors cannot be created without display names.', 'co-authors-plus' ) ); } $post_data['post_name'] = $this->get_post_meta_key( $slug ); // Guest authors can't be created with the same user_login as a user $user_nicename = str_replace( 'cap-', '', $slug ); $user = get_user_by( 'slug', $user_nicename ); if ( $user && is_user_member_of_blog( $user->ID, get_current_blog_id() ) && $user->user_login != get_post_meta( $original_args['ID'], $this->get_post_meta_key( 'linked_account' ), true ) ) { // if user has selected to link account to matching user we don't have to bail if ( isset( $_POST['cap-linked_account'] ) && (int) $_POST['cap-linked_account'] === $user->ID ) { return $post_data; } wp_die( esc_html__( 'There is a WordPress user with the same username as this guest author, please go back and link them in order to update.', 'co-authors-plus' ) ); } // Guest authors can't have the same post_name value $guest_author = $this->get_guest_author_by( 'post_name', $post_data['post_name'] ); if ( $guest_author && $guest_author->ID != $original_args['ID'] ) { wp_die( esc_html__( 'Display name conflicts with another guest author display name.', 'co-authors-plus' ) ); } return $post_data; } /** * Save the various meta fields associated with our guest author model * * @since 3.0 */ public function manage_guest_author_save_meta_fields( $post_id, $post ): void { global $coauthors_plus; if ( $post->post_type != $this->post_type ) { return; } // @todo caps check if ( ! isset( $_POST['guest-author-nonce'] ) || ! wp_verify_nonce( $_POST['guest-author-nonce'], 'guest-author-nonce' ) ) { return; } // Save our data to post meta $author_fields = $this->get_guest_author_fields(); foreach ( $author_fields as $author_field ) { $key = $this->get_post_meta_key( $author_field['key'] ); // 'user_login' should only be saved on post update if it doesn't exist if ( 'user_login' == $author_field['key'] && ! get_post_meta( $post_id, $key, true ) ) { $display_name_key = $this->get_post_meta_key( 'display_name' ); $temp_slug = sanitize_title( $_POST[ $display_name_key ] ); // phpcs:ignore update_post_meta( $post_id, $key, $temp_slug ); continue; } if ( 'linked_account' == $author_field['key'] ) { $linked_account_key = $this->get_post_meta_key( 'linked_account' ); if ( ! empty( $_POST[ $linked_account_key ] ) ) { $user_id = (int) $_POST[ $linked_account_key ]; } else { continue; } $user = get_user_by( 'id', $user_id ); if ( $user_id > 0 && is_object( $user ) ) { $user_login = $user->user_login; } else { $user_login = ''; } update_post_meta( $post_id, $key, $user_login ); continue; } if ( isset( $author_field['input'] ) && 'checkbox' === $author_field['input'] && ! isset( $_POST[ $key ] ) ) { delete_post_meta( $post_id, $key ); } if ( ! isset( $_POST[ $key ] ) ) { continue; } if ( isset( $author_field['sanitize_function'] ) && is_callable( $author_field['sanitize_function'] ) ) { $value = call_user_func( $author_field['sanitize_function'], $_POST[ $key ] ); } else { $value = sanitize_text_field( $_POST[ $key ] ); } update_post_meta( $post_id, $key, $value ); } $author = $this->get_guest_author_by( 'ID', $post_id ); $author_term = $coauthors_plus->update_author_term( $author ); // Add the author as a post term wp_set_post_terms( $post_id, array( $author_term->slug ), $coauthors_plus->coauthor_taxonomy ); // Explicitly clear all caches, to remove negative caches that may have existed prior to this // Guest Author's creation / update $this->delete_guest_author_cache( $post_id ); } /** * Return a simulated WP_User object based on the post ID * of a guest author * * @since 3.0 * * @param string $key Key to search by (login,email) * @param string $value Value to search for * @param object|false $coauthor The guest author on success, false on failure */ public function get_guest_author_by( $key, $value, $force = false ) { global $wpdb; $cache_key = $this->get_cache_key( $key, $value ); if ( ! $force && false !== ( $retval = wp_cache_get( $cache_key, self::$cache_group ) ) ) { // Properly catch our false condition cache if ( is_object( $retval ) ) { return $retval; } return false; } switch ( $key ) { case 'ID': case 'id': $query = $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE ID=%d AND post_type = %s", $value, $this->post_type ); $post_id = $wpdb->get_var( $query ); // phpcs:ignore if ( empty( $post_id ) ) { $post_id = '0'; } break; case 'user_nicename': case 'post_name': $value = $this->get_post_meta_key( $value ); $query = $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name=%s AND post_type = %s", $value, $this->post_type ); $post_id = $wpdb->get_var( $query ); // phpcs:ignore if ( empty( $post_id ) ) { $post_id = '0'; } break; case 'login': case 'user_login': case 'linked_account': case 'user_email': if ( 'login' == $key ) { $key = 'user_login'; } // Ensure we aren't doing the lookup by the prefixed value if ( 'user_login' == $key ) { $value = preg_replace( '#^cap\-#', '', sanitize_title_for_query( $value ) ); } $query = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key=%s AND meta_value=%s;", $this->get_post_meta_key( $key ), $value ); $post_id = $wpdb->get_var( $query ); // phpcs:ignore if ( empty( $post_id ) ) { if ( 'user_login' == $key ) { return $this->get_guest_author_by( 'post_name', $value ); // fallback to post_name in case the guest author isn't a linked account } $post_id = '0'; } break; default: $post_id = '0'; break; } if ( ! $post_id ) { // Best hacky way to cache the false condition wp_cache_set( $cache_key, '0', self::$cache_group ); return false; } $guest_author = array( 'ID' => $post_id, ); // Load the guest author fields $fields = $this->get_guest_author_fields(); foreach ( $fields as $field ) { $key = $field['key']; $pm_key = $this->get_post_meta_key( $field['key'] ); $guest_author[ $key ] = get_post_meta( $post_id, $pm_key, true ); } // Support for non-Latin characters. They're stored as urlencoded slugs $guest_author['user_login'] = urldecode( $guest_author['user_login'] ); // Hack to model the WP_User object $guest_author['user_nicename'] = sanitize_title( $guest_author['user_login'] ); $guest_author['type'] = 'guest-author'; if ( ! isset( $guest_author['nickname'] ) ) { $guest_author['nickname'] = ''; } wp_cache_set( $cache_key, (object) $guest_author, self::$cache_group ); return (object) $guest_author; } /** * Get a thumbnail for a Guest Author object. * * @param object The Guest Author object for which to retrieve the thumbnail. * @param int The desired image size. * @param array|string Optional. An array or string of additional classes. Default null. * @return string The thumbnail image tag, or null if one doesn't exist. */ public function get_guest_author_thumbnail( $guest_author, $size, $class = null ): ?string { // See if the guest author has an avatar if ( ! has_post_thumbnail( $guest_author->ID ) ) { return null; } $args = array( 'class' => "avatar avatar-{$size} photo", ); if ( ! empty( $class ) ) { if ( is_array( $class ) ) { $class = implode( ' ', $class ); } $args['class'] .= " $class"; } $size = array( $size, $size ); $thumbnail = get_the_post_thumbnail( $guest_author->ID, $size, $args ); return $thumbnail; } /** * Get all the meta fields that can be associated with a guest author * * @since 3.0 */ public function get_guest_author_fields( $groups = 'all' ) { $groups = (array) $groups; $global_fields = array( // Hidden (included in object, no UI elements) array( 'key' => 'ID', 'label' => __( 'ID', 'co-authors-plus' ), 'group' => 'hidden', 'input' => 'hidden', ), // Name array( 'key' => 'display_name', 'label' => __( 'Display Name', 'co-authors-plus' ), 'group' => 'name', 'required' => true, ), array( 'key' => 'first_name', 'label' => __( 'First Name', 'co-authors-plus' ), 'group' => 'name', ), array( 'key' => 'last_name', 'label' => __( 'Last Name', 'co-authors-plus' ), 'group' => 'name', ), array( 'key' => 'user_login', 'label' => __( 'Slug', 'co-authors-plus' ), 'group' => 'slug', 'required' => true, ), // Contact info array( 'key' => 'user_email', 'label' => __( 'E-mail', 'co-authors-plus' ), 'group' => 'contact-info', 'input' => 'email', ), array( 'key' => 'linked_account', 'label' => __( 'Linked Account', 'co-authors-plus' ), 'group' => 'slug', ), array( 'key' => 'website', 'label' => __( 'Website', 'co-authors-plus' ), 'group' => 'contact-info', 'input' => 'url', ), array( 'key' => 'description', 'label' => __( 'Biographical Info', 'co-authors-plus' ), 'group' => 'about', 'sanitize_function' => 'wp_filter_post_kses', ), ); $fields_to_return = array(); foreach ( $global_fields as $single_field ) { if ( in_array( $single_field['group'], $groups ) || 'all' === $groups[0] && 'hidden' !== $single_field['group'] ) { $fields_to_return[] = $single_field; } } return apply_filters( 'coauthors_guest_author_fields', $fields_to_return, $groups ); } /** * Gets a postmeta key by prefixing it with 'cap-' * if not yet prefixed * * @since 3.0 */ public function get_post_meta_key( $key ) { if ( 0 !== stripos( $key, 'cap-' ) ) { $key = 'cap-' . $key; } return $key; } /** * Build a cache key for a given key/value * * @param string $key A guest author field * @param string $value The guest author field value * * @return string The generated cache key */ public function get_cache_key( $key, $value ): string { // Normalize $key and $value switch ( $key ) { case 'post_name': $key = 'user_nicename'; if ( 0 === strpos( $value, 'cap-' ) ) { $value = substr( $value, 4 ); } break; case 'login': $key = 'user_login'; break; } $cache_key = md5( 'guest-author-' . $key . '-' . $value ); return $cache_key; } /** * Get all the user accounts that have been linked. * * @since 3.0 */ public function get_all_linked_accounts( $force = false ) { global $wpdb; $cache_key = 'all-linked-accounts'; $retval = wp_cache_get( $cache_key, self::$cache_group ); if ( true === $force || false === $retval ) { $user_logins = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key=%s AND meta_value !=''", $this->get_post_meta_key( 'linked_account' ) ) ); $users = array(); foreach ( $user_logins as $user_login ) { $user = get_user_by( 'login', $user_login ); if ( ! $user ) { continue; } $users[] = array( 'ID' => $user->ID, 'user_login' => $user->user_login, ); } $retval = $users; wp_cache_set( $cache_key, $retval, self::$cache_group ); } return ( $retval ) ?: array(); } /** * Filter update post metadata * Clean caches when any of the values have been changed * * @since 3.0 */ public function filter_update_post_metadata( $retnull, $object_id, $meta_key, $meta_value, $prev_value ) { if ( $this->post_type != get_post_type( $object_id ) ) { return $retnull; } // If the linked_account is changing, invalidate the cache of all linked accounts // Don't regenerate though, as we haven't saved the new value $linked_account_key = $this->get_post_meta_key( 'linked_account' ); if ( $linked_account_key == $meta_key && get_post_meta( $object_id, $linked_account_key, true ) !== $meta_value ) { $this->delete_guest_author_cache( $object_id ); } // If one of the guest author meta values has changed, we'll need to invalidate all keys if ( false !== strpos( $meta_key, 'cap-' ) && get_post_meta( $object_id, $meta_key, true ) !== $meta_value ) { $this->delete_guest_author_cache( $object_id ); } return null; } /** * Delete all the cache values associated with a guest author. * * @since 3.0 * * @param int|object $guest_author The guest author ID or object */ public function delete_guest_author_cache( $id_or_object ): void { if ( is_object( $id_or_object ) ) { $guest_author = $id_or_object; } else { $guest_author = $this->get_guest_author_by( 'ID', $id_or_object, true ); } // Delete the lookup cache associated with each old co-author value $keys = wp_list_pluck( $this->get_guest_author_fields(), 'key' ); array_push( $keys, 'login', 'post_name', 'user_nicename', 'ID', 'id' ); foreach ( $keys as $key ) { $value_key = $key; if ( 'post_name' == $key ) { $value_key = 'user_nicename'; } elseif ( 'login' == $key ) { $value_key = 'user_login'; } elseif ( 'id' == $key ) { $value_key = 'ID'; } $cache_key = $this->get_cache_key( $key, $guest_author->$value_key ); wp_cache_delete( $cache_key, self::$cache_group ); } // Delete the 'all-linked-accounts' cache wp_cache_delete( 'all-linked-accounts', self::$cache_group ); } /** * Create a guest author. * * @param $args array Author args. Required keys to create author: 'display_name' and 'user_email'. * * @since 3.0 * @return int|WP_Error The ID of the created guest author, or a WP_Error object if the author could not be created. */ public function create( $args ) { global $coauthors_plus; // Validate the arguments that have been passed $fields = $this->get_guest_author_fields(); foreach ( $fields as $field ) { // Make sure required fields are there if ( ! empty( $field['required'] ) && empty( $args[ $field['key'] ] ) ) { /* translators: Name of a form field. */ return new WP_Error( 'field-required', sprintf( __( '%s is a required field', 'co-authors-plus' ), $field['key'] ) ); } // The user login field shouldn't collide with any existing users if ( 'user_login' == $field['key'] && $existing_coauthor = $coauthors_plus->get_coauthor_by( 'user_login', $args['user_login'], true ) ) { if ( 'guest-author' == $existing_coauthor->type ) { return new WP_Error( 'duplicate-field', __( 'user_login cannot duplicate existing guest author or mapped user', 'co-authors-plus' ) ); } } } // Create the primary post object $new_post = array( 'post_title' => $args['display_name'], 'post_name' => sanitize_title( $this->get_post_meta_key( $args['user_login'] ) ), 'post_type' => $this->post_type, ); $post_id = wp_insert_post( $new_post, true ); if ( is_wp_error( $post_id ) ) { return $post_id; } // Add all the fields for the new guest author. foreach ( $fields as $field ) { $key = $field['key']; if ( empty( $args[ $key ] ) ) { continue; } $pm_key = $this->get_post_meta_key( $key ); update_post_meta( $post_id, $pm_key, $args[ $key ] ); } // Attach the avatar / featured image. if ( ! empty( $args['avatar'] ) ) { set_post_thumbnail( $post_id, $args['avatar'] ); } // Make sure the author term exists and that we're assigning it to this post type $author_term = $coauthors_plus->update_author_term( $this->get_guest_author_by( 'ID', $post_id ) ); wp_set_post_terms( $post_id, array( $author_term->slug ), $coauthors_plus->coauthor_taxonomy ); // Explicitly clear all caches, to remove negative caches that may have existed prior to this // Guest Author's creation $this->delete_guest_author_cache( $post_id ); return $post_id; } /** * Delete a guest author * * @since 3.0 * * @param int $post_id The ID for the guest author profile * @param string $reassign_to User login value for the co-author to reassign posts to * @return bool|WP_Error $success True on success, WP_Error on a failure */ public function delete( $id, $reassign_to = false ) { global $coauthors_plus; $guest_author = $this->get_guest_author_by( 'ID', $id ); if ( ! $guest_author ) { return new WP_Error( 'guest-author-missing', __( 'Guest author does not exist', 'co-authors-plus' ) ); } $guest_author_term = $coauthors_plus->get_author_term( $guest_author ); if ( $reassign_to ) { // We're reassigning the guest author's posts user to its linked account if ( $guest_author->linked_account == $reassign_to ) { $reassign_to_author = get_user_by( 'login', $reassign_to ); } else { $reassign_to_author = $coauthors_plus->get_coauthor_by( 'user_login', $reassign_to ); } if ( ! $reassign_to_author ) { return new WP_Error( 'reassign-to-missing', __( 'Reassignment co-author does not exist', 'co-authors-plus' ) ); } $reassign_to_term = $coauthors_plus->get_author_term( $reassign_to_author ); // In the case where the guest author and its linked account shared the same term, we don't want to reassign if ( $guest_author_term->term_id != $reassign_to_term->term_id ) { wp_delete_term( $guest_author_term->term_id, $coauthors_plus->coauthor_taxonomy, array( 'default' => $reassign_to_term->term_id, 'force_default' => true, ) ); } } else { wp_delete_term( $guest_author_term->term_id, $coauthors_plus->coauthor_taxonomy ); } // Delete the guest author profile wp_delete_post( $guest_author->ID, true ); // Make sure all the caches are reset. $this->delete_guest_author_cache( $guest_author ); return true; } /** * Create a guest author from an existing WordPress user * * @since 3.0 * * @param int $user_id ID for a WordPress user * @return int|WP_Error $retval ID for the new guest author on success, WP_Error on failure */ public function create_guest_author_from_user_id( $user_id ) { $user = get_user_by( 'id', $user_id ); if ( ! $user ) { return new WP_Error( 'invalid-user', __( 'No user exists with that ID', 'co-authors-plus' ) ); } $guest_author = array(); foreach ( $this->get_guest_author_fields() as $field ) { $key = $field['key']; if ( ! empty( $user->$key ) ) { $guest_author[ $key ] = $user->$key; } else { $guest_author[ $key ] = ''; } } // Don't need the old user ID. unset( $guest_author['ID'] ); // Retain the user mapping and try to produce a unique user_login based on the name. $guest_author['linked_account'] = $guest_author['user_login']; if ( ! empty( $guest_author['display_name'] ) && $guest_author['display_name'] != $guest_author['user_login'] ) { $guest_author['user_login'] = sanitize_title( $guest_author['display_name'] ); } elseif ( ! empty( $guest_author['first_name'] ) && ! empty( $guest_author['last_name'] ) ) { $guest_author['user_login'] = sanitize_title( $guest_author['first_name'] . ' ' . $guest_author['last_name'] ); } $retval = $this->create( $guest_author ); return $retval; } /** * Guest authors must have Display Names * * @since 3.0 */ public function filter_wp_insert_post_empty_content( $maybe_empty, $postarr ) { if ( $this->post_type != $postarr['post_type'] ) { return $maybe_empty; } if ( empty( $postarr['post_title'] ) ) { return true; } return $maybe_empty; } /** * On the User Management view, add action links to create or edit * guest author profiles * * @since 3.0 * * @param array $actions The existing actions to perform on a user * @param object $user_object A WP_User object * @return array $actions Modified actions */ public function filter_user_row_actions( $actions, $user_object ): array { if ( ! current_user_can( $this->list_guest_authors_cap ) || is_network_admin() ) { return $actions; } $new_actions = array(); if ( $guest_author = $this->get_guest_author_by( 'linked_account', $user_object->user_login ) ) { $edit_guest_author_link = get_edit_post_link( $guest_author->ID ); $new_actions['edit-guest-author'] = '' . __( 'Edit Profile', 'co-authors-plus' ) . ''; } else { $query_args = array( 'action' => 'cap-create-guest-author', 'user_id' => $user_object->ID, 'nonce' => wp_create_nonce( 'create-guest-author' ), ); $create_guest_author_link = add_query_arg( array_map( 'rawurlencode', $query_args ), admin_url( $this->parent_page ) ); if ( apply_filters( 'coauthors_show_create_profile_user_link', false ) ) { $new_actions['create-guest-author'] = '' . __( 'Create Profile', 'co-authors-plus' ) . ''; } } return $new_actions + $actions; } /** * Filter 'get_avatar' to replace with our own avatar if one exists * * @since 3.0 */ public function filter_get_avatar( $avatar, $id_or_email, $size, $default ) { if ( is_object( $id_or_email ) || ! is_email( $id_or_email ) ) { return $avatar; } // See if this matches a guest author $guest_author = $this->get_guest_author_by( 'user_email', $id_or_email ); if ( ! $guest_author ) { return $avatar; } $thumbnail = $this->get_guest_author_thumbnail( $guest_author, $size ); if ( $thumbnail ) { return $thumbnail; } return $avatar; } /** * Filter the URL used in functions like the_author_posts_link() * * @since 3.0 */ public function filter_author_link( $link, $author_id, $author_nicename ): ?string { // If we're using this at the top of the loop on author.php, // our queried object should be set correctly if ( ! $author_nicename && is_author() && get_queried_object() ) { $author_nicename = get_queried_object()->user_nicename; } if ( empty( $link ) ) { $link = add_query_arg( 'author_name', rawurlencode( $author_nicename ), home_url() ); } else { global $wp_rewrite; $link = $wp_rewrite->get_author_permastruct(); if ( $link ) { $link = home_url( user_trailingslashit( str_replace( '%author%', $author_nicename, $link ) ) ); } else { $link = add_query_arg( 'author_name', rawurlencode( $author_nicename ), home_url() ); } } return $link; } /** * Filter Author Feed Link for non-native authors. * * @since 3.1 * * @param string $feed_link Required. Original feed link for the author. * @param string $feed Required. Type of feed being generated. * @return string Feed link for the author. */ public function filter_author_feed_link( $feed_link, $feed ): string { if ( ! is_author() ) { return $feed_link; } // Get author, then check if author is guest-author because // that's the only type that will need to be adjusted $author = get_queried_object(); if ( $author === null || 'guest-author' != $author->type ) { return $feed_link; } // The next section is similar to // get_author_feed_link() in wp-includes/link-template.php $permalink_structure = get_option( 'permalink_structure' ); if ( empty( $feed ) ) { $feed = get_default_feed(); } if ( '' == $permalink_structure ) { $link = home_url( "?feed=$feed&author=" . $author->ID ); } else { $link = get_author_posts_url( $author->ID ); $feed_link = ( get_default_feed() === $feed ) ? 'feed' : "feed/$feed"; $link = trailingslashit( $link ) . user_trailingslashit( $feed_link, 'feed' ); } return $link; } /** * Filter Personal Data Exporters to add Guest Author exporter * * @since 3.3.1 */ public function filter_personal_data_exporter( $exporters ) { $exporters['cap-guest-author'] = array( 'exporter_friendly_name' => __( 'Guest Author', 'co-authors-plus' ), 'callback' => array( $this, 'personal_data_exporter' ), ); return $exporters; } /** * Finds and exports personal data associated with an email address for guest authors * * @since 3.3.1 * * @param string $email_address The guest author email address. * @return array An array of personal data. */ public function personal_data_exporter( $email_address ): array { $email_address = trim( $email_address ); $data_to_export = array(); $author = $this->get_guest_author_by( 'user_email', $email_address ); if ( ! $author ) { return array( 'data' => array(), 'done' => true, ); } $author_data = array( 'ID' => __( 'ID', 'co-authors-plus' ), 'user_login' => __( 'Login Name', 'co-authors-plus' ), 'display_name' => __( 'Display Name', 'co-authors-plus' ), 'user_email' => __( 'Email', 'co-authors-plus' ), 'first_name' => __( 'First Name', 'co-authors-plus' ), 'last_name' => __( 'Last Name', 'co-authors-plus' ), 'website' => __( 'Website', 'co-authors-plus' ), 'aim' => __( 'AIM', 'co-authors-plus' ), 'yahooim' => __( 'Yahoo IM', 'co-authors-plus' ), 'jabber' => __( 'Jabber / Google Talk', 'co-authors-plus' ), 'description' => __( 'Biographical Info', 'co-authors-plus' ), ); $author_data_to_export = array(); foreach ( $author_data as $key => $name ) { if ( empty( $author->$key ) ) { continue; } $author_data_to_export[] = array( 'name' => $name, 'value' => $author->$key, ); } /** * Filters extra data to allow plugins add data related to guest author * * @since 3.3.1 * * @param array $extra_data An empty array to be populated with extra data. * @param int $author->ID The guest author ID * @param string $email_address The guest author email address */ $extra_data = apply_filters( 'coauthors_guest_author_personal_export_extra_data', array(), $author->ID, $email_address ); if ( is_array( $extra_data ) && ! empty( $extra_data ) ) { $author_data_to_export = array_merge( $author_data_to_export, $extra_data ); } $data_to_export[] = array( 'group_id' => 'cap-guest-author', 'group_label' => __( 'Guest Author', 'co-authors-plus' ), 'item_id' => "cap-guest-author-{$author->ID}", 'data' => $author_data_to_export, ); return array( 'data' => $data_to_export, 'done' => true, ); } /** * Filters the guest author menu item attributes * * @param array $atts { * The HTML attributes applied to the menu item's `` element, empty strings are ignored. * * @type string $title Title attribute. * @type string $target Target attribute. * @type string $rel The rel attribute. * @type string $href The href attribute. * @type string $aria-current The aria-current attribute. * } * @param WP_Post $menu_item The current menu item object. * @return array */ public function filter_nav_menu_attributes( $atts, $menu_item ): array { if ( ! empty( $menu_item->object ) && 'guest-author' === $menu_item->object ) { $author = $this->get_guest_author_by( 'ID', $menu_item->object_id ); if ( ! empty( $author->type ) && $author->type === 'guest-author' ) { $atts['href'] = get_author_posts_url( $author->ID, $author->user_nicename ); } } return $atts; } } php/class-coauthors-iterator.php000060400000003641147177171730013024 0ustar00ID; } if ( ! $postID ) { trigger_error( esc_html( 'No post ID provided for CoAuthorsIterator constructor. Are you not in a loop or is $post not set?' ) ); // return null; } $this->original_authordata = $authordata; $this->current_author = $authordata; $this->authordata_array = get_coauthors( $postID ); $this->count = count( $this->authordata_array ); } public function iterate(): bool { global $authordata; $this->position++; // At the end of the loop. if ( $this->position > $this->count - 1 ) { $authordata = $this->original_authordata; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited $this->current_author = $this->original_authordata; $this->position = - 1; return false; } // At the beginning of the loop. if ( 0 === $this->position && ! empty( $authordata ) ) { $this->original_authordata = $authordata; } $authordata = $this->authordata_array[ $this->position ]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited $this->current_author = $this->authordata_array[ $this->position ]; return true; } public function get_position() { return $this->position === - 1 ? false : $this->position; } public function is_last(): bool { return $this->position === $this->count - 1; } public function is_first(): bool { return $this->position === 0; } public function count(): int { return $this->count; } public function get_all() { return $this->authordata_array; } } php/class-coauthors-plus.php000060400000204573147177171730012165 0ustar00is_guest_authors_enabled() ) { require_once dirname( COAUTHORS_PLUS_FILE ) . '/php/class-coauthors-guest-authors.php'; $this->guest_authors = new CoAuthors_Guest_Authors(); if ( apply_filters( 'coauthors_guest_authors_force', false ) ) { $this->force_guest_authors = true; } } // Maybe automatically apply our template tags if ( apply_filters( 'coauthors_auto_apply_template_tags', false ) ) { global $coauthors_plus_template_filters; $coauthors_plus_template_filters = new CoAuthors_Template_Filters(); } } /** * Determine if block editor sidebar integration should be loaded. * * @param WP_Post|int|null $post Post ID or object, null to use global. * @return bool */ public function is_block_editor( $post = null ): bool { $screen = get_current_screen(); // Pre-5.0 compatibility if ( method_exists( $screen, 'is_block_editor' ) ) { return $screen->is_block_editor(); } return false; } /** * When filter is set to enable block editor integration, enqueue assets * for posts and users where Co Authors is enabled */ public function enqueue_sidebar_plugin_assets(): void { if ( $this->is_post_type_enabled() && $this->current_user_can_set_authors() ) { $asset = require dirname( COAUTHORS_PLUS_FILE ) . '/build/index.asset.php'; wp_register_script( 'coauthors-sidebar-js', plugins_url( 'build/index.js', COAUTHORS_PLUS_FILE ), $asset['dependencies'], $asset['version'] ); wp_register_style( 'coauthors-sidebar-css', plugins_url( 'build/style-index.css', COAUTHORS_PLUS_FILE ), '', $asset['version'] ); wp_set_script_translations( 'coauthors-sidebar-js', 'co-authors-plus', dirname( COAUTHORS_PLUS_FILE ) . '/languages' ); wp_enqueue_script( 'coauthors-sidebar-js' ); wp_enqueue_style( 'coauthors-sidebar-css' ); } } /** * Register the 'author' taxonomy and add post type support */ public function action_init_late(): void { // Register new taxonomy so that we can store all the relationships. $args = array( 'hierarchical' => false, 'labels' => array( 'name' => __( 'Authors', 'co-authors-plus' ), 'all_items' => __( 'All Authors', 'co-authors-plus' ), ), 'query_var' => false, 'rewrite' => false, 'public' => false, 'sort' => true, 'args' => array( 'orderby' => 'term_order' ), 'show_ui' => false, 'show_in_rest' => true, 'rest_base' => 'coauthors', ); // If we use the nasty SQL query, we need our custom callback. Otherwise, we still need to flush cache. if ( apply_filters( 'coauthors_plus_should_query_post_author', true ) ) { $args['update_count_callback'] = array( $this, '_update_users_posts_count' ); } else { add_action( 'edited_term_taxonomy', array( $this, 'action_edited_term_taxonomy_flush_cache' ), 10, 2 ); } register_taxonomy( $this->coauthor_taxonomy, $this->supported_post_types(), $args ); } /** * Initialize the plugin for the admin */ public function admin_init(): void { global $pagenow; // Add the main JS script and CSS file add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Add necessary JS variables add_action( 'admin_head', array( $this, 'js_vars' ) ); // Hooks to add additional co-authors to 'authors' column to edit page add_filter( 'manage_posts_columns', array( $this, '_filter_manage_posts_columns' ) ); add_filter( 'manage_pages_columns', array( $this, '_filter_manage_posts_columns' ) ); add_action( 'manage_posts_custom_column', array( $this, '_filter_manage_posts_custom_column' ) ); add_action( 'manage_pages_custom_column', array( $this, '_filter_manage_posts_custom_column' ) ); // Add quick-edit co-author select field add_action( 'quick_edit_custom_box', array( $this, '_action_quick_edit_custom_box' ), 10, 2 ); // Hooks to modify the published post number count on the Users WP List Table add_filter( 'manage_users_columns', array( $this, '_filter_manage_users_columns' ) ); add_filter( 'manage_users_custom_column', array( $this, '_filter_manage_users_custom_column' ), 10, 3 ); // Apply some targeted filters add_action( 'load-edit.php', array( $this, 'load_edit' ) ); } /** * Get the list of supported post types. * * By default, this is the built-in and custom post types that have authors. * * @since 3.6.0 * * @return array Supported post types. */ public function supported_post_types(): array { $post_types = array_values( get_post_types() ); $excluded_built_in = array( 'revision', 'attachment', 'customize_changeset', 'wp_template', 'wp_template_part', ); foreach ( $post_types as $key => $name ) { if ( ! post_type_supports( $name, 'author' ) || in_array( $name, $excluded_built_in, true ) ) { unset( $post_types[ $key ] ); } } /** * Filter the list of supported post types. * * @param array $post_types Post types. */ $supported_post_types = (array) apply_filters( 'coauthors_supported_post_types', $post_types ); // Set class property for back-compat. $this->supported_post_types = $supported_post_types; return $supported_post_types; } /** * Check whether the guest authors functionality is enabled or not * Guest authors can be disabled entirely with: * add_filter( 'coauthors_guest_authors_enabled', '__return_false' ) * * @since 3.0 * * @return bool */ public function is_guest_authors_enabled(): bool { return apply_filters( 'coauthors_guest_authors_enabled', true ); } /** * Get a guest author object by a specific type of key * * @param string $key Key to search by (slug,email) * @param string $value Value to search for * @return object|false The co-author on success, false on failure */ public function get_coauthor_by( $key, $value, $force = false ) { // If Guest Authors are enabled, prioritize those profiles if ( $this->is_guest_authors_enabled() && isset( $this->guest_authors ) ) { $guest_author = $this->guest_authors->get_guest_author_by( $key, $value, $force ); if ( is_object( $guest_author ) ) { if ( isset( $guest_author->linked_account ) ) { $user = $this->get_user_by( 'login', $guest_author->linked_account ); if ( null !== $user ) { $guest_author->wp_user = $user; } } return $guest_author; } else { // Guest Author was not found, so let's see if we are searching for a WP_User. $user = $this->get_user_by( $key, $value ); if ( null === $user ) { return false; } // At this point we have a valid $user. $user->type = 'wpuser'; $guest_author = $this->guest_authors->get_guest_author_by( 'linked_account', $user->user_login ); if ( is_object( $guest_author ) ) { $guest_author->wp_user = $user; $user = $guest_author; } return $user; } } else { $user = $this->get_user_by( $key, $value ); if ( null === $user ) { return false; } $user->type = 'wpuser'; return $user; } } /** * Searches for authors by way of the WP_User table using a specific list of data points. If login or slug * are provided as search parameters, this function will remove `cap-` from the search value, if present. * * @param string $key Key to search by, i.e. 'id', 'login', 'user_login', 'email', 'user_email', 'user_nicename'. * @param string $value Value to search for. * * @return WP_User|null */ protected function get_user_by( $key, $value ) { $acceptable_keys = [ 'id' => 'id', 'login' => 'login', 'user_login' => 'login', 'email' => 'email', 'user_email' => 'email', 'user_nicename' => 'slug', ]; if ( ! array_key_exists( $key, $acceptable_keys ) ) { return null; } $key = $acceptable_keys[ $key ]; $user = get_user_by( $key, $value ); if ( ! $user && ( 'login' === $key || 'slug' === $key ) ) { // Re-try lookup without prefixed value if no results found. $value = preg_replace( '#^cap\-#', '', $value ); $user = get_user_by( $key, $value ); } if ( false === $user ) { return null; } return $user; } /** * Whether Co-Authors Plus is enabled for this post type. * Must be called after init * * @since 3.0 * * @param string $post_type The name of the post type we're considering * @return bool Whether co-authors are enabled for the post type. */ public function is_post_type_enabled( $post_type = null ): bool { if ( ! $post_type ) { $post_type = get_post_type(); if ( ! $post_type && is_admin() ) { $post_type = get_current_screen()->post_type; } } return in_array( $post_type, $this->supported_post_types() ); } /** * Removes the standard WordPress 'Author' box. * We don't need it because the Co-Authors Plus one is way cooler. */ public function remove_authors_box(): void { if ( $this->is_post_type_enabled() ) { remove_meta_box( $this->coreauthors_meta_box_name, get_post_type(), 'normal' ); } } /** * Adds a custom 'Authors' box */ public function add_coauthors_box(): void { if ( $this->is_post_type_enabled() && $this->current_user_can_set_authors() ) { if ( false === $this->is_block_editor() ) { add_meta_box( $this->coauthors_meta_box_name, apply_filters( 'coauthors_meta_box_title', __( 'Authors', 'co-authors-plus' ) ), array( $this, 'coauthors_meta_box' ), get_post_type(), apply_filters( 'coauthors_meta_box_context', 'side' ), apply_filters( 'coauthors_meta_box_priority', 'high' ) ); } } } /** * Callback for adding the custom 'Authors' box */ public function coauthors_meta_box( $post ): void { global $post, $coauthors_plus, $current_screen; $post_id = $post->ID; $default_user = apply_filters( 'coauthors_default_author', wp_get_current_user() ); // @daniel, $post_id and $post->post_author are always set when a new post is created due to auto draft, // and the else case below was always able to properly assign users based on wp_posts.post_author, // but that's not possible with force_guest_authors = true. if ( ! $post_id || ( ! $post->post_author && ! $coauthors_plus->force_guest_authors ) || ( 'post' === $current_screen->base && 'add' === $current_screen->action ) ) { $coauthors = array(); // If guest authors is enabled, try to find a guest author attached to this user ID if ( $this->is_guest_authors_enabled() ) { $coauthor = $coauthors_plus->guest_authors->get_guest_author_by( 'linked_account', $default_user->user_login ); if ( $coauthor ) { $coauthors[] = $coauthor; } } // If the above block was skipped, or if it failed to find a guest author, use the current // logged-in user, so long as force_guest_authors is false. If force_guest_authors = true, we are // OK with having an empty authoring box. if ( ! $coauthors_plus->force_guest_authors && empty( $coauthors ) ) { if ( is_array( $default_user ) ) { $coauthors = $default_user; } else { $coauthors[] = $default_user; } } } else { $coauthors = get_coauthors(); } $count = 0; if ( ! empty( $coauthors ) ) : ?>
        ID, array( 'user_type' => $user_type ) ); ?>
      • ID ); ?>

      Note: To edit post authors, please enable JavaScript or use a JavaScript-capable browser', 'co-authors-plus' ), array( 'strong' => array() ) ); ?>

      Remove to remove them.', 'co-authors-plus' ), array( 'strong' => array() ) ); ?>

      is_post_type_enabled() ) { /* * The author dropdown isn't displayed if wp_dropdown_users( $args ) returns an empty string. * It will return an empty string if the user query returns an empty array. * We can force it return an empty array by changing $args to include only the user ID 0 which doesn't exist. * We can target the $args specific to Quick Edit using the filter quick_edit_dropdown_authors_args. * See https://github.com/Automattic/Co-Authors-Plus/issues/1033. */ add_filter( 'quick_edit_dropdown_authors_args', static fn() => [ 'include' => [ 0 ] ] ); } } /** * Add co-authors to 'authors' column on edit pages * * @param array $post_columns */ public function _filter_manage_posts_columns( $posts_columns ) { $new_columns = array(); if ( ! $this->is_post_type_enabled() ) { return $posts_columns; } foreach ( $posts_columns as $key => $value ) { $new_columns[ $key ] = $value; if ( 'title' === $key ) { $new_columns['coauthors'] = __( 'Authors', 'co-authors-plus' ); } if ( $this->coauthor_taxonomy === $key ) { unset( $new_columns[ $key ] ); } } return $new_columns; } /** * Insert co-authors into post rows on Edit Page * * @param string $column_name */ public function _filter_manage_posts_custom_column( $column_name ): void { if ( 'coauthors' === $column_name ) { global $post; $authors = get_coauthors( $post->ID ); $count = 1; foreach ( $authors as $author ) : $args = array( 'author_name' => $author->user_nicename, ); if ( 'post' !== $post->post_type ) { $args['post_type'] = $post->post_type; } $author_filter_url = add_query_arg( array_map( 'rawurlencode', $args ), admin_url( 'edit.php' ) ); ?>
      display_name ); ?> $column_title ) { if ( 'posts' === $column_name ) { $new_columns['coauthors_post_count'] = __( 'Posts', 'co-authors-plus' ); } else { $new_columns[ $column_name ] = $column_title; } } return $new_columns; } /** * Provide an accurate count when looking up the number of published posts for a user */ public function _filter_manage_users_custom_column( $value, $column_name, $user_id ) { if ( 'coauthors_post_count' !== $column_name ) { return $value; } // We filter count_user_posts() so it provides an accurate number $numposts = count_user_posts( $user_id ); // phpcs:ignore $user = get_user_by( 'id', $user_id ); if ( $numposts > 0 ) { $value .= ""; $value .= $numposts; $value .= ''; } else { $value .= 0; } return $value; } /** * Quick Edit co-authors box. */ public function _action_quick_edit_custom_box( $column_name, $post_type ): void { if ( 'coauthors' !== $column_name || ! $this->is_post_type_enabled( $post_type ) || ! $this->current_user_can_set_authors() ) { return; } ?> get_results( "SELECT term_id FROM $wpdb->term_taxonomy WHERE term_taxonomy_id IN ($tt_ids)" ); // phpcs:ignore foreach ( (array) $term_ids as $term_id_result ) { $term = get_term_by( 'id', $term_id_result->term_id, $this->coauthor_taxonomy ); $this->update_author_term_post_count( $term ); } $tt_ids = explode( ', ', $tt_ids ); clean_term_cache( $tt_ids, '', false ); } /** * If we're forcing Co-Authors Plus to just do taxonomy queries, we still * need to flush our special cache after a taxonomy term has been updated * * @since 3.1 */ public function action_edited_term_taxonomy_flush_cache( $tt_id, $taxonomy ) { global $wpdb; if ( $this->coauthor_taxonomy != $taxonomy ) { return; } $term_id = $wpdb->get_results( $wpdb->prepare( "SELECT term_id FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = %d ", $tt_id ) ); $term = get_term_by( 'id', $term_id[0]->term_id, $taxonomy ); $coauthor = $this->get_coauthor_by( 'user_nicename', $term->slug ); if ( ! $coauthor ) { return new WP_Error( 'missing-coauthor', __( 'No co-author exists for that term', 'co-authors-plus' ) ); } wp_cache_delete( 'author-term-' . $coauthor->user_nicename, 'co-authors-plus' ); } /** * Update the post count associated with an author term * * @since 3.0 * * @param object $term The co-author term */ public function update_author_term_post_count( $term ) { global $wpdb; $coauthor = $this->get_coauthor_by( 'user_nicename', $term->slug ); if ( ! $coauthor ) { return new WP_Error( 'missing-coauthor', __( 'No co-author exists for that term', 'co-authors-plus' ) ); } $query = "SELECT COUNT({$wpdb->posts}.ID) FROM {$wpdb->posts}"; $query .= " LEFT JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)"; $query .= " LEFT JOIN {$wpdb->term_taxonomy} ON ( {$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->term_taxonomy}.term_taxonomy_id )"; $having_terms_and_authors = $having_terms = $wpdb->prepare( "{$wpdb->term_taxonomy}.term_id = %d", $term->term_id ); if ( 'wpuser' === $coauthor->type ) { $having_terms_and_authors .= $wpdb->prepare( " OR {$wpdb->posts}.post_author = %d", $coauthor->ID ); } $post_types = apply_filters( 'coauthors_count_published_post_types', array( 'post' ) ); $post_types = array_map( 'sanitize_key', $post_types ); $post_types = "'" . implode( "','", $post_types ) . "'"; $query .= " WHERE ({$having_terms_and_authors}) AND {$wpdb->posts}.post_type IN ({$post_types}) AND {$wpdb->posts}.post_status = 'publish'"; $query .= $wpdb->prepare( " GROUP BY {$wpdb->posts}.ID HAVING MAX( IF ( {$wpdb->term_taxonomy}.taxonomy = '%s', IF ( {$having_terms},2,1 ),0 ) ) <> 1 ", $this->coauthor_taxonomy ); //phpcs:ignore $count = $wpdb->query( $query ); // phpcs:ignore $wpdb->update( $wpdb->term_taxonomy, array( 'count' => $count ), array( 'term_taxonomy_id' => $term->term_taxonomy_id ) ); wp_cache_delete( 'author-term-' . $coauthor->user_nicename, 'co-authors-plus' ); } /** * Modify the author query posts SQL to include posts co-authored */ public function posts_join_filter( $join, $query ) { global $wpdb; if ( $query->is_author() ) { $post_type = $query->query_vars['post_type']; if ( 'any' === $post_type ) { $post_type = get_post_types( array( 'exclude_from_search' => false ) ); } if ( ! empty( $post_type ) && ! is_object_in_taxonomy( $post_type, $this->coauthor_taxonomy ) ) { return $join; } if ( empty( $this->having_terms ) ) { return $join; } // Check to see that JOIN hasn't already been added. Props michaelingp and nbaxley $term_relationship_inner_join = " INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)"; $term_relationship_left_join = " LEFT JOIN {$wpdb->term_relationships} AS tr1 ON ({$wpdb->posts}.ID = tr1.object_id)"; $term_taxonomy_join = " INNER JOIN {$wpdb->term_taxonomy} ON ( tr1.term_taxonomy_id = {$wpdb->term_taxonomy}.term_taxonomy_id )"; // 4.6+ uses a LEFT JOIN for tax queries, so we need to check for both. if ( false === strpos( $join, trim( $term_relationship_inner_join ) ) && false === strpos( $join, trim( $term_relationship_left_join ) ) ) { $join .= $term_relationship_left_join; } if ( false === strpos( $join, trim( $term_taxonomy_join ) ) ) { $join .= str_replace( 'INNER JOIN', 'LEFT JOIN', $term_taxonomy_join ); } } return $join; } /** * Modify the author query posts SQL to include posts co-authored * * @param string $where * @param WP_Query $query * * @return string */ public function posts_where_filter( $where, $query ): string { global $wpdb; if ( $query->is_author() ) { $post_type = $query->query_vars['post_type']; if ( 'any' === $post_type ) { $post_type = get_post_types( array( 'exclude_from_search' => false ) ); } if ( ! empty( $post_type ) && ! is_object_in_taxonomy( $post_type, $this->coauthor_taxonomy ) ) { return $where; } if ( $query->get( 'author_name' ) ) { $author_name = sanitize_title( $query->get( 'author_name' ) ); } else { $author_data = get_userdata( $query->get( $this->coauthor_taxonomy ) ); if ( is_object( $author_data ) ) { $author_name = $author_data->user_nicename; } else { return $where; } } $terms = array(); $coauthor = $this->get_coauthor_by( 'user_nicename', $author_name ); if ( $author_term = $this->get_author_term( $coauthor ) ) { $terms[] = $author_term; } // If this co-author has a linked account, we also need to get posts with those terms if ( ! empty( $coauthor->linked_account ) ) { $linked_account = get_user_by( 'login', $coauthor->linked_account ); if ( $guest_author_term = $this->get_author_term( $linked_account ) ) { $terms[] = $guest_author_term; } } // Whether to include the original 'post_author' value in the query. // Don't include it if we're forcing guest authors, or it's obvious our query is for a guest author's posts if ( $this->force_guest_authors || stripos( $where, '.post_author = 0)' ) ) { $maybe_both = false; } else { $maybe_both = apply_filters( 'coauthors_plus_should_query_post_author', true ); } $maybe_both_query = $maybe_both ? '$1 OR' : ''; if ( ! empty( $terms ) ) { $terms_implode = ''; $this->having_terms = ''; foreach ( $terms as $term ) { $terms_implode .= '(' . $wpdb->term_taxonomy . '.taxonomy = \'' . $this->coauthor_taxonomy . '\' AND ' . $wpdb->term_taxonomy . '.term_id = \'' . $term->term_id . '\') OR '; $this->having_terms .= ' ' . $wpdb->term_taxonomy . '.term_id = \'' . $term->term_id . '\' OR '; } $terms_implode = rtrim( $terms_implode, ' OR' ); // We need to check the query is the main query as a new query object would result in the wrong ID $id = is_author() && $query->is_main_query() ? get_queried_object_id() : '\d+'; // If we have an ID, but it's not a "real" ID that means that this isn't the first time the filter has fired and the object_id has already been replaced by a previous run of this filter. We therefore need to replace the 0 // This happens when wp_query::get_posts() is run multiple times. // If previous condition resulted in this being a string there's no point wasting a db query looking for a user. if ( $id !== '\d+' && false === get_user_by( 'id', $id ) ) { $id = '\d+'; } $maybe_both_query = $maybe_both ? '$0 OR' : ''; // add the taxonomy terms to the where query $where = preg_replace( '/\(?\b(?:' . $wpdb->posts . '\.)?post_author\s*(?:=|IN)\s*\(?\d+\)?\)?/', ' (' . $maybe_both_query . ' ' . $terms_implode . ')', $where, 1 ); // if there is a duplicate post_author query parameter, remove the duplicate $where = preg_replace( '/AND\s*\((?:' . $wpdb->posts . '\.)?post_author\s*\=\s*\d+\)/', ' ', $where, 1 ); // When WordPress generates query as 'post_author IN (id)', and there is a numeric $id, replace the often errant $id with the correct one - related to https://core.trac.wordpress.org/ticket/54268 if ( '\d+' !== $id ) { $where = preg_replace( '/\b(?:' . $wpdb->posts . '\.)?post_author\s*IN\s*\(\d+\)/', ' (' . $wpdb->posts . '.post_author = ' . $id . ')', $where, 1 ); } // the block targets the private posts clause (if it exists) if ( is_user_logged_in() && is_author() && get_queried_object_id() !== get_current_user_id() ) { $current_coauthor = $this->get_coauthor_by( 'user_nicename', wp_get_current_user()->user_nicename ); $current_coauthor_term = $this->get_author_term( $current_coauthor ); if ( $current_coauthor_term instanceof \WP_Term ) { $current_user_query = $wpdb->term_taxonomy . '.taxonomy = \'' . $this->coauthor_taxonomy . '\' AND ' . $wpdb->term_taxonomy . '.term_id = \'' . $current_coauthor_term->term_id . '\''; $this->having_terms .= ' ' . $wpdb->term_taxonomy . '.term_id = \'' . $current_coauthor_term->term_id . '\' OR '; $where = preg_replace( '/(\b(?:' . $wpdb->posts . '\.)?post_author\s*=\s*(' . get_current_user_id() . ') )/', $current_user_query . ' ', $where, 1 ); // ' . $wpdb->postmeta . '.meta_id IS NOT NULL AND} } } $this->having_terms = rtrim( $this->having_terms, ' OR' ); } } return $where; } /** * Modify the author query posts SQL to include posts co-authored */ public function posts_groupby_filter( $groupby, $query ) { global $wpdb; if ( $query->is_author() ) { $post_type = $query->query_vars['post_type']; if ( 'any' === $post_type ) { $post_type = get_post_types( array( 'exclude_from_search' => false ) ); } if ( ! empty( $post_type ) && ! is_object_in_taxonomy( $post_type, $this->coauthor_taxonomy ) ) { return $groupby; } if ( $this->having_terms ) { $having = 'MAX( IF ( ' . $wpdb->term_taxonomy . '.taxonomy = \'' . $this->coauthor_taxonomy . '\', IF ( ' . $this->having_terms . ',2,1 ),0 ) ) <> 1 '; $groupby = $wpdb->posts . '.ID HAVING ' . $having; } } return $groupby; } /** * Filters post data before saving to db to set post_author */ public function coauthors_set_post_author_field( $data, $postarr ) { // Bail on autosave if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return $data; } // Bail on revisions if ( ! $this->is_post_type_enabled( $data['post_type'] ) ) { return $data; } // This action happens when a post is saved while editing a post if ( isset( $_REQUEST['coauthors-nonce'], $_POST['coauthors'] ) && is_array( $_POST['coauthors'] ) ) { // phpcs:ignore // rawurlencode() is for encoding co-author name with special characters to compare names when getting co-author. $author = rawurlencode( sanitize_text_field( $_POST['coauthors'][0] ) ); // phpcs:ignore if ( $author ) { $author_data = $this->get_coauthor_by( 'user_nicename', $author ); // If it's a guest author and has a linked account, store that information in post_author // because it'll be the valid user ID if ( 'guest-author' === $author_data->type && ! empty( $author_data->linked_account ) ) { $user = get_user_by( 'login', $author_data->linked_account ); if ( is_object( $user ) ) { $data['post_author'] = $user->ID; } } elseif ( 'wpuser' === $author_data->type ) { $data['post_author'] = $author_data->ID; } } } // If for some reason we don't have the co-authors fields set if ( ! isset( $data['post_author'] ) ) { $user = wp_get_current_user(); $data['post_author'] = $user->ID; } // Allow the 'post_author' to be forced to generic user if it doesn't match any users on the post $data['post_author'] = apply_filters( 'coauthors_post_author_value', $data['post_author'], $postarr['ID'] ); return $data; } /** * Update a post's co-authors on the 'save_post' hook * * @param $post_ID */ public function coauthors_update_post( $post_id, $post ): void { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } if ( ! $this->is_post_type_enabled( $post->post_type ) ) { return; } if ( $this->current_user_can_set_authors() ) { // if current_user_can_set_authors and nonce valid if ( isset( $_POST['coauthors-nonce'], $_POST['coauthors'] ) ) { check_admin_referer( 'coauthors-edit', 'coauthors-nonce' ); $coauthors = (array) $_POST['coauthors']; $coauthors = array_map( 'sanitize_title', $coauthors ); $this->add_coauthors( $post_id, $coauthors ); } } else { // If the user can't set authors and a co-author isn't currently set, we need to explicity set one if ( ! $this->has_author_terms( $post_id ) ) { $user = get_userdata( $post->post_author ); if ( $user ) { $this->add_coauthors( $post_id, array( $user->user_nicename ) ); } } } } public function has_author_terms( $post_id ): bool { $terms = wp_get_object_terms( $post_id, $this->coauthor_taxonomy, array( 'fields' => 'ids' ) ); return ! empty( $terms ) && ! is_wp_error( $terms ); } /** * Add one or more co-authors as bylines for a post * * @param int * @param array * @param bool * @param string */ public function add_coauthors( $post_id, $coauthors, $append = false, $query_type = 'user_nicename' ): bool { global $current_user, $wpdb; $post_id = (int) $post_id; $insert = false; // Best way to persist order if ( $append ) { $field = apply_filters( 'coauthors_post_list_pluck_field', 'user_login' ); $existing_coauthors = wp_list_pluck( get_coauthors( $post_id ), $field ); } else { $existing_coauthors = array(); } // A co-author is always required // If no co-author is provided AND no co-authors are currently set, assign to current user - retain old ones otherwise. if ( empty( $coauthors ) ) { if ( empty( $existing_coauthors ) ) { $coauthors = array( $current_user->user_login ); } else { $coauthors = $existing_coauthors; } } // Set the co-authors $coauthors = array_unique( array_merge( $existing_coauthors, $coauthors ) ); $coauthor_objects = array(); foreach ( $coauthors as &$author_name ) { $field = apply_filters( 'coauthors_post_get_coauthor_by_field', $query_type, $author_name ); $author = $this->get_coauthor_by( $field, $author_name ); $coauthor_objects[] = $author; $term = $this->update_author_term( $author ); if ( is_object( $term ) ) { $author_name = $term->slug; } } wp_set_post_terms( $post_id, $coauthors, $this->coauthor_taxonomy ); // If the original post_author is no longer assigned, // update to the first WP_User $coauthor $post_author_user = get_user_by( 'id', get_post( $post_id )->post_author ); if ( empty( $post_author_user ) || ! in_array( $post_author_user->user_login, $coauthors ) ) { foreach ( $coauthor_objects as $coauthor_object ) { if ( $coauthor_object instanceof WP_User ) { $new_author = $coauthor_object; break; } elseif ( isset( $coauthor_object->wp_user ) && $coauthor_object->wp_user instanceof WP_User ) { $new_author = $coauthor_object->wp_user; break; } } /* * If setting a fresh group of authors for a post, (i.e. $append === false), * then perhaps one of those authors should be a WP_USER. However, * if $append === true, and we are perhaps unable to find a * WP_USER (perhaps none was given), we don't really * care whether post_author should be updated. * */ if ( false === $append && empty( $new_author ) ) { return false; } if ( ! empty( $new_author ) ) { $update = $wpdb->update( $wpdb->posts, array( 'post_author' => $new_author->ID ), array( 'ID' => $post_id ) ); clean_post_cache( $post_id ); if ( is_bool( $update ) ) { return $update; } } } return true; } /** * Action taken when co-author is deleted. * - Co-Author term is removed from all associated posts * - Option to specify alternate co-author in place for each post * * @param delete_id */ public function delete_user_action( $delete_id ): void { global $wpdb; $reassign_id = isset( $_POST['reassign_user'] ) ? absint( $_POST['reassign_user'] ) : false; // phpcs:ignore // If reassign posts, do that -- use coauthors_update_post if ( $reassign_id ) { // Get posts belonging to deleted author $reassign_user = get_user_by( 'id', $reassign_id ); // Set to new guest author if ( is_object( $reassign_user ) ) { $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $delete_id ) ); if ( $post_ids ) { foreach ( $post_ids as $post_id ) { $this->add_coauthors( $post_id, array( $reassign_user->user_nicename ), true ); } } } } $delete_user = get_user_by( 'id', $delete_id ); if ( is_object( $delete_user ) ) { // Delete term $term = $this->get_author_term( $delete_user ); wp_delete_term( $term->term_id, $this->coauthor_taxonomy ); } if ( $this->is_guest_authors_enabled() ) { // Get the deleted user data by user id. $user_data = get_user_by( 'id', $delete_id ); // Get the associated user. $associated_user = $this->guest_authors->get_guest_author_by( 'linked_account', $user_data->data->user_login ); if ( isset( $associated_user->ID ) ) { // Delete associated guest user. $this->guest_authors->delete( $associated_user->ID ); } } } /** * Restrict WordPress from blowing away co-author order when bulk editing terms * * @since 2.6 * @props kingkool68, http://wordpress.org/support/topic/plugin-co-authors-plus-making-authors-sortable * @props kingkool68, http://wordpress.org/support/topic/plugin-co-authors-plus-making-authors-sortable */ public function filter_wp_get_object_terms( $terms, $object_ids, $taxonomies, $args ) { if ( ! isset( $_REQUEST['bulk_edit'] ) || $this->coauthor_taxonomy !== $taxonomies ) { return $terms; } global $wpdb; $orderby = 'ORDER BY tr.term_order'; $order = 'ASC'; $object_ids = (int) $object_ids; $query = $wpdb->prepare( "SELECT t.name, t.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN $wpdb->term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN (%s) AND tr.object_id IN (%s) $orderby $order", $this->coauthor_taxonomy, $object_ids ); //phpcs:ignore $raw_coauthors = $wpdb->get_results( $query ); //phpcs:ignore $terms = array(); foreach ( $raw_coauthors as $author ) { if ( is_array( $args ) && isset( $args['fields'] ) ) { switch ( $args['fields'] ) { case 'names': $terms[] = $author->name; break; case 'tt_ids': $terms[] = $author->term_taxonomy_id; break; case 'ids': $terms[] = (int) $author->term_id; break; case 'all': default: $terms[] = get_term( $author->term_id, $this->coauthor_taxonomy ); break; } } else { $terms[] = get_term( $author->term_id, $this->coauthor_taxonomy ); } } return $terms; } /** * Filter the count_users_posts() core function to include our correct count. * * @param int $count Post count * @param int $user_id WP user ID * @return int Post count */ public function filter_count_user_posts( $count, $user_id ): int { $user = get_userdata( $user_id ); $coauthor = $this->get_coauthor_by( 'user_nicename', $user->user_nicename ); // Return $count if no co-author exists. if ( ! is_object( $coauthor ) ) { return $count; } $term = $this->get_author_term( $coauthor ); if ( is_object( $term ) ) { // Return combined post count, if account is linked. if ( strlen( $coauthor->linked_account ) > 2 ) { return $count + $term->count; } // Otherwise, return the term count. return $term->count; } // Return $count as fallback. return $count; } /** * Checks to see if the current user can set co-authors or not */ public function current_user_can_set_authors() { $current_user = wp_get_current_user(); if ( ! $current_user ) { return false; } // Super admins can do anything if ( function_exists( 'is_super_admin' ) && is_super_admin() ) { return true; } // Instead of using current_user_can(), we need to manually check the allcaps because of filter_user_has_cap $can_set_authors = isset( $current_user->allcaps['edit_others_posts'] ) && $current_user->allcaps['edit_others_posts']; return apply_filters( 'coauthors_plus_edit_authors', $can_set_authors ); } /** * Fix for author pages 404ing or not properly displaying on author pages * * If a guest author has no posts, we only want to force the queried object to be * the author if they're a user. * * If the guest author does have posts, it doesn't matter that they're not an author. * * Alternatively, on an author archive, if the first story has co-authors and * the first author is NOT the same as the author for the archive, * the query_var is changed. * * Also, we have to do some hacky WP_Query modification for guest authors * * @param string $selection The assembled selection query * @void */ public function fix_author_page( $selection ): void { global $wp_query, $authordata; if ( ! isset( $wp_query ) ) { return; } if ( ! is_author() ) { return; } $author_name = sanitize_title( get_query_var( 'author_name' ) ); if ( ! $author_name ) { return; } $author = $this->get_coauthor_by( 'user_nicename', $author_name ); if ( is_object( $author ) ) { $authordata = $author; //phpcs:ignore $term = $this->get_author_term( $authordata ); } if ( is_object( $authordata ) || ! empty( $term ) ) { $wp_query->queried_object = $authordata; $wp_query->queried_object_id = (int) $authordata->ID; if ( ! is_paged() ) { add_filter( 'pre_handle_404', '__return_true' ); } } else { $wp_query->queried_object = $wp_query->queried_object_id = null; $wp_query->is_author = $wp_query->is_archive = false; $wp_query->is_404 = false; } } /** * Filters the Infinite Scroll settings to remove `author` from the query_args * when we are dealing with a Guest Author * * If this isn't removed, the author id can be sent in place of author_name, and the * normal query interception doesn't work, resulting in incorrect results * * @param array $settings The existing IS settings to filter * @return array The filtered IS settings */ public function filter_infinite_scroll_js_settings( $settings ): array { if ( ! is_author() ) { return $settings; } $author = get_queried_object(); if ( $author && 'guest-author' === $author->type ) { unset( $settings['query_args'][ $this->coauthor_taxonomy ] ); $settings['query_args']['author_name'] = $author->user_nicename; } return $settings; } /** * Main function that handles search-as-you-type for adding co-authors */ public function ajax_suggest(): void { if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'coauthors-search' ) ) { die(); } if ( empty( $_REQUEST['q'] ) ) { die(); } $search = sanitize_text_field( strtolower( $_REQUEST['q'] ) ); $ignore = array_map( 'sanitize_text_field', explode( ',', $_REQUEST['existing_authors'] ) ); // phpcs:ignore $authors = $this->search_authors( $search, $ignore ); // Return message if no authors found if ( empty( $authors ) ) { echo esc_html( apply_filters( 'coauthors_no_matching_authors_message', 'Sorry, no matching authors found.' ) ); } foreach ( $authors as $author ) { $user_type = 'guest-user'; if ( $author instanceof WP_User ) { $user_type = 'wp-user'; } printf( "%s ∣ %s ∣ %s ∣ %s ∣ %s ∣ %s \n", esc_html( $author->ID ), esc_html( $author->user_login ), // Ensure that author names can contain a pipe character by replacing the pipe character with the // divides character, which will now serve as a delimiter of the author parameters. (#370) esc_html( str_replace( '∣', '|', $author->display_name ) ), esc_html( $author->user_email ), esc_html( rawurldecode( $author->user_nicename ) ), esc_url( get_avatar_url( $author->ID, array( 'user_type' => $user_type ) ) ) ); } die(); } /** * Get matching co-authors based on a search value */ public function search_authors( $search = '', $ignored_authors = array() ): array { // Since 2.7, we're searching against the term description for the fields // instead of the user details. If the term is missing, we probably need to // back-fill with user details. Let's do this first... easier than running // an upgrade script that could break on a lot of users $args = array( 'count_total' => false, 'search' => sprintf( '*%s*', $search ), 'search_columns' => array( 'ID', 'display_name', 'user_email', 'user_login', ), 'capability' => array( apply_filters( 'coauthors_edit_author_cap', 'edit_posts' ) ), 'fields' => 'all_with_meta', ); $found_users = get_users( $args ); foreach ( $found_users as $found_user ) { $term = $this->get_author_term( $found_user ); if ( empty( $term ) || empty( $term->description ) ) { $this->update_author_term( $found_user ); } } $args = array( 'search' => $search, 'get' => 'all', 'number' => 10, ); $args = apply_filters( 'coauthors_search_authors_get_terms_args', $args ); add_filter( 'terms_clauses', array( $this, 'filter_terms_clauses' ) ); $found_terms = get_terms( $this->coauthor_taxonomy, $args ); remove_filter( 'terms_clauses', array( $this, 'filter_terms_clauses' ) ); if ( empty( $found_terms ) ) { return array(); } // Get the guest author objects $found_users = array(); foreach ( $found_terms as $found_term ) { $found_user = $this->get_coauthor_by( 'user_nicename', $found_term->slug ); if ( ! $found_user && 0 === strpos( $found_term->slug, 'cap-cap-' ) ) { // Account for guest author terms that start with 'cap-'. // e.g. "Cap Ri" -> "cap-cap-ri". $cap_slug = substr( $found_term->slug, 4, strlen( $found_term->slug ) ); $found_user = $this->get_coauthor_by( 'user_nicename', $cap_slug ); } if ( ! empty( $found_user ) ) { $found_users[ $found_user->user_login ] = $found_user; } } // Allow users to always filter out certain users if needed (e.g. administrators) $ignored_authors = apply_filters( 'coauthors_edit_ignored_authors', $ignored_authors ); foreach ( $found_users as $key => $found_user ) { // Make sure the user is contributor and above (or a custom cap) if ( in_array( $found_user->user_nicename, $ignored_authors, true ) ) { // AJAX sends a list of already present *users_nicenames* unset( $found_users[ $key ] ); } elseif ( 'wpuser' === $found_user->type && false === $found_user->has_cap( apply_filters( 'coauthors_edit_author_cap', 'edit_posts' ) ) ) { unset( $found_users[ $key ] ); } } return $found_users; } /** * Modify get_terms() to LIKE against the term description instead of the term name * * @since 3.0 */ public function filter_terms_clauses( $pieces ) { $pieces['where'] = str_replace( 't.name LIKE', 'tt.description LIKE', $pieces['where'] ); return $pieces; } /** * Functions to add scripts and css */ public function enqueue_scripts( $hook_suffix ): void { global $pagenow, $post; if ( ! $this->is_valid_page() || ! $this->is_post_type_enabled() || ! $this->current_user_can_set_authors() ) { return; } wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui-sortable' ); wp_enqueue_style( 'co-authors-plus-css', plugins_url( 'css/co-authors-plus.css', COAUTHORS_PLUS_FILE ), false, COAUTHORS_PLUS_VERSION ); wp_enqueue_script( 'co-authors-plus-js', plugins_url( 'js/co-authors-plus.js', COAUTHORS_PLUS_FILE ), array( 'jquery', 'suggest' ), COAUTHORS_PLUS_VERSION, true ); $js_strings = array( 'edit_label' => __( 'Edit', 'co-authors-plus' ), 'delete_label' => __( 'Remove', 'co-authors-plus' ), 'confirm_delete' => __( 'Are you sure you want to remove this author?', 'co-authors-plus' ), 'input_box_title' => __( 'Click to change this author, or drag to change their position', 'co-authors-plus' ), 'search_box_text' => __( 'Search for an author', 'co-authors-plus' ), 'help_text' => __( 'Click on an author to change them. Drag to change their order. Click on Remove to remove them.', 'co-authors-plus' ), ); wp_localize_script( 'co-authors-plus-js', 'coAuthorsPlusStrings', $js_strings ); } /** * load-edit.php is when the screen has been set up */ public function load_edit(): void { $screen = get_current_screen(); if ( in_array( $screen->post_type, $this->supported_post_types() ) ) { add_filter( 'views_' . $screen->id, array( $this, 'filter_views' ) ); } } /** * Filter the view links that appear at the top of the Manage Posts view * * @since 3.0 */ public function filter_views( $views ) { if ( array_key_exists( 'mine', $views ) ) { return $views; } $views = array_reverse( $views ); $all_view = array_pop( $views ); $mine_args = array( 'author_name' => wp_get_current_user()->user_nicename, ); if ( 'post' !== get_post_type() ) { $mine_args['post_type'] = get_current_screen()->post_type; } if ( ! empty( $_REQUEST['author_name'] ) && wp_get_current_user()->user_nicename == $_REQUEST['author_name'] ) { $class = ' class="current"'; } else { $class = ''; } $views['mine'] = '' . __( 'Mine', 'co-authors-plus' ) . ''; $views['all'] = str_replace( $class, '', $all_view ); $views = array_reverse( $views ); return $views; } /** * Adds necessary javascript variables to admin pages */ public function js_vars(): void { if ( ! $this->is_valid_page() || ! $this->is_post_type_enabled() || ! $this->current_user_can_set_authors() ) { return; } ?> _pages_whitelist ); } /** * Builds list of capabilities that CAP should filter. * * Will only work after $this->supported_post_types has been populated. * Will only run once per request, and then cache the result. * The result is cached in $this->to_be_filtered_caps since CoAuthors_Plus is only instantiated once and stored as a global. * * @return array caps that CAP should filter */ public function get_to_be_filtered_caps(): array { if ( ! empty( $this->supported_post_types() ) && empty( $this->to_be_filtered_caps ) ) { $this->to_be_filtered_caps[] = 'edit_post'; // Need to filter this too, unfortunately: http://core.trac.wordpress.org/ticket/22415 $this->to_be_filtered_caps[] = 'read_post'; foreach ( $this->supported_post_types() as $single ) { $obj = get_post_type_object( $single ); $this->to_be_filtered_caps[] = $obj->cap->edit_post; $this->to_be_filtered_caps[] = $obj->cap->edit_others_posts; // This as well: http://core.trac.wordpress.org/ticket/22417 $this->to_be_filtered_caps[] = $obj->cap->read_post; } $this->to_be_filtered_caps = array_unique( $this->to_be_filtered_caps ); } return $this->to_be_filtered_caps; } /** * Allows guest authors to edit the post they're co-authors of */ public function filter_user_has_cap( $allcaps, $caps, $args ) { $cap = $args[0]; $user_id = $args[1] ?? 0; $post_id = $args[2] ?? 0; if ( ! in_array( $cap, $this->get_to_be_filtered_caps(), true ) ) { return $allcaps; } $obj = get_post_type_object( get_post_type( $post_id ) ); if ( ! $obj || 'revision' === $obj->name ) { return $allcaps; } // Even though we bail if cap is not among the to_be_filtered ones, there is a time in early request processing in which that list is not yet available, so the following block is needed $caps_to_modify = array( $obj->cap->edit_post, 'edit_post', // Need to filter this too, unfortunately: http://core.trac.wordpress.org/ticket/22415 $obj->cap->edit_others_posts, // This as well: http://core.trac.wordpress.org/ticket/22417 'read_post', $obj->cap->read_post, ); if ( ! in_array( $cap, $caps_to_modify ) ) { return $allcaps; } // We won't be doing any modification if they aren't already a co-author on the post if ( ! is_user_logged_in() || ! is_coauthor_for_post( $user_id, $post_id ) ) { return $allcaps; } $current_user = wp_get_current_user(); if ( 'publish' === get_post_status( $post_id ) && ( isset( $obj->cap->edit_published_posts ) && ! empty( $current_user->allcaps[ $obj->cap->edit_published_posts ] ) ) ) { $allcaps[ $obj->cap->edit_published_posts ] = true; } elseif ( 'private' === get_post_status( $post_id ) && ( isset( $obj->cap->edit_private_posts ) && ! empty( $current_user->allcaps[ $obj->cap->edit_private_posts ] ) ) ) { $allcaps[ $obj->cap->edit_private_posts ] = true; } $allcaps[ $obj->cap->edit_others_posts ] = true; return $allcaps; } /** * Get the author term for a given co-author * * @since 3.0 * * @param object $coauthor The co-author object * @return object|false $author_term The author term on success */ public function get_author_term( $coauthor ) { if ( ! is_object( $coauthor ) ) { return; } $cache_key = 'author-term-' . $coauthor->user_nicename; if ( false !== ( $term = wp_cache_get( $cache_key, 'co-authors-plus' ) ) ) { return $term; } // See if the prefixed term is available, otherwise default to just the nicename $term = get_term_by( 'slug', 'cap-' . $coauthor->user_nicename, $this->coauthor_taxonomy ); if ( ! $term ) { $term = get_term_by( 'slug', $coauthor->user_nicename, $this->coauthor_taxonomy ); } wp_cache_set( $cache_key, $term, 'co-authors-plus' ); return $term; } /** * Update the author term for a given co-author * * @since 3.0 * * @param object $coauthor The co-author object (user or guest author) * @return object|false $success Term object if successful, false if not */ public function update_author_term( $coauthor ) { if ( ! is_object( $coauthor ) ) { return false; } // Update the taxonomy term to include details about the user for searching $search_values = array(); foreach ( $this->ajax_search_fields as $search_field ) { $search_values[] = $coauthor->$search_field; } $term_description = implode( ' ', $search_values ); if ( $term = $this->get_author_term( $coauthor ) ) { if ( $term->description != $term_description ) { wp_update_term( $term->term_id, $this->coauthor_taxonomy, array( 'description' => $term_description ) ); } } else { $coauthor_slug = 'cap-' . $coauthor->user_nicename; $args = array( 'slug' => $coauthor_slug, 'description' => $term_description, ); $new_term = wp_insert_term( $coauthor->user_login, $this->coauthor_taxonomy, $args ); } wp_cache_delete( 'author-term-' . $coauthor->user_nicename, 'co-authors-plus' ); return $this->get_author_term( $coauthor ); } /** * Filter Edit Flow's 'ef_calendar_item_information_fields' to add co-authors * * @see https://github.com/Automattic/Co-Authors-Plus/issues/2 * * @param array $information_fields * @param int $post_id * @return array */ public function filter_ef_calendar_item_information_fields( $information_fields, $post_id ): array { // Don't add the author row again if another plugin has removed if ( ! array_key_exists( $this->coauthor_taxonomy, $information_fields ) ) { return $information_fields; } $co_authors = get_coauthors( $post_id ); if ( count( $co_authors ) > 1 ) { $information_fields[ $this->coauthor_taxonomy ]['label'] = __( 'Authors', 'co-authors-plus' ); } $co_authors_names = ''; foreach ( $co_authors as $co_author ) { $co_authors_names .= $co_author->display_name . ', '; } $information_fields[ $this->coauthor_taxonomy ]['value'] = rtrim( $co_authors_names, ', ' ); return $information_fields; } /** * Filter Edit Flow's 'ef_story_budget_term_column_value' to add co-authors to the story budget * * @see https://github.com/Automattic/Co-Authors-Plus/issues/2 * * @param string $column_name * @param object $post * @param object $parent_term * @return string */ public function filter_ef_story_budget_term_column_value( $column_name, $post, $parent_term ): string { // We only want to modify the 'author' column if ( $this->coauthor_taxonomy != $column_name ) { return $column_name; } $co_authors = get_coauthors( $post->ID ); $co_authors_names = ''; foreach ( $co_authors as $co_author ) { $co_authors_names .= $co_author->display_name . ', '; } return rtrim( $co_authors_names, ', ' ); } /** * Filter non-native users added by Co-Author-Plus in Jetpack * * @since 3.1 * * @param array $og_tags Required. Array of Open Graph Tags. * @param array $image_dimensions Required. Dimensions for images used. * @return array Open Graph Tags either as they were passed or updated. */ public function filter_jetpack_open_graph_tags( $og_tags, $image_dimensions ): array { if ( is_author() ) { $author = get_queried_object(); if ( $author !== null ) { $og_tags['og:title'] = $author->display_name; $og_tags['og:url'] = get_author_posts_url( $author->ID, $author->user_nicename ); $og_tags['og:description'] = $author->description; $og_tags['profile:first_name'] = $author->first_name; $og_tags['profile:last_name'] = $author->last_name; if ( isset( $og_tags['article:author'] ) ) { $og_tags['article:author'] = get_author_posts_url( $author->ID, $author->user_nicename ); } } } elseif ( is_singular() && $this->is_post_type_enabled() ) { $authors = get_coauthors(); if ( ! empty( $authors ) ) { $author = array_shift( $authors ); if ( isset( $og_tags['article:author'] ) ) { $og_tags['article:author'] = get_author_posts_url( $author->ID, $author->user_nicename ); } } } // Send back the updated Open Graph Tags return apply_filters( 'coauthors_open_graph_tags', $og_tags ); } /** * Retrieve a list of author terms for a single post. * * Grabs a correctly ordered list of co-authors for a single post, appropriately * cached because it requires `wp_get_object_terms()` to succeed. * * @param int $post_id ID of the post for which to retrieve co-authors. * @return array Array of co-author WP_Term objects. */ public function get_coauthor_terms_for_post( $post_id ): array { if ( ! $post_id ) { return array(); } $cache_key = 'coauthors_post_' . $post_id; $coauthor_terms = wp_cache_get( $cache_key, 'co-authors-plus' ); if ( false === $coauthor_terms ) { $coauthor_terms = wp_get_object_terms( $post_id, $this->coauthor_taxonomy, array( 'orderby' => 'term_order', 'order' => 'ASC', ) ); // This usually happens if the taxonomy doesn't exist, which should never happen, but you never know. if ( is_wp_error( $coauthor_terms ) ) { return array(); } wp_cache_set( $cache_key, $coauthor_terms, 'co-authors-plus' ); } return $coauthor_terms; } /** * Callback to clear the cache on post save and post delete. * * @param $post_id The Post ID. */ public function clear_cache( $post_id ): void { wp_cache_delete( 'coauthors_post_' . $post_id, 'co-authors-plus' ); } /** * Callback to clear the cache when an object's terms are changed. * * @param $post_id The Post ID. */ public function clear_cache_on_terms_set( $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids ): void { // We only care about the co-authors taxonomy. if ( $this->coauthor_taxonomy !== $taxonomy ) { return; } wp_cache_delete( 'coauthors_post_' . $object_id, 'co-authors-plus' ); } /** * Filter of the header of author archive pages to correctly display author. * * @param $title string Archive Page Title * * @return string Archive Page Title */ public function filter_author_archive_title( $title ): string { // Bail if not an author archive template if ( ! is_author() ) { return $title; } $author_slug = sanitize_user( get_query_var( 'author_name' ) ); $author = $this->get_coauthor_by( 'user_nicename', $author_slug ); /* translators: Author display name. */ return sprintf( __( 'Author: %s', 'co-authors-plus' ), $author->display_name ); } /** * Get the post count for the guest author * * @param object $guest_author guest-author object. * @return int post count for the guest author */ public function get_guest_author_post_count( $guest_author ): int { if ( ! is_object( $guest_author ) ) { return 0; } $term = $this->get_author_term( $guest_author ); $guest_term = get_term_by( 'slug', 'cap-' . $guest_author->user_nicename, $this->coauthor_taxonomy ); if ( is_object( $guest_term ) && ! empty( $guest_author->linked_account ) && $guest_term->count ) { $user = get_user_by( 'login', $guest_author->linked_account ); if ( is_object( $user ) ) { return count_user_posts( $user->ID ); // phpcs:ignore } } elseif ( $term ) { return $term->count; } return 0; } /** * Filter to display author image if exists instead of avatar. * * @param $url string Avatar URL * @param $id int Author ID * * @return array Avatar URL */ public function filter_pre_get_avatar_data_url( $args, $id ): array { global $wp_current_filter; if ( isset( $args['url'] ) || ! $id || ! is_numeric( $id ) || ! $this->is_guest_authors_enabled() ) { return $args; } // Do not filter the icon in the admin bar if ( doing_filter( 'admin_bar_menu' ) ) { return $args; } // Do not filter when we have a WordPress user sent from CAP meta box if ( isset( $args['user_type'] ) && 'wp-user' === $args['user_type'] ) { return $args; } // Do not filter when on the user screen $current_screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null; if ( ! is_null( $current_screen ) && isset( $current_screen->parent_base ) && 'users' === $current_screen->parent_base ) { return $args; } $coauthor = $this->get_coauthor_by( 'id', $id ); if ( false !== $coauthor && isset( $coauthor->type ) && 'guest-author' === $coauthor->type ) { if ( has_post_thumbnail( $id ) ) { $args['url'] = get_the_post_thumbnail_url( $id, array( $args['width'], $args['height'] ) ); } elseif ( isset( $coauthor->user_email ) ) { $args['url'] = get_avatar_url( $coauthor->user_email, $args ); } else { $args['url'] = get_avatar_url( '', $args ); // Fallback to default. } } return $args; } /** * Conditionally Hide Author Term Description * * If the current user does not have the required capability, * hide the author term description by unsetting it. * * @link https://github.com/Automattic/Co-Authors-Plus/issues/930 * @param WP_REST_Response $response Response for an individual author taxonomy term. * @return WP_REST_Response $response Same response, possibly mutated to eliminate value of description. */ public function conditionally_hide_author_term_description( WP_REST_Response $response ): \WP_REST_Response { $capability = apply_filters( 'coauthors_rest_view_description_cap', 'edit_posts' ); if ( current_user_can( $capability ) ) { return $response; } $data = $response->get_data(); if ( ! is_array( $data ) || ! array_key_exists( 'description', $data ) ) { return $response; } unset( $data['description'] ); $response->set_data( $data ); return $response; } } php/class-coauthors-template-filters.php000060400000003023147177171730014446 0ustar00= 1 && isset( $coauthors[0]->display_name ) ) { return $coauthors[0]->display_name; } return $the_author; } public function action_add_rss_guest_authors(): void { $coauthors = get_coauthors(); // remove the first guest author who is added to the first dc:creator element array_shift( $coauthors ); foreach ( $coauthors as $coauthor ) { echo ' display_name ) . "]]>\n"; } } } php/class-coauthors-wp-list-table.php000060400000021527147177171730013662 0ustar00is_search = true; } parent::__construct( array( 'plural' => __( 'Co-Authors', 'co-authors-plus' ), 'singular' => __( 'Co-Author', 'co-authors-plus' ), ) ); } /** * Perform Co-Authors Query */ public function prepare_items() { global $coauthors_plus; $columns = $this->get_columns(); $hidden = array(); $sortable = array( 'display_name' => array( 'display_name', 'ASC' ), 'first_name' => array( 'first_name', 'ASC' ), 'last_name' => array( 'last_name', 'ASC' ), ); $_sortable = apply_filters( 'coauthors_guest_author_sortable_columns', $this->get_sortable_columns() ); foreach ( (array) $_sortable as $id => $data ) { if ( empty( $data ) ) { continue; } $data = (array) $data; if ( ! isset( $data[1] ) ) { $data[1] = false; } $sortable[ $id ] = $data; } $this->_column_headers = array( $columns, $hidden, $sortable ); $paged = ( isset( $_REQUEST['paged'] ) ) ? (int) $_REQUEST['paged'] : 1; $per_page = 20; $args = array( 'paged' => $paged, 'posts_per_page' => $per_page, 'post_type' => $coauthors_plus->guest_authors->post_type, 'post_status' => 'any', 'orderby' => 'title', 'order' => 'ASC', ); $args = apply_filters( 'coauthors_guest_author_query_args', $args ); if ( isset( $_REQUEST['orderby'] ) ) { switch ( $_REQUEST['orderby'] ) { case 'display_name': $args['orderby'] = 'title'; break; case 'first_name': case 'last_name': $args['orderby'] = 'meta_value'; $args['meta_key'] = $coauthors_plus->guest_authors->get_post_meta_key( $_REQUEST['orderby'] ); break; } } if ( isset( $_REQUEST['order'] ) && in_array( strtoupper( $_REQUEST['order'] ), array( 'ASC', 'DESC' ) ) ) { $args['order'] = strtoupper( $_REQUEST['order'] ); } $this->filters = array( 'show-all' => __( 'Show all', 'co-authors-plus' ), 'with-linked-account' => __( 'With linked account', 'co-authors-plus' ), 'without-linked-account' => __( 'Without linked account', 'co-authors-plus' ), ); if ( isset( $_REQUEST['filter'] ) && array_key_exists( $_REQUEST['filter'], $this->filters ) ) { $this->active_filter = sanitize_key( $_REQUEST['filter'] ); } else { $this->active_filter = 'show-all'; } $key = $coauthors_plus->guest_authors->get_post_meta_key( 'linked_account' ); switch ( $this->active_filter ) { case 'with-linked-account': $args['meta_query'] = array( array( 'key' => $key, 'compare' => '!=', 'value' => '', ), ); break; case 'without-linked-account': $args['meta_query'] = array( 'relation' => 'OR', array( 'key' => $key, 'compare' => 'NOT EXISTS', ), array( 'key' => $key, 'compare' => '=', 'value' => '', ), ); break; } if ( $this->is_search ) { add_filter( 'posts_where', array( $this, 'filter_query_for_search' ) ); } $author_posts = new WP_Query( $args ); $items = array(); foreach ( $author_posts->get_posts() as $author_post ) { $items[] = $coauthors_plus->guest_authors->get_guest_author_by( 'ID', $author_post->ID ); } if ( $this->is_search ) { remove_filter( 'posts_where', array( $this, 'filter_query_for_search' ) ); } $this->items = $items; $this->set_pagination_args( array( 'total_items' => $author_posts->found_posts, 'per_page' => $per_page, ) ); } public function filter_query_for_search( $where ) { global $wpdb; if ( isset( $_REQUEST['s'] ) ) { $var = '%' . sanitize_text_field( $_REQUEST['s'] ) . '%'; $where .= $wpdb->prepare( ' AND (post_title LIKE %s OR post_name LIKE %s )', $var, $var ); } return $where; } /** * Either there are no co-authors, or the search doesn't match any */ public function no_items() { esc_html_e( 'No matching co-authors were found.', 'co-authors-plus' ); } /** * Generate the columns of information to be displayed on our list table */ public function get_columns() { $columns = array( 'display_name' => __( 'Display Name', 'co-authors-plus' ), 'first_name' => __( 'First Name', 'co-authors-plus' ), 'last_name' => __( 'Last Name', 'co-authors-plus' ), 'user_email' => __( 'E-mail', 'co-authors-plus' ), 'linked_account' => __( 'Linked Account', 'co-authors-plus' ), 'posts' => __( 'Posts', 'co-authors-plus' ), ); $columns = apply_filters( 'coauthors_guest_author_manage_columns', $columns ); return $columns; } /** * Render a single row */ public function single_row( $item ) { static $alternate_class = ''; $alternate_class = ( '' === $alternate_class ? ' alternate' : '' ); $row_class = 'guest-author-static' . $alternate_class . '"'; echo ''; $this->single_row_columns( $item ); echo ''; } /** * Render columns, some are overridden below */ public function column_default( $item, $column_name ) { switch ( $column_name ) { case 'first_name': case 'last_name': return $item->$column_name; case 'user_email': return '' . esc_html( $item->user_email ) . ''; default: do_action( 'coauthors_guest_author_custom_columns', $column_name, $item->ID ); break; } } /** * Render display name, e.g. author name */ public function column_display_name( $item ): string { $item_edit_link = get_edit_post_link( $item->ID ); $args = array( 'action' => 'delete', 'id' => $item->ID, '_wpnonce' => wp_create_nonce( 'guest-author-delete' ), ); $item_delete_link = add_query_arg( array_map( 'rawurlencode', $args ), menu_page_url( 'view-guest-authors', false ) ); $item_view_link = get_author_posts_url( $item->ID, $item->user_nicename ); $output = coauthors_get_avatar( $item ); if ( current_user_can( 'edit_post', $item->ID ) ) { $output .= '' . esc_html( $item->display_name ) . ''; } else { $output .= esc_html( $item->display_name ); } $actions = array(); if ( current_user_can( 'edit_post', $item->ID ) ) { $actions['edit'] = '' . __( 'Edit', 'co-authors-plus' ) . ''; } if ( current_user_can( 'delete_post', $item->ID ) ) { $actions['delete'] = '' . __( 'Delete', 'co-authors-plus' ) . ''; } $actions['view'] = '' . __( 'View Posts', 'co-authors-plus' ) . ''; $actions = apply_filters( 'coauthors_guest_author_row_actions', $actions, $item ); $output .= $this->row_actions( $actions ); return $output; } /** * Render linked account */ public function column_linked_account( $item ): string { if ( $item->linked_account ) { $account = get_user_by( 'login', $item->linked_account ); if ( $account ) { if ( current_user_can( 'edit_users' ) ) { return '' . esc_html( $item->linked_account ) . ''; } return $item->linked_account; } } return ''; } /** * Render the published post count column */ public function column_posts( $item ): string { global $coauthors_plus; $count = $coauthors_plus->get_guest_author_post_count( $item ); return '' . $count . ''; } /** * Allow users to filter the guest authors by various criteria */ public function extra_tablenav( $which ) { ?>
      filters ) ) { echo ''; submit_button( __( 'Filter', 'co-authors-plus' ), 'secondary', false, false ); } } ?>
      search_box( $coauthors_plus->guest_authors->labels['search_items'], 'guest-authors' ); parent::display(); } } php/class-wp-cli.php000060400000131675147177171730010372 0ustar00args = wp_parse_args( $assoc_args, $defaults ); $users = get_users(); $created = 0; $skipped = 0; $progress = \WP_CLI\Utils\make_progress_bar( 'Processing guest authors...', count( $users ) ); foreach ( $users as $user ) { $result = $coauthors_plus->guest_authors->create_guest_author_from_user_id( $user->ID ); if ( is_wp_error( $result ) ) { $skipped++; } else { $created++; } $progress->tick(); } $progress->finish(); WP_CLI::line( 'All done! Here are your results:' ); WP_CLI::line( "- {$created} guest author profiles were created" ); WP_CLI::line( "- {$skipped} users already had guest author profiles" ); } /** * Create author terms for all posts that don't have them. However, please see `create_author_terms_for_posts` for an * alternative approach that not only allows for more granular control over which posts are targeted, but * is also faster in most cases. * * @subcommand create-terms-for-posts */ public function create_terms_for_posts(): void { global $coauthors_plus, $wp_post_types; // Cache these to prevent repeated lookups $authors = array(); $author_terms = array(); $args = array( 'order' => 'ASC', 'orderby' => 'ID', 'post_type' => $coauthors_plus->supported_post_types(), 'posts_per_page' => 100, 'paged' => 1, 'update_meta_cache' => false, ); $posts = new WP_Query( $args ); $affected = 0; $count = 0; $total_posts = $posts->found_posts; WP_CLI::line( "Now inspecting or updating {$posts->found_posts} total posts." ); while ( $posts->post_count ) { foreach ( $posts->posts as $single_post ) { $count++; $terms = cap_get_coauthor_terms_for_post( $single_post->ID ); if ( empty( $terms ) ) { WP_CLI::line( sprintf( 'No co-authors found for post #%d.', $single_post->ID ) ); } if ( ! empty( $terms ) ) { WP_CLI::line( "{$count}/{$posts->found_posts}) Skipping - Post #{$single_post->ID} '{$single_post->post_title}' already has these terms: " . implode( ', ', wp_list_pluck( $terms, 'name' ) ) ); continue; } $author = ( ! empty( $authors[ $single_post->post_author ] ) ) ? $authors[ $single_post->post_author ] : get_user_by( 'id', $single_post->post_author ); $authors[ $single_post->post_author ] = $author; $author_term = ( ! empty( $author_terms[ $single_post->post_author ] ) ) ? $author_terms[ $single_post->post_author ] : $coauthors_plus->update_author_term( $author ); $author_terms[ $single_post->post_author ] = $author_term; wp_set_post_terms( $single_post->ID, array( $author_term->slug ), $coauthors_plus->coauthor_taxonomy ); WP_CLI::line( "{$count}/{$total_posts}) Added - Post #{$single_post->ID} '{$single_post->post_title}' now has an author term for: " . $author->user_nicename ); $affected++; } if ( $count && 0 === $count % 500 ) { $this->stop_the_insanity(); sleep( 1 ); } $args['paged']++; $posts = new WP_Query( $args ); } WP_CLI::line( 'Updating author terms with new counts' ); foreach ( $authors as $author ) { $coauthors_plus->update_author_term( $author ); } WP_CLI::success( "Done! Of {$total_posts} posts, {$affected} now have author terms." ); } /** * Creates missing author terms for posts. `create_terms_for_posts` does exactly the same thing as this one, * except with some key differences: * 1. This command will only ever target posts that are missing* author terms, whereas create_terms_for_posts * always will start from the beginning of the posts table and work its way through all posts. * 2. Since this command only targets posts that are missing author terms, it will be faster than * create_terms_for_posts in most cases. If the command is ever interrupted, it can be restarted without * reprocessing posts that already have author terms. * 3. This command allows one to target specific post types and statuses, as well as specific post IDs. * * @param array $args Positional arguments. * @param array $assoc_args Associative arguments. * * @subcommand create-author-terms-for-posts * @synopsis [--post-types=] [--post-statuses=] [--unbatched] [--records-per-batch=] [--specific-post-ids=] [--above-post-id=] [--below-post-id=] * @return void * @throws Exception If above-post-id is greater than or equal to below-post-id. */ public function create_author_terms_for_posts( $args, $assoc_args ) { $post_types = isset( $assoc_args['post-types'] ) ? explode( ',', $assoc_args['post-types'] ) : [ 'post' ]; $post_statuses = isset( $assoc_args['post-statuses'] ) ? explode( ',', $assoc_args['post-statuses'] ) : [ 'publish' ]; $batched = ! isset( $assoc_args['unbatched'] ); $records_per_batch = $assoc_args['records-per-batch'] ?? 250; $specific_post_ids = isset( $assoc_args['specific-post-ids'] ) ? explode( ',', $assoc_args['specific-post-ids'] ) : []; $above_post_id = $assoc_args['above-post-id'] ?? null; $below_post_id = $assoc_args['below-post-id'] ?? null; global $coauthors_plus, $wpdb; $count_of_posts_with_missing_author_terms = $this->get_count_of_posts_with_missing_terms( $coauthors_plus->coauthor_taxonomy, $post_types, $post_statuses, $specific_post_ids, $above_post_id, $below_post_id ); WP_CLI::line( sprintf( 'Found %d posts with missing author terms.', $count_of_posts_with_missing_author_terms ) ); $authors = []; $author_terms = []; $count = 0; $affected = 0; $page = 1; $posts_with_missing_author_terms = $this->get_posts_with_missing_terms( $coauthors_plus->coauthor_taxonomy, $post_types, $post_statuses, $batched, $records_per_batch, $specific_post_ids, $above_post_id, $below_post_id ); do { foreach ( $posts_with_missing_author_terms as $record ) { $record->post_author = intval( $record->post_author ); ++$count; $complete_percentage = $this->get_formatted_complete_percentage( $count, $count_of_posts_with_missing_author_terms ); WP_CLI::line( sprintf( 'Processing post %d (%d/%d or %s)', $record->post_id, $count, $count_of_posts_with_missing_author_terms, $complete_percentage ) ); $author = null; if ( isset( $authors[ $record->post_author ] ) ) { $author = $authors[ $record->post_author ]; } else { $author = get_user_by( 'id', $record->post_author ); if ( false === $author ) { // phpcs:ignore WordPressVIPMinimum.Variables.RestrictedVariables.user_meta__wpdb__users -- This is just trying to convey where the root problem should be resolved. WP_CLI::warning( sprintf( 'Post Author ID %d does not exist in %s table, inserting skip postmeta (`%s`).', $record->post_author, $wpdb->users, self::SKIP_POST_FOR_BACKFILL_META_KEY ) ); $this->skip_backfill_for_post( $record->post_id, 'nonexistent_post_author_id' ); continue; } $authors[ $record->post_author ] = $author; } $author_term = ( ! empty( $author_terms[ $record->post_author ] ) ) ? $author_terms[ $record->post_author ] : $coauthors_plus->update_author_term( $author ); $author_terms[ $record->post_author ] = $author_term; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery $insert_author_term_relationship = $wpdb->insert( $wpdb->term_relationships, [ 'object_id' => $record->post_id, 'term_taxonomy_id' => $author_term->term_taxonomy_id, 'term_order' => 0, ] ); if ( false === $insert_author_term_relationship ) { WP_CLI::warning( sprintf( 'Failed to insert term relationship for post %d and author %d.', $record->post_id, $record->post_author ) ); } else { WP_CLI::success( sprintf( 'Inserted term relationship for post %d and author %d (%s).', $record->post_id, $record->post_author, $author->user_nicename ) ); ++$affected; } if ( $count >= $count_of_posts_with_missing_author_terms ) { break; } if ( $count && 0 === $count % 500 ) { sleep( 1 ); // Sleep for a second every 500 posts to avoid overloading the database. } } $posts_with_missing_author_terms = []; if ( $batched && $count < $count_of_posts_with_missing_author_terms ) { ++$page; WP_CLI::line( sprintf( 'Processing page %d.', $page ) ); $posts_with_missing_author_terms = $this->get_posts_with_missing_terms( $coauthors_plus->coauthor_taxonomy, $post_types, $post_statuses, $batched, $records_per_batch, $specific_post_ids, $above_post_id, $below_post_id ); } } while ( ! empty( $posts_with_missing_author_terms ) ); WP_CLI::line( sprintf( '%d records affected', $affected ) ); WP_CLI::line( 'Updating author terms with new counts' ); $count_of_authors = count( $authors ); $count = 0; foreach ( $authors as $author ) { ++$count; $result = $coauthors_plus->update_author_term( $author ); if ( is_wp_error( $result ) || false === $result ) { WP_CLI::warning( sprintf( 'Failed to update author term for author %d (%s).', $author->ID, $author->user_nicename ) ); } else { $percentage = $this->get_formatted_complete_percentage( $count, $count_of_authors ); WP_CLI::success( sprintf( 'Updated author term for author %d (%s) (%s).', $author->ID, $author->user_nicename, $percentage ) ); } } WP_CLI::success( 'Done!' ); } /** * This command will delete the postmeta rows that were created in order to skip posts for processing in the author * term backfill command ('create-author-terms-for-posts' or function named `create_author_terms_for_posts`). * * @param array $args Positional arguments. * @param array $assoc_args Associative arguments. * * @subcommand delete-postmeta-that-skip-author-term-backfill * @synopsis [--specific-post-ids=] * @return void */ public function delete_postmeta_skipping_author_term_backfill( $args, $assoc_args ) { $specific_post_ids = isset( $assoc_args['specific-post-ids'] ) ? explode( ',', $assoc_args['specific-post-ids'] ) : []; if ( empty( $specific_post_ids ) ) { $query = new WP_Query( [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key 'meta_key' => self::SKIP_POST_FOR_BACKFILL_META_KEY, 'fields' => 'ids', ] ); $specific_post_ids = $query->get_posts(); } foreach ( $specific_post_ids as $post_id ) { WP_CLI::line( sprintf( 'Deleting postmeta key `%s` for Post ID %d', self::SKIP_POST_FOR_BACKFILL_META_KEY, $post_id ) ); $result = delete_post_meta( $post_id, self::SKIP_POST_FOR_BACKFILL_META_KEY ); if ( $result ) { WP_CLI::success( '👍' ); } else { WP_CLI::error( '👎' ); } } } /** * Subcommand to assign co-authors to a post based on a given meta key * * @since 3.0 * * @subcommand assign-coauthors * @synopsis [--meta_key=] [--post_type=] [--append_coauthors] */ public function assign_coauthors( $args, $assoc_args ): void { global $coauthors_plus; $defaults = array( 'meta_key' => '_original_import_author', 'post_type' => 'post', 'order' => 'ASC', 'orderby' => 'ID', 'posts_per_page' => 100, 'paged' => 1, 'append_coauthors' => false, ); $this->args = wp_parse_args( $assoc_args, $defaults ); // For global use and not a part of WP_Query $append_coauthors = $this->args['append_coauthors']; unset( $this->args['append_coauthors'] ); $posts_total = 0; $posts_already_associated = 0; $posts_missing_coauthor = 0; $posts_associated = 0; $missing_coauthors = array(); $posts = new WP_Query( $this->args ); while ( $posts->post_count ) { foreach ( $posts->posts as $single_post ) { $posts_total++; // See if the value in the post meta field is the same as any of the existing co-authors. $original_author = get_post_meta( $single_post->ID, $this->args['meta_key'], true ); $existing_coauthors = get_coauthors( $single_post->ID ); $already_associated = false; foreach ( $existing_coauthors as $existing_coauthor ) { if ( $original_author == $existing_coauthor->user_login ) { $already_associated = true; break; } } if ( $already_associated ) { $posts_already_associated++; WP_CLI::line( $posts_total . ': Post #' . $single_post->ID . ' already has "' . $original_author . '" associated as a co-author' ); continue; } // Make sure this original author exists as a co-author if ( ( ! $coauthor = $coauthors_plus->get_coauthor_by( 'user_login', $original_author ) ) && ( ! $coauthor = $coauthors_plus->get_coauthor_by( 'user_login', sanitize_title( $original_author ) ) ) ) { $posts_missing_coauthor++; $missing_coauthors[] = $original_author; WP_CLI::line( $posts_total . ': Post #' . $single_post->ID . ' does not have "' . $original_author . '" associated as a co-author but there is not a co-author profile' ); continue; } // Assign the co-author to the post. $coauthors_plus->add_coauthors( $single_post->ID, array( $coauthor->user_nicename ), $append_coauthors ); WP_CLI::line( $posts_total . ': Post #' . $single_post->ID . ' has been assigned "' . $original_author . '" as the author' ); $posts_associated++; clean_post_cache( $single_post->ID ); } $this->args['paged']++; $this->stop_the_insanity(); $posts = new WP_Query( $this->args ); } WP_CLI::line( 'All done! Here are your results:' ); if ( $posts_already_associated ) { WP_CLI::line( "- {$posts_already_associated} posts already had the co-author assigned" ); } if ( $posts_missing_coauthor ) { WP_CLI::line( "- {$posts_missing_coauthor} posts reference co-authors that don't exist. These are:" ); WP_CLI::line( ' ' . implode( ', ', array_unique( $missing_coauthors ) ) ); } if ( $posts_associated ) { WP_CLI::line( "- {$posts_associated} posts now have the proper co-author" ); } } /** * Assign posts associated with a WordPress user to a co-author * Only apply the changes if there aren't yet co-authors associated with the post * * @since 3.0 * * @subcommand assign-user-to-coauthor * @synopsis --user_login= --coauthor= */ public function assign_user_to_coauthor( $args, $assoc_args ): void { global $coauthors_plus, $wpdb; $defaults = array( 'user_login' => '', 'coauthor' => '', ); $assoc_args = wp_parse_args( $assoc_args, $defaults ); $user = get_user_by( 'login', $assoc_args['user_login'] ); $coauthor = $coauthors_plus->get_coauthor_by( 'login', $assoc_args['coauthor'] ); if ( ! $user ) { WP_CLI::error( __( 'Please specify a valid user_login', 'co-authors-plus' ) ); } if ( ! $coauthor ) { WP_CLI::error( __( 'Please specify a valid co-author login', 'co-authors-plus' ) ); } $post_types = implode( "','", $coauthors_plus->supported_post_types() ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $posts = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author=%d AND post_type IN ({$post_types})", $user->ID ) ); $affected = 0; foreach ( $posts as $post_id ) { $coauthors = cap_get_coauthor_terms_for_post( $post_id ); if ( ! empty( $coauthors ) ) { WP_CLI::line( sprintf( /* translators: 1: Post ID, 2: Comma-separated list of co-author slugs. */ __( 'Skipping - Post #%1$d already has co-authors assigned: %2$s', 'co-authors-plus' ), $post_id, implode( ', ', wp_list_pluck( $coauthors, 'slug' ) ) ) ); continue; } $coauthors_plus->add_coauthors( $post_id, array( $coauthor->user_login ) ); /* translators: 1: Co-author login, 2: Post ID */ WP_CLI::line( sprintf( __( "Updating - Adding %1\$s's byline to post #%2\$d", 'co-authors-plus' ), $coauthor->user_login, $post_id ) ); $affected++; if ( $affected && 0 === $affected % 100 ) { sleep( 2 ); } } $success_message = sprintf( /* translators: Count of posts. */ _n( 'All done! %d post was affected.', 'All done! %d posts were affected.', $affected, 'co-authors-plus' ), number_format_i18n( $affected ) ); WP_CLI::success( $success_message ); } /** * Subcommand to reassign co-authors based on some given format * This will look for terms with slug 'x' and rename to term with slug and name 'y' * This subcommand can be helpful for cleaning up after an import if the usernames * for authors have changed. During the import process, 'author' terms will be * created with the old user_login value. We can use this to migrate to the new user_login * * @todo support reassigning by CSV * * @since 3.0 * * @subcommand reassign-terms * @synopsis [--author-mapping=] [--old_term=] [--new_term=] */ public function reassign_terms( $args, $assoc_args ): void { global $coauthors_plus; $defaults = array( 'author_mapping' => null, 'old_term' => null, 'new_term' => null, ); $this->args = wp_parse_args( $assoc_args, $defaults ); $author_mapping = $this->args['author_mapping']; $old_term = $this->args['old_term']; $new_term = $this->args['new_term']; // Get the reassignment data if ( $author_mapping && is_file( $author_mapping ) ) { require_once $author_mapping; $authors_to_migrate = $cli_user_map; } elseif ( $author_mapping ) { WP_CLI::error( "author_mapping doesn't exist: " . $author_mapping ); exit; } // Alternate reassigment approach if ( $old_term && $new_term ) { $authors_to_migrate = array( $old_term => $new_term, ); } // For each author to migrate, check whether the term exists, // whether the target term exists, and only do the migration if both are met $results = (object) array( 'old_term_missing' => 0, 'new_term_exists' => 0, 'success' => 0, ); foreach ( $authors_to_migrate as $old_user => $new_user ) { if ( is_numeric( $new_user ) ) { $new_user = get_user_by( 'id', $new_user )->user_login; } // The old user should exist as a term $old_term = $coauthors_plus->get_author_term( $coauthors_plus->get_coauthor_by( 'login', $old_user ) ); if ( ! $old_term ) { WP_CLI::line( "Error: Term '{$old_user}' doesn't exist, skipping" ); $results->old_term_missing++; continue; } // If the new user exists as a term already, we want to reassign all posts to that // new term and delete the original // Otherwise, simply rename the old term $new_term = $coauthors_plus->get_author_term( $coauthors_plus->get_coauthor_by( 'login', $new_user ) ); if ( is_object( $new_term ) ) { WP_CLI::line( "Success: There's already a '{$new_user}' term for '{$old_user}'. Reassigning {$old_term->count} posts and then deleting the term" ); $args = array( 'default' => $new_term->term_id, 'force_default' => true, ); wp_delete_term( $old_term->term_id, $coauthors_plus->coauthor_taxonomy, $args ); $results->new_term_exists++; } else { $args = array( 'slug' => $new_user, 'name' => $new_user, ); wp_update_term( $old_term->term_id, $coauthors_plus->coauthor_taxonomy, $args ); WP_CLI::line( "Success: Converted '{$old_user}' term to '{$new_user}'" ); $results->success++; } clean_term_cache( $old_term->term_id, $coauthors_plus->coauthor_taxonomy ); } WP_CLI::line( 'Reassignment complete. Here are your results:' ); WP_CLI::line( "- $results->success authors were successfully reassigned terms" ); WP_CLI::line( "- $results->new_term_exists authors had their old term merged to their new term" ); WP_CLI::line( "- $results->old_term_missing authors were missing old terms" ); } /** * Change a term from representing one user_login value to another * If the term represents a guest author, the post_name will be changed * in addition to the term slug/name * * @since 3.0.1 * * @subcommand rename-coauthor * @synopsis --from= --to= */ public function rename_coauthor( $args, $assoc_args ): void { global $coauthors_plus, $wpdb; $defaults = array( 'from' => null, 'to' => null, ); $assoc_args = array_merge( $defaults, $assoc_args ); $to_userlogin = $assoc_args['to']; $to_userlogin_prefixed = 'cap-' . $to_userlogin; $orig_coauthor = $coauthors_plus->get_coauthor_by( 'user_login', $assoc_args['from'] ); if ( ! $orig_coauthor ) { WP_CLI::error( "No co-author found for {$assoc_args['from']}" ); } if ( ! $to_userlogin ) { WP_CLI::error( '--to param must not be empty' ); } if ( $coauthors_plus->get_coauthor_by( 'user_login', $to_userlogin ) ) { WP_CLI::error( 'New user_login value conflicts with existing co-author' ); } $orig_term = $coauthors_plus->get_author_term( $orig_coauthor ); WP_CLI::line( "Renaming {$orig_term->name} to {$to_userlogin}" ); $rename_args = array( 'name' => $to_userlogin, 'slug' => $to_userlogin_prefixed, ); wp_update_term( $orig_term->term_id, $coauthors_plus->coauthor_taxonomy, $rename_args ); if ( 'guest-author' == $orig_coauthor->type ) { $wpdb->update( $wpdb->posts, array( 'post_name' => $to_userlogin_prefixed ), array( 'ID' => $orig_coauthor->ID ) ); clean_post_cache( $orig_coauthor->ID ); update_post_meta( $orig_coauthor->ID, 'cap-user_login', $to_userlogin ); $coauthors_plus->guest_authors->delete_guest_author_cache( $orig_coauthor->ID ); WP_CLI::line( 'Updated guest author profile value too' ); } WP_CLI::success( 'All done!' ); } /** * Swap one co-author with another on all posts for which they are a co-author. Unlike rename-coauthor, * this leaves the original co-author term intact and works when the 'to' user already has a co-author term. * * @subcommand swap-coauthors * @synopsis --from= --to= [--post_type=] [--dry=] */ public function swap_coauthors( $args, $assoc_args ): void { global $coauthors_plus, $wpdb; $defaults = array( 'from' => null, 'to' => null, 'post_type' => 'post', 'dry' => false, ); $assoc_args = array_merge( $defaults, $assoc_args ); $dry = $assoc_args['dry']; $from_userlogin = $assoc_args['from']; $to_userlogin = $assoc_args['to']; $from_userlogin_prefixed = 'cap-' . $from_userlogin; $to_userlogin_prefixed = 'cap-' . $to_userlogin; $orig_coauthor = $coauthors_plus->get_coauthor_by( 'user_login', $from_userlogin ); if ( ! $orig_coauthor ) { WP_CLI::error( "No co-author found for $from_userlogin" ); } if ( ! $to_userlogin ) { WP_CLI::error( '--to param must not be empty' ); } $to_coauthor = $coauthors_plus->get_coauthor_by( 'user_login', $to_userlogin ); if ( ! $to_coauthor ) { WP_CLI::error( "No co-author found for $to_userlogin" ); } WP_CLI::line( "Swapping authorship from {$from_userlogin} to {$to_userlogin}" ); $query_args = array( 'post_type' => $assoc_args['post_type'], 'order' => 'ASC', 'orderby' => 'ID', 'posts_per_page' => 100, 'paged' => 1, 'tax_query' => array( array( 'taxonomy' => $coauthors_plus->coauthor_taxonomy, 'field' => 'slug', 'terms' => array( $from_userlogin_prefixed ), ), ), ); $posts = new WP_Query( $query_args ); $posts_total = 0; WP_CLI::line( "Found $posts->found_posts posts to update." ); while ( $posts->post_count ) { foreach ( $posts->posts as $post ) { $coauthors = get_coauthors( $post->ID ); if ( ! is_array( $coauthors ) || ! count( $coauthors ) ) { continue; } $coauthors = wp_list_pluck( $coauthors, 'user_login' ); $posts_total++; if ( ! $dry ) { // Remove the $from_userlogin from $coauthors foreach ( $coauthors as $index => $user_login ) { if ( $from_userlogin === $user_login ) { unset( $coauthors[ $index ] ); break; } } // Add the 'to' author on $coauthors[] = $to_userlogin; // By not passing $append = false as the 3rd param, we replace all existing co-authors. $coauthors_plus->add_coauthors( $post->ID, $coauthors ); WP_CLI::line( $posts_total . ': Post #' . $post->ID . ' has been assigned "' . $to_userlogin . '" as a co-author' ); clean_post_cache( $post->ID ); } else { WP_CLI::line( $posts_total . ': Post #' . $post->ID . ' will be assigned "' . $to_userlogin . '" as a co-author' ); } } // In dry mode, we must manually advance the page if ( $dry ) { $query_args['paged']++; } $this->stop_the_insanity(); $posts = new WP_Query( $query_args ); } WP_CLI::success( 'All done!' ); } /** * List all the posts without assigned co-authors terms. * * @since 3.0 * * @subcommand list-posts-without-terms * @synopsis [--post_type=] */ public function list_posts_without_terms( $args, $assoc_args ): void { global $coauthors_plus; $defaults = array( 'post_type' => 'post', 'order' => 'ASC', 'orderby' => 'ID', 'year' => '', 'posts_per_page' => 300, 'paged' => 1, 'no_found_rows' => true, 'update_meta_cache' => false, ); $this->args = wp_parse_args( $assoc_args, $defaults ); $posts = new WP_Query( $this->args ); while ( $posts->post_count ) { foreach ( $posts->posts as $single_post ) { $terms = cap_get_coauthor_terms_for_post( $single_post->ID ); if ( empty( $terms ) ) { $saved = array( $single_post->ID, addslashes( $single_post->post_title ), get_permalink( $single_post->ID ), $single_post->post_date, ); WP_CLI::line( '"' . implode( '","', $saved ) . '"' ); } } $this->stop_the_insanity(); $this->args['paged']++; $posts = new WP_Query( $this->args ); } } /** * Migrate author terms without prefixes to ones with prefixes * Pre-3.0, all author terms didn't have a 'cap-' prefix, which means * they can easily collide with terms in other taxonomies * * @since 3.0 * * @subcommand migrate-author-terms */ public function migrate_author_terms( $args, $assoc_args ): void { global $coauthors_plus; $author_terms = get_terms( $coauthors_plus->coauthor_taxonomy, array( 'hide_empty' => false ) ); WP_CLI::line( 'Now migrating up to ' . count( $author_terms ) . ' terms' ); foreach ( $author_terms as $author_term ) { // Term is already prefixed. We're good. if ( preg_match( '#^cap\-#', $author_term->slug, $matches ) ) { WP_CLI::line( "Term {$author_term->slug} ({$author_term->term_id}) is already prefixed, skipping" ); continue; } // A prefixed term was accidentally created, and the old term needs to be merged into the new (WordPress.com VIP) if ( $prefixed_term = get_term_by( 'slug', 'cap-' . $author_term->slug, $coauthors_plus->coauthor_taxonomy ) ) { WP_CLI::line( "Term {$author_term->slug} ({$author_term->term_id}) has a new term too: $prefixed_term->slug ($prefixed_term->term_id). Merging" ); $args = array( 'default' => $author_term->term_id, 'force_default' => true, ); wp_delete_term( $prefixed_term->term_id, $coauthors_plus->coauthor_taxonomy, $args ); } // Term isn't prefixed, doesn't have a sibling, and should be updated WP_CLI::line( "Term {$author_term->slug} ({$author_term->term_id}) isn't prefixed, adding one" ); $args = array( 'slug' => 'cap-' . $author_term->slug, ); wp_update_term( $author_term->term_id, $coauthors_plus->coauthor_taxonomy, $args ); } WP_CLI::success( 'All done! Grab a cold one (Affogatto)' ); } /** * Update the post count and description for each author and guest author * * @since 3.0 * * @subcommand update-author-terms */ public function update_author_terms(): void { global $coauthors_plus; $author_terms = get_terms( $coauthors_plus->coauthor_taxonomy, array( 'hide_empty' => false ) ); WP_CLI::line( 'Now updating ' . count( $author_terms ) . ' terms' ); foreach ( $author_terms as $author_term ) { $old_count = $author_term->count; $coauthor = $coauthors_plus->get_coauthor_by( 'user_nicename', $author_term->slug ); $coauthors_plus->update_author_term( $coauthor ); $coauthors_plus->update_author_term_post_count( $author_term ); wp_cache_delete( $author_term->term_id, $coauthors_plus->coauthor_taxonomy ); $new_count = get_term_by( 'id', $author_term->term_id, $coauthors_plus->coauthor_taxonomy )->count; WP_CLI::line( "Term {$author_term->slug} ({$author_term->term_id}) changed from {$old_count} to {$new_count} and the description was refreshed" ); } // Create author terms for any users that don't have them $users = get_users(); foreach ( $users as $user ) { $term = $coauthors_plus->get_author_term( $user ); if ( empty( $term ) || empty( $term->description ) ) { $coauthors_plus->update_author_term( $user ); WP_CLI::line( "Created author term for {$user->user_login}" ); } } // And create author terms for any Guest Authors that don't have them if ( $coauthors_plus->guest_authors instanceof CoAuthors_Guest_Authors && $coauthors_plus->is_guest_authors_enabled() ) { $args = array( 'order' => 'ASC', 'orderby' => 'ID', 'post_type' => $coauthors_plus->guest_authors->post_type, 'posts_per_page' => 100, 'paged' => 1, 'update_meta_cache' => false, 'fields' => 'ids', ); $posts = new WP_Query( $args ); WP_CLI::line( "Now inspecting or updating {$posts->found_posts} Guest Authors." ); while ( $posts->post_count ) { foreach ( $posts->posts as $guest_author_id ) { $guest_author = $coauthors_plus->guest_authors->get_guest_author_by( 'ID', $guest_author_id ); if ( ! $guest_author ) { WP_CLI::line( 'Failed to load guest author ' . $guest_author_id ); continue; } $term = $coauthors_plus->get_author_term( $guest_author ); if ( empty( $term ) || empty( $term->description ) ) { $coauthors_plus->update_author_term( $guest_author ); WP_CLI::line( "Created author term for Guest Author {$guest_author->user_nicename}" ); } } $this->stop_the_insanity(); $args['paged']++; $posts = new WP_Query( $args ); } } WP_CLI::success( 'All done' ); } /** * Remove author terms from revisions, which we've been adding since the dawn of time * * @since 3.0.1 * * @subcommand remove-terms-from-revisions */ public function remove_terms_from_revisions(): void { global $wpdb; $ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='revision' AND post_status='inherit'" ); WP_CLI::line( 'Found ' . count( $ids ) . ' revisions to look through' ); $affected = 0; foreach ( $ids as $post_id ) { $terms = cap_get_coauthor_terms_for_post( $post_id ); if ( empty( $terms ) ) { continue; } WP_CLI::line( "#{$post_id}: Removing " . implode( ',', wp_list_pluck( $terms, 'slug' ) ) ); wp_set_post_terms( $post_id, array(), 'author' ); $affected++; } WP_CLI::line( "All done! {$affected} revisions had author terms removed" ); } /** * Subcommand to create guest authors from an author list in a WXR file * * @subcommand create-guest-authors-from-wxr * @synopsis --file= */ public function create_guest_authors_from_wxr( $args, $assoc_args ): void { global $coauthors_plus; $defaults = array( 'file' => '', ); $this->args = wp_parse_args( $assoc_args, $defaults ); if ( empty( $this->args['file'] ) || ! is_readable( $this->args['file'] ) ) { WP_CLI::error( 'Please specify a valid WXR file with the --file arg.' ); } if ( ! class_exists( 'WXR_Parser' ) ) { require_once WP_CONTENT_DIR . '/plugins/wordpress-importer/parsers.php'; } $parser = new WXR_Parser(); $import_data = $parser->parse( $this->args['file'] ); if ( is_wp_error( $import_data ) ) { WP_CLI::error( 'Failed to read WXR file.' ); } // Get author nodes $authors = $import_data['authors']; foreach ( $authors as $author ) { WP_CLI::line( sprintf( 'Processing author %s (%s)', $author['author_login'], $author['author_email'] ) ); $guest_author_data = array( 'display_name' => $author['author_display_name'], 'user_login' => $author['author_login'], 'user_email' => $author['author_email'], 'first_name' => $author['author_first_name'], 'last_name' => $author['author_last_name'], 'ID' => $author['author_id'], ); $this->create_guest_author( $guest_author_data ); } WP_CLI::line( 'All done!' ); } /** * Create a single guest author. * * self::create_guest_author() wrapper. * * @subcommand create-author * @synopsis * [--display_name=] * [--user_login=] * [--first_name=] * [--last_name=] * [--website=] * [--user_email=] * [--description=] */ public function create_author( $args, $assoc_args ): void { $this->create_guest_author( $assoc_args ); } /** * Subcommand to create guest authors from an author list in a CSV file * * @subcommand create-guest-authors-from-csv * @synopsis --file= */ public function create_guest_authors_from_csv( $args, $assoc_args ): void { global $coauthors_plus; $defaults = array( 'file' => '', ); $this->args = wp_parse_args( $assoc_args, $defaults ); if ( empty( $this->args['file'] ) || ! is_readable( $this->args['file'] ) ) { WP_CLI::error( 'Please specify a valid CSV file with the --file arg.' ); } $file = fopen( $this->args['file'], 'rb' ); if ( ! $file ) { WP_CLI::error( 'Failed to read file.' ); } $authors = array(); $row = 0; while ( false !== ( $data = fgetcsv( $file ) ) ) { if ( 0 === $row ) { $field_keys = array_map( 'trim', $data ); // TODO: bail if required fields not found } else { $row_data = array_map( 'trim', $data ); $author_data = array(); foreach ( $row_data as $col_num => $val ) { // Don't use the value of the field key isn't set if ( empty( $field_keys[ $col_num ] ) ) { continue; } $author_data[ $field_keys[ $col_num ] ] = $val; } $authors[] = $author_data; } $row++; } fclose( $file ); WP_CLI::line( 'Found ' . count( $authors ) . ' authors in CSV' ); foreach ( $authors as $author ) { WP_CLI::line( sprintf( 'Processing author %s (%s)', $author['user_login'], $author['user_email'] ) ); $guest_author_data = array( 'display_name' => sanitize_text_field( $author['display_name'] ), 'user_login' => sanitize_user( $author['user_login'] ), 'user_email' => sanitize_email( $author['user_email'] ), 'website' => esc_url_raw( $author['website'] ), 'description' => wp_filter_post_kses( $author['description'] ), 'avatar' => absint( $author['avatar'] ), ); $display_name_space_pos = strpos( $author['display_name'], ' ' ); if ( false !== $display_name_space_pos && empty( $author['first_name'] ) && empty( $author['last_name'] ) ) { $first_name = substr( $author['display_name'], 0, $display_name_space_pos ); $last_name = substr( $author['display_name'], ( $display_name_space_pos + 1 ) ); $guest_author_data['first_name'] = sanitize_text_field( $first_name ); $guest_author_data['last_name'] = sanitize_text_field( $last_name ); } elseif ( ! empty( $author['first_name'] ) && ! empty( $author['last_name'] ) ) { $guest_author_data['first_name'] = sanitize_text_field( $author['first_name'] ); $guest_author_data['last_name'] = sanitize_text_field( $author['last_name'] ); } $this->create_guest_author( $guest_author_data ); } WP_CLI::line( 'All done!' ); } /** * Helper function to create a guest author. * * @param $author array author args. Required: display_name, user_login * @return void */ private function create_guest_author( $author ): void { global $coauthors_plus; $guest_author = $coauthors_plus->guest_authors->get_guest_author_by( 'user_email', $author['user_email'], true ); if ( ! $guest_author ) { $guest_author = $coauthors_plus->guest_authors->get_guest_author_by( 'user_login', $author['user_login'], true ); } if ( $guest_author ) { /* translators: Guest Author ID. */ WP_CLI::warning( sprintf( esc_html__( '-- Author already exists (ID #%s); skipping.', 'co-authors-plus' ), $guest_author->ID ) ); return; } WP_CLI::line( esc_html__( '-- Not found; creating profile.', 'co-authors-plus' ) ); $guest_author_id = $coauthors_plus->guest_authors->create( array( 'display_name' => $author['display_name'], 'user_login' => $author['user_login'], 'user_email' => $author['user_email'], 'first_name' => $author['first_name'], 'last_name' => $author['last_name'], 'website' => $author['website'], 'description' => $author['description'], 'avatar' => $author['avatar'], ) ); if ( is_wp_error( $guest_author_id ) ) { /* translators: The error message. */ WP_CLI::warning( sprintf( esc_html__( '-- Failed to create guest author: %s', 'co-authors-plus' ), $guest_author_id->get_error_message() ) ); return; } if ( isset( $author['author_id'] ) ) { update_post_meta( $guest_author_id, '_original_author_id', $author['ID'] ); } update_post_meta( $guest_author_id, '_original_author_login', $author['user_login'] ); /* translators: Guest Author ID. */ WP_CLI::success( sprintf( esc_html__( '-- Created as guest author #%s', 'co-authors-plus' ), $guest_author_id ) ); } /** * Clear all the caches for memory management. */ private function stop_the_insanity(): void { global $wpdb, $wp_object_cache; $wpdb->queries = array(); // or define( 'WP_IMPORTING', true ); if ( ! is_object( $wp_object_cache ) ) { return; } $wp_object_cache->group_ops = array(); $wp_object_cache->stats = array(); $wp_object_cache->memcache_debug = array(); $wp_object_cache->cache = array(); if ( is_callable( $wp_object_cache, '__remoteset' ) ) { $wp_object_cache->__remoteset(); // important } } /** * Obtains the raw SQL for posts that are missing a specific term. * * @param string $author_taxonomy The author taxonomy to search for. * @param string[] $post_types The post types to search for. * @param string[] $post_statuses The post statuses to search for. * @param int[] $specific_post_ids The specific post IDs to search for. * @param int|null $above_post_id The post ID to start from. * @param int|null $below_post_id The post ID to end at. * * @return array * @throws Exception If the $above_post_id is greater than or equal to the $below_post_id. */ private function get_sql_for_posts_with_missing_terms( $author_taxonomy, $post_types = [ 'post' ], $post_statuses = [ 'publish' ], $specific_post_ids = [], $above_post_id = null, $below_post_id = null ) { global $wpdb; $sql_and_args = [ 'sql' => '', 'args' => [ $author_taxonomy, self::SKIP_POST_FOR_BACKFILL_META_KEY ], ]; $post_status_placeholder = implode( ',', array_fill( 0, count( $post_statuses ), '%s' ) ); $sql_and_args['args'] = array_merge( $post_statuses, $sql_and_args['args'] ); $post_types_placeholder = implode( ',', array_fill( 0, count( $post_types ), '%s' ) ); $sql_and_args['args'] = array_merge( $post_types, $sql_and_args['args'] ); $from = $wpdb->posts; $specific_id_constraint = ''; if ( ! empty( $specific_post_ids ) ) { $specific_post_ids_placeholder = implode( ',', array_fill( 0, count( $specific_post_ids ), '%d' ) ); $specific_id_constraint = "AND ID IN ( $specific_post_ids_placeholder )"; $sql_and_args['args'] = array_merge( $sql_and_args['args'], $specific_post_ids ); } elseif ( null !== $above_post_id || null !== $below_post_id ) { if ( null !== $above_post_id && null !== $below_post_id && ( $below_post_id <= $above_post_id ) ) { throw new Exception( 'The $above_post_id param must be less than the $below_post_id param.' ); } $ids_between_constraint = []; if ( null !== $above_post_id ) { array_unshift( $ids_between_constraint, 'ID > %d' ); array_unshift( $sql_and_args['args'], $above_post_id ); } if ( null !== $below_post_id ) { array_unshift( $ids_between_constraint, 'ID < %d' ); array_unshift( $sql_and_args['args'], $below_post_id ); } $from = "( SELECT * FROM $wpdb->posts WHERE " . implode( ' AND ', $ids_between_constraint ) . ' ) as sub'; } $sql_and_args['sql'] = "SELECT ID as post_id, post_author FROM $from WHERE post_type IN ( $post_types_placeholder ) AND post_status IN ( $post_status_placeholder ) AND post_author <> 0 AND ID NOT IN ( SELECT tr.object_id FROM $wpdb->term_relationships tr LEFT JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy = %s GROUP BY tr.object_id ) AND ID NOT IN ( SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %s ) $specific_id_constraint ORDER BY ID"; return $sql_and_args; } /** * Obtains the count of posts that are missing a specific term. * * @param string $author_taxonomy The author taxonomy to search for. * @param string[] $post_types The post types to search for. * @param string[] $post_statuses The post statuses to search for. * @param int[] $specific_post_ids The specific post IDs to search for. * @param int|null $above_post_id The post ID to start from. * @param int|null $below_post_id The post ID to end at. * * @return int * @throws Exception If the $above_post_id is greater than or equal to the $below_post_id. */ private function get_count_of_posts_with_missing_terms( $author_taxonomy, $post_types = [ 'post' ], $post_statuses = [ 'publish' ], $specific_post_ids = [], $above_post_id = null, $below_post_id = null ) { global $wpdb; [ $sql, $args, ] = array_values( $this->get_sql_for_posts_with_missing_terms( $author_taxonomy, $post_types, $post_statuses, $specific_post_ids, $above_post_id, $below_post_id ) ); // Replace the first SELECT with SELECT COUNT(*). $sql = preg_replace( '/^(SELECT(?s)(.*?)FROM)/', 'SELECT COUNT(*) FROM', $sql, 1 ); // phpcs:disable -- Query is properly prepared return intval( $wpdb->get_var( $wpdb->prepare( $sql, $args ) ) ); // phpcs:enable } /** * Obtains posts that are missing a specific term. * * @param string $author_taxonomy The author taxonomy to search for. * @param string[] $post_types The post types to search for. * @param string[] $post_statuses The post statuses to search for. * @param bool $batched Whether to process the records in batches. * @param int $records_per_batch The number of posts to retrieve per page. * @param int[] $specific_post_ids The specific post IDs to search for. * @param int|null $above_post_id The post ID to start from. * @param int|null $below_post_id The post ID to end at. * * @return array * @throws Exception If the $above_post_id is greater than or equal to the $below_post_id. */ private function get_posts_with_missing_terms( $author_taxonomy, $post_types = [ 'post' ], $post_statuses = [ 'publish' ], $batched = false, $records_per_batch = 250, $specific_post_ids = [], $above_post_id = null, $below_post_id = null ) { global $wpdb; [ $sql, $args, ] = array_values( $this->get_sql_for_posts_with_missing_terms( $author_taxonomy, $post_types, $post_statuses, $specific_post_ids, $above_post_id, $below_post_id ) ); if ( $batched ) { $sql .= " LIMIT $records_per_batch"; } // phpcs:disable -- Query is properly prepared return $wpdb->get_results( $wpdb->prepare( $sql, $args ) ); // phpcs:enable } /** * This function will insert a postmeta row for posts that should be skipped for processing in the author term * backfill command ('create-author-terms-for-posts' or function name `create_author_terms_for_posts`). * * @param int $post_id The Post ID that needs to be skipped. * @param string $reason The reason the post needs to be skipped. * * @return void; */ private function skip_backfill_for_post( $post_id, $reason ) { add_post_meta( $post_id, self::SKIP_POST_FOR_BACKFILL_META_KEY, $reason, true ); } /** * Convenience function to generate a formatted percentage string. * * @param int $completed Number of completed cycles. * @param int $total Total number of cycles. * * @return string */ private function get_formatted_complete_percentage( $completed, $total ) { return number_format( ( $completed / $total ) * 100, 2 ) . '%'; } } src/__mocks__/authors.js000060400000000711147177171730011300 0ustar00export const selectedAuthors = [ { value: 'ruby', display: 'Ruby Bridges', }, { value: 'chanda', display: 'Chanda Prescod-Weinstein', }, { value: 'imaraj', display: 'Imara Jones', }, { value: 'echeng', display: 'Eugenia Cheng', }, ]; export const newAuthorValue = 'questlove'; export const dropdownOptions = [ { value: 'questlove', display: 'Ahmir Thompson', }, { value: 'claudette', display: 'Claudette Colvin', }, ]; src/__tests__/utils.test.js000060400000004077147177171730011770 0ustar00import { moveItem, removeItem, addItemByValue } from '../utils'; import { selectedAuthors, newAuthorValue, dropdownOptions, } from '../__mocks__/authors'; describe( 'Utility - moveItem', () => { it( 'should move an option down', () => { expect( moveItem( selectedAuthors[ 0 ], selectedAuthors, 'down' ) ).toStrictEqual( [ selectedAuthors[ 1 ], selectedAuthors[ 0 ], selectedAuthors[ 2 ], selectedAuthors[ 3 ], ] ); } ); it( 'should move an option up', () => { expect( moveItem( selectedAuthors[ 2 ], selectedAuthors, 'up' ) ).toStrictEqual( [ selectedAuthors[ 0 ], selectedAuthors[ 2 ], selectedAuthors[ 1 ], selectedAuthors[ 3 ], ] ); } ); it( 'should move an item to last', () => { expect( moveItem( selectedAuthors[ 2 ], selectedAuthors, 'down' ) ).toStrictEqual( [ selectedAuthors[ 0 ], selectedAuthors[ 1 ], selectedAuthors[ 3 ], selectedAuthors[ 2 ], ] ); } ); it( 'should move items multiple times in multiple directions', () => { expect( moveItem( selectedAuthors[ 2 ], selectedAuthors, 'up' ) ).toStrictEqual( [ selectedAuthors[ 0 ], selectedAuthors[ 2 ], selectedAuthors[ 1 ], selectedAuthors[ 3 ], ] ); const reorderedArray = [ selectedAuthors[ 0 ], selectedAuthors[ 2 ], selectedAuthors[ 1 ], selectedAuthors[ 3 ], ]; expect( moveItem( selectedAuthors[ 2 ], reorderedArray, 'down' ) ).toStrictEqual( [ selectedAuthors[ 0 ], selectedAuthors[ 1 ], selectedAuthors[ 2 ], selectedAuthors[ 3 ], ] ); } ); } ); describe( 'Utility - removeItem', () => { it( 'should remove an item from an array', () => { expect( removeItem( selectedAuthors[ 2 ], selectedAuthors ) ).toStrictEqual( [ selectedAuthors[ 0 ], selectedAuthors[ 1 ], selectedAuthors[ 3 ], ] ); } ); } ); describe( 'Utility - addItemByValue', () => { it( 'should add an item from dropdown options to end of the array', () => { expect( addItemByValue( newAuthorValue, selectedAuthors, dropdownOptions ) ).toStrictEqual( [ ...selectedAuthors, dropdownOptions[ 0 ] ] ); } ); } ); src/blocks/block-coauthor-avatar/block.json000060400000002367147177171730015010 0ustar00{ "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "co-authors-plus/avatar", "version": "1.0.0", "title": "Co-Author Avatar", "category": "theme", "description": "Displays a small scale version of a co-author's avatar. Utilizes fallbacks from Gravatar so everyone has an avatar.", "keywords": [ "coauthors" ], "supports": { "html": false, "__experimentalBorder": { "color": true, "radius": true, "width": true, "__experimentalSelector": "img, .block-editor-media-placeholder", "__experimentalSkipSerialization": true, "__experimentalDefaultControls": { "color": false, "radius": false, "width": false } }, "spacing": { "margin": true, "padding": true, "__experimentalDefaultControls": { "margin": false, "padding": false } } }, "usesContext": [ "co-authors-plus/author", "co-authors-plus/layout" ], "attributes": { "size": { "type": "number", "default": 24 }, "isLink": { "type": "boolean", "default": false }, "rel": { "type": "string" }, "verticalAlign": { "type": "string" }, "align": { "type": "string" } }, "textdomain": "co-authors-plus", "editorScript": "file:./index.js", "style": "file:./style-index.css" } src/blocks/block-coauthor-avatar/edit.js000060400000011313147177171730014275 0ustar00import { __ } from '@wordpress/i18n'; import { useBlockProps, InspectorControls, __experimentalUseBorderProps as useBorderProps, BlockControls, BlockAlignmentToolbar, } from '@wordpress/block-editor'; import { SelectControl, PanelBody, ToggleControl, TextControl, } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import classnames from 'classnames'; import PlaceholderImage from '../components/placeholder-image'; /** * The edit function describes the structure of your block in the context of the * editor. This represents what the editor will render when the block is used. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit * * @return {WPElement} Element to render. */ export default function Edit( { context, attributes, setAttributes } ) { const { isLink, rel, size, verticalAlign, align } = attributes; const authorPlaceholder = useSelect( ( select ) => select( 'co-authors-plus/blocks' ).getAuthorPlaceholder(), [] ); const author = context[ 'co-authors-plus/author' ] || authorPlaceholder; const layout = context[ 'co-authors-plus/layout' ] || ''; const { avatar_urls } = author; if ( ! avatar_urls || 0 === avatar_urls.length ) { return null; } const sizes = Object.keys( avatar_urls ).map( ( size ) => { return { value: size, label: `${ size } x ${ size }`, }; } ); const borderProps = useBorderProps( attributes ); const src = avatar_urls[ size ] ?? ''; return ( <> { 'default' !== layout ? ( { setAttributes({align: nextAlign}) } } controls={['none', 'left', 'center', 'right']} /> ) : ( null ) }
      { '' === src ? ( ) : ( ) }
      { setAttributes( { size: Number( nextSize ), } ); } } /> setAttributes( { isLink: ! isLink } ) } checked={ isLink } /> { isLink && ( setAttributes( { rel: newRel } ) } /> ) } { 'default' === layout ? ( { setAttributes( { verticalAlign: '' === value ? undefined : value, } ); } } help={ __( 'Vertical alignment defaults to bottom in the block layout and middle in the inline layout.', 'co-authors-plus' ) } /> ) : ( null ) } ); } src/blocks/block-coauthor-avatar/index.js000060400000001363147177171730014463 0ustar00/** * Registers a new block provided a unique name and an object defining its behavior. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ import { registerBlockType } from '@wordpress/blocks'; import { commentAuthorAvatar as icon } from '@wordpress/icons'; /** * Internal dependencies */ import Edit from './edit'; import metadata from './block.json'; /** * Style shared between editor and content */ import './style.css'; /** * Every block starts by registering a new block type definition. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ registerBlockType( metadata.name, { /** * @see ./edit.js */ edit: Edit, icon, } ); src/blocks/block-coauthor-avatar/style.css000060400000000740147177171730014666 0ustar00/* Default Layout */ .wp-block-co-authors-plus-avatar :where(img) { height: auto; max-width: 100%; vertical-align: bottom; } /* Inline Layout */ .wp-block-co-authors-plus-coauthors.is-layout-flow .wp-block-co-authors-plus-avatar :where(img) { vertical-align: middle; } /* Align left, right, center */ .wp-block-co-authors-plus-avatar:is(.alignleft,.alignright) { display: table; } .wp-block-co-authors-plus-avatar.aligncenter { display: table; margin-inline: auto; } src/blocks/block-coauthor-description/block.json000060400000002221147177171730016042 0ustar00{ "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "co-authors-plus/description", "version": "1.0.0", "title": "Co-Author Biography", "category": "theme", "description": "Displays a co-author's biographical description.", "keywords": [ "coauthors", "description", "bio", "biography" ], "supports": { "html": false, "color": { "link": true, "text": true, "background": true, "__experimentalDefaultControls": {} }, "typography": { "fontSize": true, "lineHeight": true, "__experimentalFontFamily": true, "__experimentalTextDecoration": true, "__experimentalFontStyle": true, "__experimentalFontWeight": true, "__experimentalLetterSpacing": true, "__experimentalTextTransform": true, "__experimentalDefaultControls": {} }, "spacing": { "margin": true, "padding": true, "__experimentalDefaultControls": { "margin": false, "padding": false } } }, "usesContext": [ "co-authors-plus/author" ], "attributes": { "textAlign": { "type": "string" } }, "textdomain": "co-authors-plus", "editorScript": "file:./index.js", "editorStyle": "file:./index.css" } src/blocks/block-coauthor-description/edit.js000060400000003127147177171730015346 0ustar00/** * React hook that is used to mark the block wrapper element. * It provides all the necessary props like the class name. * * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops */ import { useBlockProps, AlignmentControl, BlockControls, store as blockEditorStore, } from '@wordpress/block-editor'; import { __ } from '@wordpress/i18n'; import { useSelect } from '@wordpress/data'; import classnames from 'classnames'; import './editor.css'; /** * The edit function describes the structure of your block in the context of the * editor. This represents what the editor will render when the block is used. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit * * @return {WPElement} Element to render. */ export default function Edit( { context, attributes, setAttributes } ) { const { textAlign } = attributes; const authorPlaceholder = useSelect( ( select ) => select( 'co-authors-plus/blocks' ).getAuthorPlaceholder(), [] ); const author = context[ 'co-authors-plus/author' ] || authorPlaceholder; const { description } = author; return ( <> { setAttributes( { textAlign: nextAlign } ); } } />
      ); } src/blocks/block-coauthor-description/editor.css000060400000000103147177171730016052 0ustar00.wp-block-co-authors-plus-description a { pointer-events: none; } src/blocks/block-coauthor-description/index.js000060400000001244147177171730015526 0ustar00/** * Registers a new block provided a unique name and an object defining its behavior. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ import { registerBlockType } from '@wordpress/blocks'; import { termDescription as icon } from '@wordpress/icons'; /** * Internal dependencies */ import Edit from './edit'; import metadata from './block.json'; /** * Every block starts by registering a new block type definition. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ registerBlockType( metadata.name, { /** * @see ./edit.js */ edit: Edit, icon, } ); src/blocks/block-coauthor-image/block.json000060400000002723147177171730014610 0ustar00{ "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "co-authors-plus/image", "version": "1.0.0", "title": "Co-Author Featured Image", "category": "theme", "description": "Uses your theme's image sizes to display a scalable avatar for a co-author with a guest author profile. Does not fallback to Gravatar images.", "keywords": [ "coauthors" ], "supports": { "__experimentalBorder": { "color": true, "radius": true, "width": true, "__experimentalSelector": "img, .block-editor-media-placeholder", "__experimentalSkipSerialization": true, "__experimentalDefaultControls": { "color": false, "radius": false, "width": false } }, "spacing": { "margin": true, "padding": true, "__experimentalDefaultControls": { "margin": false, "padding": false } } }, "usesContext": [ "co-authors-plus/author", "co-authors-plus/layout" ], "attributes": { "isLink": { "type": "boolean", "default": false }, "rel": { "type": "string" }, "aspectRatio": { "type": "string" }, "width": { "type": "string" }, "height": { "type": "string" }, "scale": { "type": "string", "default": "cover" }, "sizeSlug": { "type": "string" }, "verticalAlign": { "type": "string" }, "align": { "type": "string" } }, "textdomain": "co-authors-plus", "editorScript": "file:./index.js", "editorStyle": "file:./index.css", "style": "file:./style-index.css" } src/blocks/block-coauthor-image/dimension-controls.js000060400000013414147177171730017006 0ustar00/** * WordPress dependencies */ import { __, _x } from '@wordpress/i18n'; import { SelectControl, __experimentalUnitControl as UnitControl, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, __experimentalUseCustomUnits as useCustomUnits, __experimentalToolsPanelItem as ToolsPanelItem, } from '@wordpress/components'; import { InspectorControls, useSetting } from '@wordpress/block-editor'; const SCALE_OPTIONS = ( <> ); const DEFAULT_SCALE = 'cover'; const DEFAULT_SIZE = 'thumbnail'; const scaleHelp = { cover: __( 'Image is scaled and cropped to fill the entire space without being distorted.' ), contain: __( 'Image is scaled to fill the space without clipping nor distorting.' ), fill: __( 'Image will be stretched and distorted to completely fill the space.' ), }; const DimensionControls = ( { clientId, attributes: { aspectRatio, width, height, scale, sizeSlug }, setAttributes, imageSizeOptions = [], } ) => { const defaultUnits = [ 'px', '%', 'vw', 'em', 'rem' ]; const units = useCustomUnits( { availableUnits: useSetting( 'spacing.units' ) || defaultUnits, } ); const onDimensionChange = ( dimension, nextValue ) => { const parsedValue = parseFloat( nextValue ); /** * If we have no value set and we change the unit, * we don't want to set the attribute, as it would * end up having the unit as value without any number. */ if ( isNaN( parsedValue ) && nextValue ) return; setAttributes( { [ dimension ]: parsedValue < 0 ? '0' : nextValue, } ); }; const scaleLabel = _x( 'Scale', 'Image scaling options' ); const showScaleControl = height || ( aspectRatio && aspectRatio !== 'auto' ); return ( !! aspectRatio } label={ __( 'Aspect ratio' ) } onDeselect={ () => setAttributes( { aspectRatio: undefined } ) } resetAllFilter={ () => ( { aspectRatio: undefined, } ) } isShownByDefault={ true } panelId={ clientId } > setAttributes( { aspectRatio: nextAspectRatio } ) } /> !! height } label={ __( 'Height' ) } onDeselect={ () => setAttributes( { height: undefined } ) } resetAllFilter={ () => ( { height: undefined, } ) } isShownByDefault={ true } panelId={ clientId } > onDimensionChange( 'height', nextHeight ) } units={ units } /> !! width } label={ __( 'Width' ) } onDeselect={ () => setAttributes( { width: undefined } ) } resetAllFilter={ () => ( { width: undefined, } ) } isShownByDefault={ true } panelId={ clientId } > onDimensionChange( 'width', nextWidth ) } units={ units } /> { showScaleControl && ( !! scale && scale !== DEFAULT_SCALE } label={ scaleLabel } onDeselect={ () => setAttributes( { scale: DEFAULT_SCALE, } ) } resetAllFilter={ () => ( { scale: DEFAULT_SCALE, } ) } isShownByDefault={ true } panelId={ clientId } > setAttributes( { scale: value, } ) } isBlock > { SCALE_OPTIONS } ) } { !! imageSizeOptions.length && ( !! sizeSlug } label={ __( 'Resolution' ) } onDeselect={ () => setAttributes( { sizeSlug: undefined } ) } resetAllFilter={ () => ( { sizeSlug: undefined, } ) } isShownByDefault={ false } panelId={ clientId } > setAttributes( { sizeSlug: nextSizeSlug } ) } help={ __( 'Select the size of the source image.' ) } /> ) } ); }; export default DimensionControls; src/blocks/block-coauthor-image/edit.js000060400000013620147177171730014104 0ustar00/** * Co-Author Feature Image */ import { __ } from '@wordpress/i18n'; import { useBlockProps, store as blockEditorStore, __experimentalUseBorderProps as useBorderProps, InspectorControls, BlockControls, BlockAlignmentToolbar, } from '@wordpress/block-editor'; import { TextControl, PanelBody, ToggleControl, SelectControl, } from '@wordpress/components'; import { useSelect } from '@wordpress/data'; import { store as coreStore } from '@wordpress/core-data'; import DimensionControls from './dimension-controls'; import PlaceholderImage from '../components/placeholder-image'; import { getAvailableSizeSlug, getMediaSrc, getMediaDimensions, getPlaceholderImageDimensions, } from './utils'; import classnames from 'classnames'; /** * Edit * * @export * @param {Object} props { attributes, setAttributes, context, clientId } * @return {WPElement} */ export default function Edit( { attributes, setAttributes, context, clientId, } ) { const { aspectRatio, height, isLink, rel, scale, sizeSlug, verticalAlign, width, align } = attributes; // Author const authorPlaceholder = useSelect( ( select ) => select( 'co-authors-plus/blocks' ).getAuthorPlaceholder(), [] ); const author = context[ 'co-authors-plus/author' ] || authorPlaceholder; const layout = context[ 'co-authors-plus/layout' ] || ''; // Media const media = useSelect( ( select ) => 0 !== author.featured_media && select( coreStore ).getMedia( author.featured_media, { context: 'view', } ), [ author.featured_media ] ); // Image Sizes and Dimensions const { imageSizes, imageDimensions } = useSelect( ( select ) => select( blockEditorStore ).getSettings(), [] ); const imageSizeOptions = imageSizes.map( ( { name, slug } ) => ( { value: slug, label: name, } ) ); const availableSizeSlug = getAvailableSizeSlug( media, imageDimensions, sizeSlug ); const dimensions = getMediaDimensions( media, imageDimensions, availableSizeSlug ); const placeholderDimensions = media ? {} : getPlaceholderImageDimensions( imageDimensions, availableSizeSlug ); // Border const borderProps = useBorderProps( attributes ); // Don't placehold feature images for real authors with no image. // Do placehold them in author archive contexts. const panic = 0 !== author.id && false === media; return ( <> { '' === layout ? ( { setAttributes({align: nextAlign}) } } controls={['none', 'left', 'center', 'right', 'wide', 'full']} /> ) : (null) } { panic ? null : (
      { media ? ( { ) : ( ) }
      ) } setAttributes( { isLink: ! isLink } ) } checked={ isLink } /> { isLink && ( setAttributes( { rel: newRel } ) } /> ) } { 'default' === layout ? ( { setAttributes( { verticalAlign: '' === value ? undefined : value, } ); } } help={ __( 'Vertical alignment defaults to bottom in the block layout and middle in the inline layout.', 'co-authors-plus' ) } /> ) : ( null ) } ); } src/blocks/block-coauthor-image/index.js000060400000001736147177171730014273 0ustar00/** * Registers a new block provided a unique name and an object defining its behavior. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ import { registerBlockType } from '@wordpress/blocks'; import { image as icon } from '@wordpress/icons'; /** * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files. * All files containing `style` keyword are bundled together. The code used * gets applied both to the front of your site and to the editor. * * @see https://www.npmjs.com/package/@wordpress/scripts#using-css */ import './style.css'; /** * Internal dependencies */ import Edit from './edit'; import metadata from './block.json'; /** * Every block starts by registering a new block type definition. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ registerBlockType( metadata.name, { /** * @see ./edit.js */ edit: Edit, icon, } ); src/blocks/block-coauthor-image/style.css000060400000001456147177171730014477 0ustar00/** * The following styles get applied both on the front of your site * and in the editor. * * Replace them with your own styles or remove the file completely. */ /* Default Layout */ .wp-block-co-authors-plus-image { margin-bottom: 0; } .wp-block-co-authors-plus-image :where(img) { height: auto; max-width: 100%; vertical-align: bottom; } /* Inline Layout */ .wp-block-co-authors-plus-coauthors.is-layout-flow .wp-block-co-authors-plus-image :where(img) { vertical-align: middle; } /* Align wide, full */ .wp-block-co-authors-plus-image:is(.alignfull,.alignwide) :where(img) { width: 100%; } /* Align left, right, center */ .wp-block-co-authors-plus-image:is(.alignleft,.alignright) { display: table; } .wp-block-co-authors-plus-image.aligncenter { display: table; margin-inline: auto; } src/blocks/block-coauthor-image/utils.js000060400000005051147177171730014316 0ustar00/** * Get Media Dimensions * * @param {Object} media * @param {Object} imageDimensions * @param {string} sizeSlug * @return {Object} {width,height} */ export function getMediaDimensions( media, imageDimensions, sizeSlug ) { if ( ! media ) { return {}; } const mediaSize = media.media_details.sizes[ sizeSlug ]; if ( 'full' === sizeSlug ) { return { width: mediaSize.width, height: mediaSize.height, }; } const imageSize = imageDimensions[ sizeSlug ]; if ( true === imageSize.crop || imageSize.width === imageSize.height ) { return { width: imageSize.width, height: imageSize.height, }; } const mediaAspectRatio = mediaSize.width / mediaSize.height; if ( imageSize.width > imageSize.height ) { return { width: imageSize.width, height: imageSize.width / mediaAspectRatio, }; } return { width: imageSize.height * mediaAspectRatio, height: imageSize.height, }; } /** * Get Media Src * * @param {Object} media * @param {string} sizeSlug * @return {string} */ export function getMediaSrc( media, sizeSlug ) { return media?.media_details?.sizes[ sizeSlug ]?.source_url; } /** * Get Placeholder Image Dimensions * * @param {Object} imageDimensions * @param {string} sizeSlug * @return {Object} {width,height} */ export function getPlaceholderImageDimensions( imageDimensions, sizeSlug ) { const size = imageDimensions[ sizeSlug ]; if ( true === size.crop || size.width === size.height ) { return { width: size.width, height: size.height, }; } if ( size.width > size.height ) { return { width: size.width, height: size.width, }; } return { width: size.height, height: size.height, }; } /** * Get Size Keys Intersection * * @param {Object} media * @param {Object} imageDimensions * @return {Array} */ export function getSizeKeysIntersection( media, imageDimensions ) { if ( ! media ) { return Object.keys( imageDimensions ); } const mediaKeys = Object.keys( media.media_details.sizes ); const sizeKeys = Object.keys( imageDimensions ); return Array.from( new Set( [ ...mediaKeys.filter( ( key ) => sizeKeys.includes( key ) ), ] ) ); } /** * Get Available Size Slug * * @param {Object} media * @param {Object} imageDimensions * @param {string} sizeSlug * @return {string} */ export function getAvailableSizeSlug( media, imageDimensions, sizeSlug ) { if ( media && 'full' === sizeSlug ) { return sizeSlug; } const keys = getSizeKeysIntersection( media, imageDimensions ); if ( sizeSlug && keys.includes( sizeSlug ) ) { return sizeSlug; } return keys[0]; } src/blocks/block-coauthor-name/block.json000060400000002533147177171730014445 0ustar00{ "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "co-authors-plus/name", "version": "1.0.0", "title": "Co-Author Name", "category": "theme", "description": "Displays a co-author's display name and optionally links to their author archive.", "keywords": [ "coauthors" ], "supports": { "html": false, "color": { "link": true, "text": true, "background": true, "__experimentalDefaultControls": {} }, "typography": { "fontSize": true, "lineHeight": true, "__experimentalFontFamily": true, "__experimentalTextDecoration": true, "__experimentalFontStyle": true, "__experimentalFontWeight": true, "__experimentalLetterSpacing": true, "__experimentalTextTransform": true, "__experimentalDefaultControls": {} }, "spacing": { "margin": true, "padding": true, "__experimentalDefaultControls": { "margin": false, "padding": false } } }, "usesContext": [ "co-authors-plus/author" ], "attributes": { "isLink": { "type": "boolean", "default": false }, "rel": { "type": "string", "default": "author" }, "tagName": { "type": "string", "default": "p" }, "textAlign": { "type": "string" } }, "textdomain": "co-authors-plus", "editorScript": "file:./index.js", "editorStyle": "file:./index.css", "style": "file:./style-index.css" } src/blocks/block-coauthor-name/edit.js000060400000006055147177171730013746 0ustar00/** * React hook that is used to mark the block wrapper element. * It provides all the necessary props like the class name. * * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops */ import { useBlockProps, InspectorControls, AlignmentControl, BlockControls, } from '@wordpress/block-editor'; import { TextControl, PanelBody, ToggleControl, SelectControl, } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { useSelect } from '@wordpress/data'; import classnames from 'classnames'; /** * The edit function describes the structure of your block in the context of the * editor. This represents what the editor will render when the block is used. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit * * @return {WPElement} Element to render. */ export default function Edit( { context, attributes, setAttributes } ) { const { isLink, rel, tagName, textAlign } = attributes; const authorPlaceholder = useSelect( ( select ) => select( 'co-authors-plus/blocks' ).getAuthorPlaceholder(), [] ); const author = context[ 'co-authors-plus/author' ] || authorPlaceholder; const { link, display_name } = author; const TagName = tagName; return ( <> { setAttributes( { textAlign: nextAlign } ); } } /> { isLink ? ( event.preventDefault() } > { display_name } ) : ( display_name ) } setAttributes( { isLink: ! isLink } ) } checked={ isLink } /> { isLink && ( <> setAttributes( { rel: newRel } ) } /> ) } )' ), value: 'p' }, { label: '', value: 'span' }, { label: '

      ', value: 'h1' }, { label: '

      ', value: 'h2' }, { label: '

      ', value: 'h3' }, { label: '

      ', value: 'h4' }, { label: '

      ', value: 'h5' }, { label: '
      ', value: 'h6' }, ] } value={ tagName } onChange={ ( value ) => setAttributes( { tagName: value } ) } /> ); } src/blocks/block-coauthor-name/index.js000060400000001240147177171730014117 0ustar00/** * Registers a new block provided a unique name and an object defining its behavior. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ import { registerBlockType } from '@wordpress/blocks'; import { postAuthor as icon } from '@wordpress/icons'; /** * Internal dependencies */ import Edit from './edit'; import metadata from './block.json'; /** * Every block starts by registering a new block type definition. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ registerBlockType( metadata.name, { /** * @see ./edit.js */ edit: Edit, icon, } ); src/blocks/block-coauthors/components/memoized-coauthor-template-block-preview.js000060400000001422147177171730024457 0ustar00import { memo } from '@wordpress/element'; import { __experimentalUseBlockPreview as useBlockPreview } from '@wordpress/block-editor'; /** * CoAuthor Template Block Preview */ function CoAuthorTemplateBlockPreview( { blocks, blockContextId, isHidden, setActiveBlockContextId, } ) { const blockPreviewProps = useBlockPreview( { blocks, props: { className: 'wp-block-co-authors-plus-coauthor', }, } ); const handleOnClick = () => { setActiveBlockContextId( blockContextId ); }; const style = { display: isHidden ? 'none' : undefined, }; return (
      ); } export default memo( CoAuthorTemplateBlockPreview ); src/blocks/block-coauthors/block.json000060400000002433147177171730013711 0ustar00{ "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 3, "name": "co-authors-plus/coauthors", "version": "1.0.0", "title": "Co-Authors", "category": "theme", "description": "Displays the co-authors of a post by using blocks to create a template. Start with co-author name and add any other co-author blocks.", "supports": { "html": false, "color": { "link": true, "text": true, "background": true, "__experimentalDefaultControls": {} }, "typography": { "fontSize": true, "lineHeight": true, "__experimentalFontFamily": true, "__experimentalTextDecoration": true, "__experimentalFontStyle": true, "__experimentalFontWeight": true, "__experimentalLetterSpacing": true, "__experimentalTextTransform": true, "__experimentalDefaultControls": {} }, "spacing": { "margin": true, "padding": true, "blockGap": true, "__experimentalDefaultControls": { "margin": false, "padding": false, "blockGap": false } }, "layout": true }, "attributes": { "layout": { "type": "object", "default": { "type": "default" } }, "textAlign": { "type": "string" } }, "usesContext": [ "postId" ], "textdomain": "co-authors-plus", "editorScript": "file:./index.js", "style": "file:./style-index.css" } src/blocks/block-coauthors/edit.js000060400000016535147177171730013217 0ustar00/** * React hook that is used to mark the block wrapper element. * It provides all the necessary props like the class name. * * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops */ import { BlockControls, BlockContextProvider, useBlockProps, useInnerBlocksProps, store as blockEditorStore, InspectorControls, RichText, __experimentalGetGapCSSValue, AlignmentControl, } from '@wordpress/block-editor'; import { TextControl, ToolbarGroup, PanelBody } from '@wordpress/components'; import apiFetch from '@wordpress/api-fetch'; import { useSelect, useDispatch } from '@wordpress/data'; import { useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import { row, stack, grid, list, lineDashed } from '@wordpress/icons'; import classnames from 'classnames'; import MemoizedCoAuthorTemplateBlockPreview from './components/memoized-coauthor-template-block-preview'; /** * CoAuthor Template Inner Blocks */ function CoAuthorTemplateInnerBlocks() { return (
      ); } const ALLOWED_FORMATS = [ 'core/bold', 'core/italic', 'core/text-color' ]; /** * The edit function describes the structure of your block in the context of the * editor. This represents what the editor will render when the block is used. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit * * @return {WPElement} Element to render. */ export default function Edit( { attributes, setAttributes, clientId, context, isSelected, __unstableLayoutClassNames } ) { const { prefix, separator, lastSeparator, suffix, layout, textAlign } = attributes; const { type: layoutType, orientation: layoutOrientation } = layout || {}; const { postId } = context; const authorPlaceholder = useSelect( ( select ) => select( 'co-authors-plus/blocks' ).getAuthorPlaceholder(), [] ); const [ coAuthors, setCoAuthors ] = useState( [ authorPlaceholder ] ); const [ activeBlockContextId, setActiveBlockContextId ] = useState(); const noticesDispatch = useDispatch( 'core/notices' ); useEffect( () => { if ( ! postId ) { return; } const controller = new AbortController(); apiFetch( { path: `/coauthors/v1/coauthors?post_id=${ postId }`, signal: controller.signal, } ) .then( setCoAuthors ) .catch( handleError ); return () => { controller.abort(); }; }, [ postId ] ); /** * Handle Error * * @param {Error} */ function handleError( error ) { if ( 'AbortError' === error.name ) { return; } noticesDispatch.createErrorNotice( error.message, { isDismissible: true, } ); } const blocks = useSelect( ( select ) => { return select( blockEditorStore ).getBlocks( clientId ); } ); const setLayout = ( nextLayout ) => { setAttributes( { layout: nextLayout, } ); }; const layoutControls = [ { icon: lineDashed, title: __( 'Inline view' ), onClick: () => setLayout( { type: 'default' }), isActive: layoutType === 'default' }, { icon: list, title: __( 'List view' ), onClick: () => setLayout( { type: 'constrained' } ), isActive: layoutType === 'constrained', }, { icon: grid, title: __( 'Grid view' ), onClick: () => setLayout( { type: 'grid' } ), isActive: layoutType === 'grid', }, { icon: row, title: __( 'Row view' ), onClick: () => setLayout( { type: 'flex', orientation: 'horizontal' } ), isActive: layoutType === 'flex' && 'horizontal' === layoutOrientation, }, { icon: stack, title: __( 'Stack view' ), onClick: () => setLayout( { type: 'flex', orientation: 'vertical' } ), isActive: layoutType === 'flex' && 'vertical' === layoutOrientation, }, ]; return ( <> { setAttributes( { textAlign: nextAlign } ); } } />
      { coAuthors && 'default' === layoutType && ( isSelected || prefix ) && ( setAttributes( { prefix: value } ) } tagName="span" /> ) } { coAuthors && coAuthors .map( ( author ) => { const isHidden = author.id === ( activeBlockContextId || coAuthors[ 0 ]?.id ); return ( { isHidden ? ( ) : null } ); } ) .reduce( ( previous, current, index, all ) => ( <> { previous } { 'default' === layoutType && ( { lastSeparator && index === all.length - 1 ? `${ lastSeparator }` : `${ separator }` } ) } { current } ) ) } { coAuthors && 'default' === layoutType && ( isSelected || suffix ) && ( setAttributes( { suffix: value } ) } tagName="span" /> ) }
      { 'default' === layoutType && ( { setAttributes( { separator: nextValue } ); } } help={ __( 'Enter character(s) used to separate authors.', 'co-authors-plus' ) } /> { setAttributes( { lastSeparator: nextValue } ); } } help={ __( 'Enter character(s) used to separate the last author.', 'co-authors-plus' ) } /> ) } ); } src/blocks/block-coauthors/index.js000060400000001447147177171730013375 0ustar00/** * Registers a new block provided a unique name and an object defining its behavior. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ import { registerBlockType } from '@wordpress/blocks'; import { people as icon } from '@wordpress/icons'; /** * Internal dependencies */ import Edit from './edit'; import save from './save'; import metadata from './block.json'; /** * Style shared between editor and content */ import './style.css'; /** * Every block starts by registering a new block type definition. * * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/ */ registerBlockType( metadata.name, { /** * @see ./edit.js */ edit: Edit, /** * @see ./save.js */ save, icon, } ); src/blocks/block-coauthors/save.js000060400000000722147177171730013217 0ustar00/** * Save */ import { useBlockProps, InnerBlocks, } from '@wordpress/block-editor'; import classnames from 'classnames'; /** * Save * * @return {WPElement} Element to render. */ export default function save( { attributes } ) { const { textAlign } = attributes; const className = classnames( { [ `has-text-align-${ textAlign }` ]: textAlign, } ); return (
      ); } src/blocks/block-coauthors/style.css000060400000000153147177171730013573 0ustar00.wp-block-co-authors-plus-coauthors.is-layout-flow [class*=wp-block-co-authors-plus] { display: inline; } src/blocks/components/placeholder-image.jsx000060400000002702147177171730015101 0ustar00import { useMemo } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; /** * Encode SVG * * @param {string} svgHTML * @return {string} */ function encodeSVG( svgHTML ) { return ( encodeURIComponent( svgHTML // Strip newlines and tabs .replace( /[\t\n\r]/gim, '' ) // Condense multiple spaces .replace( /\s\s+/g, ' ' ) ) // Encode parenthesis .replace( /\(/g, '%28' ) .replace( /\)/g, '%29' ) ); } /** * Get Placeholder Src * * @param {Object} { width, height } * @return {string} */ function getPlaceholderSrc( { width, height } ) { const svg = encodeSVG( ` ` ); return `data:image/svg+xml;charset=UTF-8,${ svg }`; } /** * Placeholder Image * * @export * @param {Object} props { dimensions, style, className } * @return {WPElement} */ export default function PlaceholderImage( { dimensions, style, className } ) { const src = useMemo( () => getPlaceholderSrc( dimensions ), [ dimensions ] ); return ( { ); } src/blocks-store/index.js000060400000000603147177171730011421 0ustar00import { createReduxStore, register } from '@wordpress/data'; import { applyFilters } from '@wordpress/hooks'; register( createReduxStore( 'co-authors-plus/blocks', { reducer: ( state = window.coAuthorsBlocks ) => { return state; }, selectors: { getAuthorPlaceholder: ( state ) => applyFilters( 'co-authors-plus.author-placeholder', state.authorPlaceholder ), }, } ) ); src/components/author-selection/index.jsx000060400000006103147177171730014655 0ustar00/** * External dependencies. */ import PropTypes from 'prop-types'; /** * WordPress dependencies. */ import { chevronUp, chevronDown, close } from '@wordpress/icons'; import { Button, Flex, FlexItem } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; /** * Utils */ import { moveItem, removeItem } from '../../utils'; /** * Author Selection feature. * * @param {Object} param0 props. * @param {array} param0.selectedAuthors selected authors array. * @param {function} param0.updateAuthors function to set selected authors. * * @returns {JSXElement} */ const AuthorsSelection = ( { selectedAuthors, updateAuthors } ) => { /** * * @param {object} author author object. * @param {function} action action type. */ const onClick = ( author, action ) => { let authors; switch ( action ) { case 'moveDown': authors = moveItem( author, selectedAuthors, 'down' ); break; case 'moveUp': authors = moveItem( author, selectedAuthors, 'up' ); break; case 'remove': authors = removeItem( author, selectedAuthors ); break; } updateAuthors( authors ); }; // Bail if there are no selected authors. if ( ! selectedAuthors?.length ) { return null; } return selectedAuthors.map( ( author, i ) => { const display = author.display; const value = author.value; return (
      { display }
      ); } ); }; AuthorsSelection.propTypes = { selectedAuthors: PropTypes.arrayOf( [ PropTypes.shape( { id: PropTypes.oneOfType( [ PropTypes.string, PropTypes.number ] ), userNiceName: PropTypes.string, login: PropTypes.string, email: PropTypes.string, displayName: PropTypes.string, avatar: PropTypes.string, } ), ] ).isRequired, updateAuthors: PropTypes.func.isRequired, }; export default AuthorsSelection; src/components/author-selection/README.md000060400000001053147177171730014276 0ustar00# AuthorSelection A component for adding and removing authors selected via search. ## Usage ```jsx ``` ## Props | name | type | required | description | |-----------------|----------|----------|--------------------------------------------| | authors | array | yes | Array of author objects. | | setAuthorsStore | function | yes | Callback setter for authors array updates. | src/components/co-authors/index.jsx000060400000010410147177171730013450 0ustar00/** * Dependencies. */ import PropTypes from 'prop-types'; /** * WordPress dependencies */ import apiFetch from '@wordpress/api-fetch'; import { ComboboxControl, Spinner } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; import { useDispatch, useSelect, register } from '@wordpress/data'; import { useEffect, useState } from '@wordpress/element'; import { useDebounce } from '@wordpress/compose'; /** * Components */ import AuthorsSelection from '../author-selection' /** * Utilities */ import { addItemByValue, formatAuthorData } from '../../utils'; /** * Store */ import coauthorsStore from '../../store'; /** * Styles */ import './style.css'; /** * Register our data store. */ register( coauthorsStore ); /** * The Render component that will be populated with data from * the select and methods from dispatch as composed below. * * @return {JSX.Element} Document sidebar panel component. */ const CoAuthors = () => { /** * Local state */ const [ selectedAuthors, setSelectedAuthors ] = useState( [] ); // Currently selected options. const [ dropdownOptions, setDropdownOptions ] = useState( [] ); // Options that are available in the dropdown. /** * Retrieve post id. */ const postId = useSelect( ( select ) => select( 'core/editor' ).getCurrentPostId() ); /** * CoAuthor select functions. */ const saveAuthors = useSelect( ( select ) => select( 'cap/authors' )?.saveAuthors, [] ); /** * CoAuthor select functions. */ const authors = useSelect( ( select ) => select( 'cap/authors' )?.getAuthors( postId ), [ postId ] ); /** * Dispatchers */ const { setAuthorsStore } = useDispatch( 'cap/authors' ); /** * Is saving post */ const isSavingPost = useSelect( (select) => select('core/editor').isSavingPost ); /** * Threshold filter for determining when a search query is preformed. * * @param {integer} threshold length threshold. default 2. */ const threshold = applyFilters( 'coAuthors.search.threshold', 2 ); /** * Setter for updating authors and selected authors simultaneously. * * @param {Array} newAuthors array of new authors. */ const updateAuthors = ( newAuthors ) => { setAuthorsStore( newAuthors ); setSelectedAuthors( newAuthors ); }; /** * Change handler for adding new item by value. * Updates authors state. * * @param {Object} newAuthorValue new authors selected. */ const onChange = ( newAuthorValue ) => { const newAuthors = addItemByValue( newAuthorValue, selectedAuthors, dropdownOptions ); updateAuthors( newAuthors ); }; /** * The callback for updating autocomplete in the ComboBox component. * Fetch a list of authors matching the search text. * * @param {string} query The text to search. */ const onFilterValueChange = useDebounce( async ( query ) => { let response = 0; // Don't kick off search without having at least two characters. if ( query.length < threshold ) { setDropdownOptions( [] ); return; } const existingAuthors = selectedAuthors .map( ( item ) => item.value ) .join( ',' ); try { response = await apiFetch( { path: `/coauthors/v1/search/?q=${ query }&existing_authors=${ existingAuthors }`, method: 'GET', } ); const formattedAuthors = ( ( items ) => { if ( items.length > 0 ) { return items.map( ( item ) => formatAuthorData( item ) ); } return []; } )( response ); setDropdownOptions( formattedAuthors ); } catch ( error ) { response = 0; console.log( error ); // eslint-disable-line no-console } }, 500 ); /** * Run when authors updates. */ useEffect( () => { // Bail if no authors exist, no need to set empty values. if ( ! authors.length ) { return; } updateAuthors( authors ); }, [ authors ] ); return ( <> { Boolean( selectedAuthors.length ) ? ( <> ) : ( ) } ); }; export default CoAuthors; src/components/co-authors/README.md000060400000000131147177171730013071 0ustar00# CoAuthors Main component for handling selection of coauthors for the Gutenberg editor. src/components/co-authors/style.css000060400000000442147177171730013471 0ustar00.cap-combobox { margin-top: 16px; } .cap-icon-button-stack { display: flex; flex-wrap: wrap; width: 30px; } .cap-icon-button-stack .cap-icon-button { padding-bottom: 0; position: relative; height: 20px; } .cap-icon-button-stack .cap-icon-button:nth-child(2n) { padding-top: 0; } src/index.js000060400000002257147177171730007021 0ustar00/** * WordPress dependencies */ import { registerPlugin } from '@wordpress/plugins'; import { PluginDocumentSettingPanel } from '@wordpress/edit-post'; import { __ } from '@wordpress/i18n'; import { select, subscribe } from "@wordpress/data"; /** * Components */ import CoAuthors from './components/co-authors'; /** * Component for rendering the plugin sidebar. */ const PluginDocumentSettingPanelAuthors = () => ( ); registerPlugin( 'plugin-coauthors-document-setting', { render: PluginDocumentSettingPanelAuthors, icon: 'users', } ); // Save authors when the post is saved. // https://github.com/WordPress/gutenberg/issues/17632 const { isSavingPost, getCurrentPost } = select("core/editor"); const { getAuthors, saveAuthors } = select("cap/authors"); let checked = true; // Start in a checked state. subscribe(() => { if (isSavingPost()) { checked = false; } else if (!checked) { const { id } = getCurrentPost(); const authors = getAuthors(id); saveAuthors(id, authors); checked = true; } }); src/store.js000060400000003576147177171730007053 0ustar00/** * WordPress dependencies */ import apiFetch from '@wordpress/api-fetch'; import { createReduxStore } from '@wordpress/data'; /** * Utils */ import { formatAuthorData } from './utils'; /** * Store defaults */ const DEFAULT_STATE = { authors: [], }; const COAUTHORS_ENDPOINT = '/coauthors/v1/authors'; const actions = { setAuthors( authors ) { return { type: 'SET_AUTHORS', authors: [ ...authors ], }; }, setAuthorsStore( newAuthors ) { return { type: 'SET_AUTHORS_STORE', authors: [ ...newAuthors ], }; }, apiRequest( path, method = 'GET' ) { return { type: 'API_REQUEST', path, method, }; }, }; export default createReduxStore( 'cap/authors', { reducer( state = DEFAULT_STATE, action ) { switch ( action.type ) { case 'SET_AUTHORS': return { ...state, authors: [ ...state.authors, ...action.authors ], }; case 'SET_AUTHORS_STORE': return { ...state, authors: [ ...action.authors ], }; } return state; }, actions, selectors: { getAuthors( state ) { const { authors } = state; return authors; }, saveAuthors( state ) { const { authors } = state; return authors; }, }, controls: { API_REQUEST( action ) { return apiFetch( { path: action.path, method: action.method } ); }, }, resolvers: { *getAuthors( postId ) { if ( ! postId ) { return actions.setAuthors( [] ); } const path = `${ COAUTHORS_ENDPOINT }/${ postId }`; const result = yield actions.apiRequest( path ); const authors = result.map( ( author ) => formatAuthorData( author ) ); return actions.setAuthors( authors ); }, *saveAuthors( postId, authors ) { const authorsStr = authors .map( ( item ) => item.value ) .join( ',' ); const path = `${ COAUTHORS_ENDPOINT }/${ postId }?new_authors=${ authorsStr }`; yield actions.apiRequest( path, 'POST' ); }, }, } ); src/utils.js000060400000004327147177171730007052 0ustar00/** * Move an item up or down in an array. * * @param {string} targetItem Item to move. * @param {Array} itemsArr Array in which to move the item. * @param {string} direction 'up' or 'down' * @return {Array} Array with reordered items. */ export const moveItem = ( targetItem, itemsArr, direction ) => { const currIndex = itemsArr .map( ( item ) => item.value ) .indexOf( targetItem.value ); const indexUpdate = direction === 'up' ? -1 : 1; const newIndex = currIndex + indexUpdate; const arrCopy = itemsArr.map( ( item ) => Object.assign( {}, item ) ); const targetCopy = arrCopy[ currIndex ]; const newItems = ( () => { return arrCopy.filter( ( item ) => { if ( item.value ) { return item.value !== targetCopy.value; } return item !== targetCopy; } ); } )(); const sortedArr = [ ...newItems ]; sortedArr.splice( newIndex, 0, targetCopy ); return sortedArr; }; /** * Remove an item from the array. * * @param {Object} targetItem * @param {Array} itemsArr * @return {Array} array of items with the target item removed. */ export const removeItem = ( targetItem, itemsArr ) => { return itemsArr.filter( ( item ) => item.value !== targetItem.value ); }; /** * Get the author object from the list of available authors, * then add it to the selected authors. * * @param {string} newAuthorValue * @param {Array} currAuthors * @param {Array} dropDownAuthors * @return {Array} Author objects including the new author. */ export const addItemByValue = ( newAuthorValue, currAuthors, dropDownAuthors ) => { const newAuthorObj = dropDownAuthors.filter( ( item ) => item.value === newAuthorValue ); return [ ...currAuthors, newAuthorObj[ 0 ] ]; }; /** * Format the author option object. * * @param {Object} root0 An author object from the API endpoint. * @param {Object} root0.displayName Name to display in the UI. * @param {Object} root0.userNicename The unique username. * @param {Object} root0.email * * @return {Object} The object containing data relevant to the Coauthors component. */ export const formatAuthorData = ( { displayName, userNicename, email } ) => { return { label: `${ displayName } | ${ email }`, display: displayName, value: userNicename, }; }; behat.yml000060400000000216147177171730006364 0ustar00default: suites: default: contexts: - Automattic\CoAuthorsPlus\Tests\Behat\FeatureContext paths: - features CHANGELOG.md000060400000070657147177171730006407 0ustar00# Changelog for Co-Authors Plus All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [3.6.3] - 2024-10-25 ### Fixed * Prevent terms backfill CLI command to enter an infinite loop when a post is assigned to a user that no longer exists #1065 ## [3.6.2] - 2024-10-10 ### Added * Support for Yoast Name variable #1046 * New CLI cmd to backfill missing author terms for posts #1060 ### Fixed * Correctly populates the post_author column for linked authors #988 ### Maintenance * Increase minimum supported WordPress version to 5.9 #1035 ## [3.6.1] - 2024-04-25 ### Fixed * Fix missing author column in wp-admin Posts table #1038 ## [3.6.0] - 2024-04-22 ### Added * Blocks for Co-Authors #997 ### Fixed * Improve alignment in author-selection component #990 * Fix admin notice positions #1002 * UI: Add capability check to Add New button #1003 * i18n: set script translations and refresh language files #1007 ### Maintenance * Docs: Consolidate and refresh README.md #992 * Refresh package.json #993 * NPM: Add version-bump-prompt #994 * Fix/general code tidy #995 * Composer: Use 4-space tab indentation #999 * Improve tests structure #1000 * Extract iterator class from template-tags.php #1005 * Add supported_post_types() method #1006 * Tests improvements #1008 * Bump postcss from 8.4.19 to 8.4.31 #1009 * Create co-authors-plus-da_DK.po #1013 * Increase minimum supported PHP version to 7.4 #954 * Increase minimum supported WordPress version to 5.7 #955 ## [3.5.15] - 2023-08-28 ### Fixed * Incorrect Contributor name * Incorrect change log date ## [3.5.14] - 2023-08-28 ### Fixed * Check `get_current_screen()` exists #973 * Fix Ajax-suggested user and guest author ID collision #974 * Fix PHP Warnings on accessing `$coauthor` instance #975 * i18n: Add text domain header #984 ### Maintenance * CI: Update integration tests environments #979 * CLI: Add Behat functional tests #980 * Create LICENSE file #985 * Refresh plugin headers #986 ## [3.5.13] - 2023-07-31 ### Fixed * Reverted "Fix Co-Authors Plus & Elementor Archive Pages conflict" #970 ## [3.5.12] - 2023-07-30 ### Fixed * Author archive: ensure queried object ID is an int #966 * Ensure 'nickname' is created to prevent is_author() PHP notice with Guest Author #939 * Refreshing meta box nonce after re-authenticating following a wp_auth_check() #670 * Fix Co-Authors Plus & Elementor Archive Pages conflict #926 * Fix broken link in readme #957 * Unable to change avatar image sizes #959 * Fix avatar id collision between user id and guest-author post type #960 * Add i18n string for PluginDocumentSettingPanel title ##961 * Improve I18n strings #963 * Fix notification to post co-authors #964 * UI: Fix admin headings #965 ### Added * Add: List Co Authors Plus authors in the Slack social share #953 ### Maintenance * Add .gitattributes file #951. * Tests: Add previously deleted test back in #967 * Refresh screenshots, add banner and icon images #956 ### Removed * Removed deprecated social media fields #830 ## [3.5.11] - 2023-07-24 * Author select improvements #924 * Show author taxonomy in REST API, hide description based on capabilities #931 * The author taxonomy was first added to the REST API in CAP 3.5.0, then removed in 3.5.2 over concerns of author email addresses being visible in the description. This adds it back but with the description hidden by default (filterable). * Guest Authors: Add labels property #942 * Define dynamic guest_authors property #947 * Bump NPM dependencies #927 #933 #943 #944 * Workflows: Fix runner image and matrix #946 * CI: Split out CS and update integration tests workflow #948 * Improve tests setup #949 ## [3.5.10] - 2023-01-24 * Fix: Authors not being updated properly in the editor #920 ## [3.5.9] - 2023-01-19 * Fix: Avoid Fatal errors reported in the Nav menu filters for Guest Authors #917 ## [3.5.8] - 2023-01-18 * Make CoAuthors_Plus::get_coauthor_by() compatible with unicode author usernames #909 * Yoast: Prevent no-indexing of guest authors' archive pages by @adekbadek #912 * Refactors Gutenberg Feature #870 * Fixes guest author menu item to display accurate URL #913 * Only update authors on Gutenberg post save #914 ## [3.5.7] - 2023-01-05 * Remove Composer autoloader dependency #898 * Fixes Yoast deprecated warning for get_article_type_options_values() #901 ## [3.5.6] - 2022-11-16 * CI: Add new deployment workflow #890 * Dependency update #891 ## [3.5.5] - 2022-11-16 * Add Yoast integration #877 * CI: Add WP 6.1 #886 #887 ## [3.5.4] - 2022-11-04 * Handle `WP_Error` on failed guest author creation for method `create_guest_author()` #879 * Only use `pre_handle_404` filter in non-paged result #874 * Add CLI create-author command #880 * Add template tag `co_authors_get_users()` #862 * Change permission callback for authors and search endpoint and improve `current_user_can_set_authors()` #883 * Fix tests and add IDE files #882 * Bump dependencies #866 #865 #864 ## [3.5.3] - 2022-10-24 * Add author taxonomy labels #860 * Add check for empty author in Jetpack Open Graph tags #861 * Improve performance of search_authors() #872 * Update WP versions in tests and grant permission to composer-installer packages #863 ## [3.5.2] - 2022-06-01 * Remove the `/wp/v2/coauthors` endpoint #851 * Remove CSS hack that hides the add author box from core in the block editor #847 ## [3.5.1] - 2022-04-25 * Fix error for undefined `use_block_editor_for_post` #843 ## [3.5] - 2022-04-21 * Add Block Editor integration #790 * Fix issues with cache key `id` not being deleted #832 * Fix broken SQL query caused by wpdb->prepare() escaping quotes #831 * Fix `_update_users_posts_count` function to recount Guest Author's shadow taxonomy term count #829 * Update dependencies #833 #834 #835 #836 #837 #838 **3.4.92 (Oct 14, 2021)** * Fix admin posts view for contributors #823 **3.4.91 (Aug 12, 2021)** * Revert change with #686 regex change #816 **3.4.9 (Aug 11, 2021)** * Fix clash on updating guest author with same slug as a WP_User #748 * Resolve warning from fix_author_page() when called too early #801 * Adjust regex on posts_where_filter to be less greedy #686 * Update deprecated GitHub hosted runner #808 * Replace deprecated jQuery shorthand methods #812 * Switch guest author meta box to aside context #746 **3.4.8 (June 15, 2021)** * Fix AJAX author autocomplete when no author to post in author selector #803 **3.4.7 (May 31, 2021)** * Fix accidental escaping introduced to `coauthors_posts_links()` #797 **3.4.6 (May 28, 2021)** * Gravatars for guest authors now display in author select box #767 * Fix non-functional filter button on Guest Author listing page #768 * Added Hebrew translation strings #772 * Improve code style via PHPCBF #771 and .editorconfig #773 * Fix bug where guest author with pipe character in name is not rendered in author select box #775 * Fix `get_coauthor_by()` for correct return of users prefixed with "Cap" in name #778 * Correct failing unit tests under WP 5.7 #774 * Linked accounts display more accurate counts #776 * Switch to GitHub Actions from TravisCI #784 * Update .gitignore to exclude composer lock file and vendor dir #787 * Hide author section in Gutenberg for WP 5.7+ #793 * Delete correct CAP associated term on user delete #792 * Move changelog out of readme #768 **3.4.5 (Mar. 28, 2021)** * Fixed bug where guest authors with spaces in names were not showing when queried in AJAX suggest box #764 **3.4.4 (Mar. 26, 2021)** * Fixed bug where author with slug beginning with "cap" does not appear in bylines AJAX suggest box when queried #744 * Travis for Xenial build no longer fails #751 * Unit tests no longer fail #752 * Fixed REST permissions bug where co-author cannot view post assigned to them in Gutenberg #757 **3.4.3 (Apr. 20, 2020)** * Added author support to CPT instructions in readme FAQ #720 * Added object check for user in `coauthors_set_post_author_field()` #721 * Fix inefficient user query in avatar url hook #724 * Fix operand typo in `get_guest_author_thumbnail()` for adding custom classes #725 * Remove hardcoded default avatar and use default option #728 **3.4.2 (Dec. 16, 2019)** * Fix incorrect user avatar being displayed from featured post image #706 * Add check for `filter_get_avatar_url` to ensure valid second parameter #707 * `add_coauthors()` accepts ID parameter now #685 and ensures valid term slug used #708 * `filter_count_user_posts` checks that user ID returns valid user object #714 * Added post count instructions in readme FAQ for CPTs #713 **3.4.1 (Aug. 19, 2019)** * Fix an issue that may arise in bulk edit #700 **3.4 (May 6, 2019)** * New filter `get_coauthors` for modifying coauthor data returned in `get_coauthors()` #646 * New filter `coauthors_guest_authors_exported_extra_data` to allow guest author to export data as regular author #528 * New filter `get_avatar_url()` to show avatar in JS selection #621 * New parameter in `coauthors_wp_list_authors()` to only query authors with posts #496 * Add internationalization support to title and name in author archives #516 * Add safe list to skip irrelevant capabilities during permission checks #543 * Add helper function `get_guest_author_post_count()` #605 * Add parameter for outputting HTML classes in `coauthors_get_avatar()` template tag #610 * Add `--append_coauthors` flag to synopsis of CLI `assign-coauthors` #600 * Adjust CLI command `create-guest-authors-from-csv` to import website, avatar and description (#603 and #619) * Post type of "any" can be used in filters #617 * Remove unnecessary `is_array()` check #471 * Remove unnecessary `action_pre_user_query()` #531 * Use correct args in `search_authors()` #519 * Have `filter_author_archive_title()` run on author archives only #535 * Improve tests coverage (#529, #540, #546, #576 and #569) * Change `posts_selection` to action from filter #563 * Fix number of args expected for `get_the_archive_title` callback #657 * Fix spelling, update FAQ for disabling guest authors and credits in readme (#656, #523 and #501) * Output `coauthors_links_single()` template tag correctly when guest author has no website #504 * Number by "Mine" link shows correct listing of posts #663 * Linked guest authors show accurate post counts #674 * Can no longer add co-author more than once #532 * No more overwriting posts with current user in `add_coauthors()` #545 * Accurate post count for user when using different login #558 * No more double post count for users with linked accounts #567 * Fix SQL error (#593 and #628) * Fix "Mine" link href for Pages #547 * Can delete users when guest authors functionality disabled #602 * Fix incompatibility issue with Yoast of missing posts in author pages #624 * Resolve undefined index warnings on author archives #521 * Resolve warnings when current user has no term assigned #517 Props: [TheCrowned](https://github.com/TheCrowned), [shantanu2704](https://github.com/shantanu2704), [WPprodigy](https://github.com/WPprodigy), [blunce24](https://github.com/blunce24), [rebeccahum](https://github.com/rebeccahum), [andrewfleming](https://github.com/andrewfleming), [justnorris](https://github.com/justnorris), [sboisvert](https://github.com/sboisvert), [jasonbahl](https://github.com/jasonbahl), [mariovalney](https://github.com/mariovalney), [RoyTheRoyalBoy](https://github.com/RoyTheRoyalBoy), [jacobarriola](https://github.com/jacobarriola), [smistephen](https://github.com/smistephen), [manzoorwanijk](https://github.com/manzoorwanijk), [kodemonster](https://github.com/kodemonster), [westonruter](https://github.com/westonruter), [binodkalathil](https://github.com/binodkalathil), [scofennell](https://github.com/scofennell), [hyperionjrw](https://github.com/hyperionjrw), [pdemarte](https://github.com/pdemarte), [mostafaabd](https://github.com/mostafaabd), [paulschreiber](https://github.com/paulschreiber) **3.3.1 "Gutentag" (Dec. 7, 2018)** * 5.0 Compat: Hide core author inputs when using the Block Editor to limit confusion (h/t jonathanstegall). **3.3.0 "Rebecca" (Apr. 16, 2018)** * Fix private post viewing on front-end #386 * Reduce amount of sleep #400 * Author search UX issues #407 * Remove associated guest user when mapped user id deleted. #414 * Removed double left join on posts_join_filter #419 * Fixed WP CLI create-terms-for-posts if no co-authors found #420 * Pages archive now displays co-authors and quick edit works #422 * Terminology updated throughout #423 * Replace hardcoded 'author' with $this->$coauthor_taxonomy #426 * Move parenthesis to fix esc_html and sprintf #430 * Added progress to create-guest-authors so users have an idea of how long it will take #431 * Deleting guest authors is less confusing #432 * Guest author's featured image is avatar now #433 * Removed extra image sizing #434 * Remove duplicated byline #435 * coauthors_wp_list_authors() has option to list only guest authors now #436 * remove duplicates from linked accounts on coauthors_wp_list_authors() #437 * Accurate Guest Author post count on linked accounts #438 * New README.md #439 * Filter author archive #441 * Fix coauthors_links_single() #444 * Added guest author hooks for create/delete #446 * Fixes logic for DOING_AUTOSAVE check #450 * user_login spaces problem when using add_coauthors #453 * Adding details of filter for slow performance #456 * Remove redundant test for 404 on Author Archive #457 * Guest Author Counts are more accurate #461 * Set $coauthors_loading #468 * Fix the issue where guest authors with non-ASCII characters can't be used as co-authors #473 * Fix the issue where incompatibility when `coauthors_auto_apply_template_tags` set to true #474 * Unit tests/Fix warnings for template tags #475 * Review and improve test coverage #476 * Update class-wp-cli.php #480 * Update .travis.yml file for PHPUnit tests #482 * Changes to resolve issue #332 about missing coauthor meta #484 Props to the many people who helped make this release possible: [catchmyfame](https://github.com/catchmyfame), [danielbachhuber](https://github.com/danielbachhuber), [david-binda](https://github.com/david-binda), [douglas-johnson](https://github.com/douglas-johnson), [castlehouse](https://github.com/castlehouse), [frankar](https://github.com/frankar), [haleeben](https://github.com/haleeben), [jjeaton](https://github.com/jjeaton), [johnbillion](https://github.com/johnbillion), [kevinlisota](https://github.com/kevinlisota), [mattoperry](https://github.com/mattoperry), [mdbitz](https://github.com/mdbitz), [mdchiragpatel](https://github.com/mdchiragpatel), [megfh](https://github.com/megfh), [mjangda](https://github.com/mjangda), [mslinnea](https://github.com/mslinnea), [natebot](https://github.com/natebot), [nickdaugherty](https://github.com/nickdaugherty), [nilzari](https://github.com/nilzari), [philipjohn](https://github.com/philipjohn), [pkevan](https://github.com/pkevan), [rebeccahum](https://github.com/rebeccahum), [ryanmarkel](https://github.com/ryanmarkel), [sanketio](https://github.com/sanketio), [sboisvert](https://github.com/sboisvert), [Spongsta](https://github.com/Spongsta), [srguglielmo](https://github.com/srguglielmo), [timburden](https://github.com/timburden), [trepmal](https://github.com/trepmal), [TylerDurdon](https://github.com/TylerDurdon) **3.2.2 (Apr. 3, 2017)** * Fix broken author ordering in 4.7+ (props mslinnea) * Fix no moderation e-mail bug (props RobjS) * Cached functions in CLI commands (props jasonbahl) * Fix missing echos (props trepmal) * Add `coauthors_guest_author_query_args` filter (props trepmal) **3.2.1 (May 16, 2016)** * Hotfix for broken Guest Author bio metabox (props JS Morisset) **3.2 (May 12, 2016)** * Various minor bug and security fixes **3.1.2 (Aug. 31, 2015)** * Minor bug fixes and coding standards changes. * The author's display name is now filtered through `the_author` in `coauthors_posts_links_single()` * New Russian and Ukrainian translations, courtesy of [Jurko Chervony](http://skinik.name/). **3.1.1 (Mar. 20, 2014)** * Bug fix: Co-authors selection UI should appear when creating a new post too. **3.1 (Mar. 17, 2014)** * Manage co-authors from Quick Edit. Props [mpatek](https://github.com/mpatek). * Updated Spanish translation, courtesy of [sergiomajluf](https://github.com/sergiomajluf). * Now matches core behavior when displaying author archive on multisite: user of the blog, or previously published author on the blog. * Breaking change: "Create Profile" link is no longer shown by default on the Manage Users screen. Instead, it can be enabled with the `coauthors_show_create_profile_user_link` filter. * Guest authors work properly with Jetpack Open Graph tags. Props [hibernation](https://github.com/hibernation). * Guest author profile editor now supports a few different fields. Props [alpha1](https://github.com/alpha1). * New `coauthors_count_published_post_types` filter for specifying the post type(s) used when calculating the user's number of published posts. * Bug fix: Ensure `post_author` is set to one of the co-authors assigned to a post. * Bug fix: Filter author feed link for guest authors on the author page. Props [hibernation](https://github.com/hibernation). * Packages a composer.json file for those using Composer. * Beginnings of unit test coverage for core features. Increased minimum required WordPress version to 3.7 because WordPress.org unit testing framework doesn't work reliabilty below that. **3.0.7 (Jan. 27, 2014)** * Better support for installing Co-Authors Plus as a symlinked directory. [Follow these instructions](http://kaspars.net/blog/wordpress/plugins-via-symlinks) to filter `plugins_url`. * Links to authors' posts pages to comply to hCard microformat, which Google depends on. * New `coauthors_emails()` template tag to list email addresses of the co-authors. Props [benlk](https://github.com/benlk). * Bug fix: Remove extraneous space between last two co-authors output. Props [johnciacia](https://github.com/johnciacia). * Updated French translation, courtesy of Jojaba (via email). **3.0.6 (Dec. 9, 2013)** * New Swedish translation, courtesy of [alundstroem](https://github.com/alundstroem) * Updated German translation, courtesy of [krafit](https://github.com/krafit). * New Dutch translation, courtesy of [kardotim](https://github.com/kardotim) * New filter for specifying the default author assigned to a post. Props [tannerm](https://github.com/tannerm) * Bug fix: When filtering a user's published post count, use the value of their guest author profile if one is mapped. * Added support for checkboxes in Guest Author profiles * Fix Strict warnings from CPT's that don't define all capabilities * New swap-coauthors CLI command for replacing one co-author with another **3.0.5 (Feb. 18, 2013)** * New filter `coauthors_search_authors_get_terms_args` allows you to increase the number of matches returned with AJAX co-author selection * Bug fix: If there isn't an author term yet for a co-author, avoid an erroneous join that caused duplicate posts to appear. **3.0.4 (Jan. 6, 2013)** = * Support for automatically adding co-authors to your feeds. Props [cfg](https://github.com/cfg). * Bug fix: No Co-Authors Plus on attachments. For now. * Bug fix: Better support for co-authors with non-standard user_nicenames. Props [STRML](https://github.com/STRML). **3.0.3 (Dec. 3, 2012)** * Bug fix: The default order for the 'author' taxonomy should be `term_order`, in order for the author positions to stick. Props [lgedeon](https://github.com/lgedeon) **3.0.2 (Nov. 23, 2012)** * Bug fix: Fall back to non-pretty permalinks when the author permastruct is empty, so that `coauthors_posts_links()` doesn't link to the homepage **3.0.1 (Nov. 21, 2012)** * Add your own custom columns to the guest authors table using filters. Props [cfg](https://github.com/cfg) * A new wp-cli subcommand for renaming co-authors and another for removing author terms mistakenly assigned to revisions * Bug fix: Using a featured image for a guest author avatar didn't work. Now it does. * Bug fix: Don't assign author terms to revisions to avoid unnecessary database bloat * Bug fix: Make the `coauthors_wp_list_authors()` template tag work again * Bug fix: Improve capability filtering by properly handling super admin access and situations where `user_id = 0` * Minor UI enhancements for guest authors **3.0 (Nov. 12, 2012)** * Create guest author profiles for bylines you'd like to assign without creating WordPress user accounts. Guest authors can have all the same fields as normal users including display name, biography, and avatars. * Support for non-Latin characters in usernames and guest author names * wp-cli subcommands for creating, assigning, and reassigning co-authors * For themes using core template tags like `the_author()` or `the_author_posts_link()`, you enable Co-Authors Plus support with a simple filter * New author terms are now prefixed with `cap-` to avoid collisions with global scope * Bug fix: Apply query filters to only `post_types` registered with the taxonomy. Props [Tom Ransom](https://github.com/1bigidea) * Filter `coauthors_posts_link_single()` with `coauthors_posts_link`. Also adds `rel="author"`. Props [Amit Sannad](https://github.com/asannad) and [Gabriel Koen](https://github.com/mintindeed) * Filter for the context and priorities of the Co-Authors meta boxes. Props [Tomáš Kapler](https://github.com/tkapler) * Renamed the post meta box for selecting authors, so it applies to many post types. Props [John Blackbourn](https://github.com/johnbillion) **2.6.4 (May 7, 2012)** * Bug fix: Properly filter the user query so users can AJAX search against the display name field again * If https is used for the admin, also use the secure Gravatar URL. Props [rmcfrazier](https://github.com/rmcfrazier) **2.6.3 (Apr. 30, 2012)** * AJAX user search is back to searching against user login, display name, email address and user ID. The method introduced in v2.6.2 didn't scale well * French translation courtesy of Sylvain Bérubé * Spanish translation courtesy of Alejandro Arcos * Bug fix: Resolved incorrect caps check against user editing an already published post. [See forum thread](http://wordpress.org/support/topic/multiple-authors-cant-edit-pages?replies=17#post-2741243) **2.6.2 (Mar. 6, 2012)** * AJAX user search matches against first name, last name, and nickname fields too, in addition to display name, user login, and email address * Comment moderation and approved notifications are properly sent to all co-authors with the correct caps * Filter required capability for user to be returned in an AJAX search with `coauthors_edit_author_cap` * Filter out administrators and other non-authors from AJAX search with `coauthors_edit_ignored_authors` * Automatically adds co-authors to Edit Flow's story budget and calendar views * Bug fix: Don't set post_author value to current user when quick editing a post. This doesn't appear in the UI anywhere, but adds the post to the current user's list of posts * Bug fix: Properly cc other co-authors on new comment email notifications * Bug fix: If a user has already been added as an author to a post, don't show them in the AJAX search again * Bug fix: Allow output constants to be defined in a theme's functions.php file and include filters you can use instead **2.6.1 (Dec. 30, 2011)** * Fix mangled usernames because of sanitize_key http://wordpress.org/support/topic/plugin-co-authors-plus-26-not-working-with-wp-33 **2.6 (Dec. 22, 2011)** * Sortable authors: Drag and drop the order of the authors as you'd like them to appear ([props kingkool68](http://profiles.wordpress.org/users/kingkool68/)) * Search for authors by display name (instead of nicename which was essentially the same as user_login) * Option to remove the first author when there are two or more, so it's less confusing * Bumped requirements to WordPress 3.1 * Bug fix: Update the published post count for each user more reliably **2.5.3 (Aug. 14, 2011)** * Bug fix: Removed extra comma when only two authors were listed. If you used the `COAUTHORS_DEFAULT_BETWEEN_LAST` constant, double-check what you have **2.5.2 (Apr. 23, 2011)** * Bug: Couldn't query terms and authors at the same time (props nbaxley) * Bug: Authors with empty fields (e.g. first name) were displaying blank in some cases * Bug: authors with spaces in usernames not getting saved (props MLmsw, Ruben S. and others!) * Bug: revisions getting wrong user attached (props cliquenoir!) **2.5.1 (Mar. 26, 2011)** * Fix with author post count (throwing errors) **2.5 (Mar. 26, 2011)** * Custom Post Type Support * Compatibility with WP 3.0 and 3.1 * Gravatars * Lots and lots and lots of bug fixes * Thanks to everyone who submitted bugs, fixes, and suggestions! And for your patience! **2.1.1 (Oct. 16, 2009)** * Fix for co-authors not being added if their username is different from display name * Fixes to readme.txt (fixes for textual and punctuation errors, language clarification, minor formatting changes) courtesy of [Waldo Jaquith](http://www.vqronline.org) **2.1 (Oct. 11, 2009)** * Fixed issues related to localization. Thanks to Jan Zombik for the fixes. * Added `set_time_limit` to update function to get around timeout issues when upgrading plugin **2.0 (Oct. 11, 2009)** * Plugin mostly rewritten to make use of taxonomy instead of `post_meta` * Can now see all authors of a post under the author column from Edit Posts page * All authors of a post are now notified on a new comment * Various javascript enhancements * New option to allow subscribers to be added as authors * All Authors can edit the posts of which they are co-authors * FIX: Issues with `wp_coauthors_list` function * FIX: Issues with coauthored posts not showing up on author archives **1.2.0 (Jun. 16, 2012)** * FIX: Added compatibility for WordPress 2.8 * FIX: Added new template tags (`get_the_coauthor_meta` & `the_coauthor_meta`) to fix issues related to displaying author info on author archive pages. See [Other Notes](http://wordpress.org/extend/plugins/co-authors-plus/other_notes/) for details. * FIX: Plugin should now work for plugins not using the `wp_` DB prefix * FIX: Coauthors should no longer be alphabetically reordered when the post is updated * FIX: Plugin now used WordPress native AJAX calls to tighten security * DOCS: Added details about the new template tags **1.1.5 (Apr. 26, 2009)** * FIX: Not searching Updated SQL query for autosuggest to search through first name, last name, and nickname * FIX: When editing an author, and clicking on a suggested author, the original author was not be removed * DOCS: Added code comments to javascript; more still to be added * DOCS: Updated readme information **1.1.4 (Apr. 25, 2009)** * Disabled "New Author" output in suggest box, for now * Hopefully fixed SVN issue (if you're having trouble with the plugin, please delete the plugin and reinstall) **1.1.3 (Apr. 23, 2009)** * Add blur event to disable input box * Limit only one edit at a time. * Checked basic cross-browser compatibility (Firefox 3 OS X, Safari 3 OS X, IE7 Vista). * Add suggest javascript plugin to Edit Page. **1.1.2 (Apr. 19, 2009)** * Disabled form submit when enter pressed. **1.1.1 (Apr. 15, 2009)** * Changed SQL query to return only contributor-level and above users. **1.1.0 (Apr. 14, 2009)** * Initial beta release. [3.6.3]: https://github.com/automattic/co-authors-plus/compare/3.6.2...3.6.3 [3.6.2]: https://github.com/automattic/co-authors-plus/compare/3.6.1...3.6.2 [3.6.1]: https://github.com/automattic/co-authors-plus/compare/3.6.0...3.6.1 [3.6.0]: https://github.com/automattic/co-authors-plus/compare/3.5.15...3.6.0 [3.5.15]: https://github.com/automattic/co-authors-plus/compare/3.5.14...3.5.15 [3.5.14]: https://github.com/automattic/co-authors-plus/compare/3.5.13...3.5.14 [3.5.13]: https://github.com/automattic/co-authors-plus/compare/3.5.12...3.5.13 [3.5.12]: https://github.com/automattic/co-authors-plus/compare/3.5.11...3.5.12 [3.5.11]: https://github.com/automattic/co-authors-plus/compare/3.5.10...3.5.11 [3.5.10]: https://github.com/automattic/co-authors-plus/compare/3.5.9...3.5.10 [3.5.9]: https://github.com/automattic/co-authors-plus/compare/3.5.8...3.5.9 [3.5.8]: https://github.com/automattic/co-authors-plus/compare/3.5.7...3.5.8 [3.5.7]: https://github.com/automattic/co-authors-plus/compare/3.5.6...3.5.7 [3.5.6]: https://github.com/automattic/co-authors-plus/compare/3.5.5...3.5.6 [3.5.5]: https://github.com/automattic/co-authors-plus/compare/3.5.4...3.5.5 [3.5.4]: https://github.com/automattic/co-authors-plus/compare/3.5.3...3.5.4 [3.5.3]: https://github.com/automattic/co-authors-plus/compare/3.5.2...3.5.3 [3.5.2]: https://github.com/automattic/co-authors-plus/compare/3.5.1...3.5.2 [3.5.1]: https://github.com/automattic/co-authors-plus/compare/3.5...3.5.1 [3.5]: https://github.com/automattic/co-authors-plus/compare/3.4.92...3.5 co-authors-plus.php000060400000024155147177171730010344 0ustar00comment_post_ID ); $coauthors = get_coauthors( $post->ID ); foreach ( $coauthors as $author ) { // The comment was left by the co-author if ( $comment->user_id == $author->ID ) { continue; } // The co-author moderated a comment on his own post if ( $author->ID == get_current_user_id() ) { continue; } // If there's no email to send the comment to if ( '' == $author->user_email ) { continue; } $comment_author_domain = @gethostbyaddr( $comment->comment_author_IP ); // The blogname option is escaped with esc_html on the way into the database in sanitize_option // we want to reverse this for the plain text arena of emails. $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); if ( empty( $comment_type ) ) { $comment_type = 'comment'; } if ( 'comment' == $comment_type ) { /* translators: Post title. */ $notify_message = sprintf( __( 'New comment on your post "%s"', 'co-authors-plus' ), $post->post_title ) . "\r\n"; /* translators: 1: comment author, 2: author IP, 3: author domain */ $notify_message .= sprintf( __( 'Author : %1$s (IP: %2$s , %3$s)', 'co-authors-plus' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; /* translators: Comment author email address. */ $notify_message .= sprintf( __( 'Email : %s', 'co-authors-plus' ), $comment->comment_author_email ) . "\r\n"; /* translators: Comment author URL. */ $notify_message .= sprintf( __( 'URL : %s', 'co-authors-plus' ), $comment->comment_author_url ) . "\r\n"; /* translators: Comment author IP address. */ $notify_message .= sprintf( __( 'Whois : https://whois.arin.net/rest/ip/%s', 'co-authors-plus' ), $comment->comment_author_IP ) . "\r\n"; $notify_message .= __( 'Comment: ', 'co-authors-plus' ) . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= __( 'You can see all comments on this post here: ', 'co-authors-plus' ) . "\r\n"; /* translators: 1: blog name, 2: post title */ $subject = sprintf( __( '[%1$s] Comment: "%2$s"', 'co-authors-plus' ), $blogname, $post->post_title ); } elseif ( 'trackback' == $comment_type ) { /* translators: Post title. */ $notify_message = sprintf( __( 'New trackback on your post "%s"', 'co-authors-plus' ), $post->post_title ) . "\r\n"; /* translators: 1: comment author, 2: author IP, 3: author domain */ $notify_message .= sprintf( __( 'Website: %1$s (IP: %2$s , %3$s)', 'co-authors-plus' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; /* translators: Comment author URL. */ $notify_message .= sprintf( __( 'URL : %s', 'co-authors-plus' ), $comment->comment_author_url ) . "\r\n"; $notify_message .= __( 'Excerpt: ', 'co-authors-plus' ) . "\r\n" . $comment->comment_content . "\r\n\r\n"; $notify_message .= __( 'You can see all trackbacks on this post here: ', 'co-authors-plus' ) . "\r\n"; /* translators: 1: blog name, 2: post title */ $subject = sprintf( __( '[%1$s] Trackback: "%2$s"', 'co-authors-plus' ), $blogname, $post->post_title ); } elseif ( 'pingback' == $comment_type ) { /* translators: Post title. */ $notify_message = sprintf( __( 'New pingback on your post "%s"', 'co-authors-plus' ), $post->post_title ) . "\r\n"; /* translators: 1: comment author, 2: author IP, 3: author domain */ $notify_message .= sprintf( __( 'Website: %1$s (IP: %2$s , %3$s)', 'co-authors-plus' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n"; /* translators: Comment author URL. */ $notify_message .= sprintf( __( 'URL : %s', 'co-authors-plus' ), $comment->comment_author_url ) . "\r\n"; $notify_message .= __( 'Excerpt: ', 'co-authors-plus' ) . "\r\n" . sprintf( '[...] %s [...]', $comment->comment_content ) . "\r\n\r\n"; $notify_message .= __( 'You can see all pingbacks on this post here: ', 'co-authors-plus' ) . "\r\n"; /* translators: 1: blog name, 2: post title */ $subject = sprintf( __( '[%1$s] Pingback: "%2$s"', 'co-authors-plus' ), $blogname, $post->post_title ); } $notify_message .= get_permalink( $comment->comment_post_ID ) . "#comments\r\n\r\n"; /* translators: Comment URL. */ $notify_message .= sprintf( __( 'Permalink: %s', 'co-authors-plus' ), get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment_id ) . "\r\n"; if ( EMPTY_TRASH_DAYS ) { /* translators: URL for trashing a comment. */ $notify_message .= sprintf( __( 'Trash it: %s', 'co-authors-plus' ), admin_url( "comment.php?action=trash&c=$comment_id" ) ) . "\r\n"; } else { /* translators: URL for deleting a comment. */ $notify_message .= sprintf( __( 'Delete it: %s', 'co-authors-plus' ), admin_url( "comment.php?action=delete&c=$comment_id" ) ) . "\r\n"; } /* translators: URL for marking a comment as spam. */ $notify_message .= sprintf( __( 'Spam it: %s', 'co-authors-plus' ), admin_url( "comment.php?action=spam&c=$comment_id" ) ) . "\r\n"; $domain = strtolower( sanitize_text_field( $_SERVER['SERVER_NAME'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated $wp_email = 'wordpress@' . preg_replace( '#^www\.#', '', $domain ); if ( '' == $comment->comment_author ) { $from = "From: \"$blogname\" <$wp_email>"; if ( '' != $comment->comment_author_email ) { $reply_to = "Reply-To: $comment->comment_author_email"; } } else { $from = "From: \"$comment->comment_author\" <$wp_email>"; if ( '' != $comment->comment_author_email ) { $reply_to = "Reply-To: \"$comment->comment_author_email\" <$comment->comment_author_email>"; } } $message_headers = "$from\n" . 'Content-Type: text/plain; charset="' . get_option( 'blog_charset' ) . "\"\n"; if ( isset( $reply_to ) ) { $message_headers .= $reply_to . "\n"; } $notify_message = apply_filters( 'comment_notification_text', $notify_message, $comment_id ); $subject = apply_filters( 'comment_notification_subject', $subject, $comment_id ); $message_headers = apply_filters( 'comment_notification_headers', $message_headers, $comment_id ); @wp_mail( $author->user_email, $subject, $notify_message, $message_headers ); } return true; } endif; /** * Filter array of moderation notification email addresses * * @param array $recipients * @param int $comment_id * @return array */ function cap_filter_comment_moderation_email_recipients( $recipients, $comment_id ) { $comment = get_comment( $comment_id ); $post_id = $comment->comment_post_ID; if ( isset( $post_id ) ) { $coauthors = get_coauthors( $post_id ); $extra_recipients = array(); foreach ( $coauthors as $user ) { if ( ! empty( $user->user_email ) ) { $extra_recipients[] = $user->user_email; } } return array_unique( array_merge( $recipients, $extra_recipients ) ); } return $recipients; } /** * Retrieve a list of co-author terms for a single post. * * Grabs a correctly ordered list of authors for a single post, appropriately * cached because it requires `wp_get_object_terms()` to succeed. * * @param int $post_id ID of the post for which to retrieve authors. * @return array Array of coauthor WP_Term objects */ function cap_get_coauthor_terms_for_post( $post_id ) { global $coauthors_plus; return $coauthors_plus->get_coauthor_terms_for_post( $post_id ); } /** * Register CoAuthor REST API Routes */ function cap_register_coauthors_rest_api_routes(): void { global $coauthors_plus; (new CoAuthors\API\Endpoints\CoAuthors_Controller( $coauthors_plus ))->register_routes(); } add_action( 'rest_api_init', 'cap_register_coauthors_rest_api_routes' ); CONTRIBUTING.md000060400000000636147177171730007015 0ustar00# Contributing to Co-Authors Plus ## Pull Requests Please make pull requests against the `develop` branch. Ideally include tests. ## Terminology: co-author vs coauthor If talking about co-authors in a documentation, DocBlock, comment, or user-facing string, please include the hyphen. Variables, constants, class, trait, interface, function, method, hook, and other programmatic names can all use no-hyphen. deprecated.php000060400000000244147177171730007370 0ustar00 Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. README.md000060400000011176147177171730006044 0ustar00# Co-Authors Plus Stable tag: 3.6.3 Requires at least: 5.9 Tested up to: 6.6 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Tags: authors, users, multiple authors, co-authors, multi-author, publishing Contributors: batmoo, danielbachhuber, automattic, GaryJ Assign multiple bylines to posts, pages, and custom post types with a search-as-you-type input box. ## Description Assign multiple bylines to posts, pages, and custom post types via a search-as-you-type input box. Co-authored posts appear on a co-author's archive page and in their feed. Co-authors may edit the posts they are associated with, and co-authors who are contributors may only edit posts if they have not been published (as is core behavior). Add writers as bylines without creating WordPress user accounts. Simply [create a guest author profile](https://github.com/Automattic/Co-Authors-Plus/wiki/Creating-and-editing-guest-authors) for the writer and assign the byline as you normally would. On the frontend, use the [Co-Authors Plus template tags](https://github.com/Automattic/Co-Authors-Plus/wiki/Template-tags) to list co-authors anywhere you'd normally list the author. **For more detailed documentation refer to [the GitHub Wiki for this plugin](https://github.com/Automattic/Co-Authors-Plus/wiki).** Co-Authors Plus is an almost complete rewrite of the [Co-Authors](https://wordpress.org/plugins/co-authors/) plugin originally developed by Weston Ruter (2007). The original plugin was inspired by the '[Multiple Authors](https://txfx.net/2005/08/16/new-plugin-multiple-authors/)' plugin by Mark Jaquith (2005). ## Installation 1. IMPORTANT: If you are using the original Co-Authors plugin, disable it before installing Co-Authors Plus. 2. Extract the coauthors-plus.zip file and upload its contents to the `/wp-content/plugins/` directory. Alternately, you can install directly from the Plugin directory within your WordPress Install. 3. Activate the plugin through the "Plugins" menu in WordPress. 4. Place [co-authors template tags](https://github.com/Automattic/Co-Authors-Plus/wiki/Template-tags) in your template. 5. Add co-authors to your posts and pages. ## Screenshots 1. Multiple authors can be added to a Post, Page, or Custom Post Type using an auto-complete interface. 2. Guest authors allow you to assign bylines without creating WordPress user accounts. You can also override existing WordPress account meta by mapping a guest author to a WordPress user. ## Frequently Asked Questions ### How do I add Co-Authors Plus support to my theme? If you've just installed Co-Authors Plus, you might notice that the bylines are being added in the backend but aren't appearing on the front end. You'll need to [add the template tags to your theme](https://github.com/Automattic/Co-Authors-Plus/wiki/Template-tags) before the bylines will appear. ### What happens to posts and pages when I delete a user assigned to a post or page as a co-author? When a user is deleted from WordPress, they will be removed from all posts for which they are co-authors. If you reassign their posts to another user, that user will be the co-author instead. ### Can I use Co-Authors Plus with WordPress multisite? Yes! You can [use Co-Authors Plus on WordPress multisite](https://github.com/Automattic/Co-Authors-Plus/wiki#wordpress-multisites). Co-Authors Plus can be activated on a site-by-site basis or network-activated. If you create guest authors, however, those guest authors will exist on a site-by-site basis. ### Who needs permission to do what? A WordPress user will need the `edit_others_posts` capability to assign co-authors to posts. This is typically granted to the Editor role but can be altered with the `coauthors_plus_edit_authors` filter. A WordPress user will need the `list_users` capability to create new guest author profiles. This is typically granted to the Administrator role but can be altered with the `coauthors_guest_author_manage_cap` filter. ### Can I easily create a list of all co-authors? Yes! You can [create a list of all co-authors with a template tag](https://github.com/Automattic/Co-Authors-Plus/wiki/Template-tags#create-a-list-of-all-co-authors) `coauthors_wp_list_authors()` template tag. This template tag accepts many of the same arguments as `wp_list_authors()`. Look in `template-tags.php` for more details. ### Can I disable Guest Authors? Yes! You can disable guest authors entirely through a filter. Having the following line load on `init` will do the trick: `add_filter( 'coauthors_guest_authors_enabled', '__return_false' )` ## Change Log [View the change log](https://github.com/Automattic/Co-Authors-Plus/blob/master/CHANGELOG.md). template-tags.php000060400000060520147177171730010042 0ustar00ID; } if ( $post_id ) { $coauthor_terms = cap_get_coauthor_terms_for_post( $post_id ); if ( is_array( $coauthor_terms ) && ! empty( $coauthor_terms ) ) { foreach ( $coauthor_terms as $coauthor ) { $coauthor_slug = preg_replace( '#^cap\-#', '', $coauthor->slug ); $post_author = $coauthors_plus->get_coauthor_by( 'user_nicename', $coauthor_slug ); // In case the user has been deleted while plugin was deactivated if ( ! empty( $post_author ) ) { $coauthors[] = $post_author; } } } elseif ( ! $coauthors_plus->force_guest_authors ) { if ( $post && $post_id == $post->ID ) { $post_author = get_userdata( $post->post_author ); } else { $post_author = get_userdata( $wpdb->get_var( $wpdb->prepare( "SELECT post_author FROM $wpdb->posts WHERE ID = %d", $post_id ) ) ); } if ( ! empty( $post_author ) ) { $coauthors[] = $post_author; } } // the empty else case is because if we force guest authors, we don't ever care what value wp_posts.post_author has. } // remove duplicate $coauthors objects from mapping user accounts to guest authors accounts $coauthors = array_unique( $coauthors, SORT_REGULAR ); $coauthors = apply_filters( 'get_coauthors', $coauthors, $post_id ); return $coauthors; } /** * Checks to see if the specified user is author of the current global post or post (if specified). * * @param object|int $user * @param int $post_id */ function is_coauthor_for_post( $user, $post_id = 0 ) { global $post; if ( ! $post_id && $post ) { $post_id = $post->ID; } if ( ! $post_id ) { return false; } if ( ! $user ) { return false; } $coauthors = get_coauthors( $post_id ); if ( is_numeric( $user ) ) { $user = get_userdata( $user ); if ( isset( $user->user_login ) ) { $user = $user->user_login; } else { return false; } } elseif ( isset( $user->user_login ) ) { $user = $user->user_login; } else { return false; } foreach ( $coauthors as $coauthor ) { if ( ( isset( $coauthor->user_login ) && $user == $coauthor->user_login ) || ( isset( $coauthor->linked_account ) && $user == $coauthor->linked_account ) ) { return true; } } return false; } // Helper function for the following new template tags function coauthors__echo( $tag, $type = 'tag', $separators = array(), $tag_args = null, $echo = true ) { // Define the standard output separator. Constant support is for backwards compat. // @see https://github.com/danielbachhuber/Co-Authors-Plus/issues/12 $default_before = ( defined( 'COAUTHORS_DEFAULT_BEFORE' ) ) ? COAUTHORS_DEFAULT_BEFORE : ''; $default_between = ( defined( 'COAUTHORS_DEFAULT_BETWEEN' ) ) ? COAUTHORS_DEFAULT_BETWEEN : ', '; $default_between_last = ( defined( 'COAUTHORS_DEFAULT_BETWEEN_LAST' ) ) ? COAUTHORS_DEFAULT_BETWEEN_LAST : __( ' and ', 'co-authors-plus' ); $default_after = ( defined( 'COAUTHORS_DEFAULT_AFTER' ) ) ? COAUTHORS_DEFAULT_AFTER : ''; if ( ! isset( $separators['before'] ) ) { $separators['before'] = apply_filters( 'coauthors_default_before', $default_before ); } if ( ! isset( $separators['between'] ) ) { $separators['between'] = apply_filters( 'coauthors_default_between', $default_between ); } if ( ! isset( $separators['betweenLast'] ) ) { $separators['betweenLast'] = apply_filters( 'coauthors_default_between_last', $default_between_last ); } if ( ! isset( $separators['after'] ) ) { $separators['after'] = apply_filters( 'coauthors_default_after', $default_after ); } $output = ''; $i = new CoAuthorsIterator(); $output .= $separators['before']; $i->iterate(); do { $author_text = ''; if ( 'tag' === $type ) { $author_text = $tag( $tag_args ); } elseif ( 'field' === $type && isset( $i->current_author->$tag ) ) { $author_text = $i->current_author->$tag; } elseif ( 'callback' === $type && is_callable( $tag ) ) { $author_text = $tag( $i->current_author ); } // Fallback to user_login if we get something empty if ( empty( $author_text ) ) { $author_text = $i->current_author->user_login; } // Append separators if ( $i->count() - $i->position == 1 ) { // last author or only author $output .= $author_text; } elseif ( $i->count() - $i->position == 2 ) { // second to last $output .= $author_text . $separators['betweenLast']; } else { $output .= $author_text . $separators['between']; } } while ( $i->iterate() ); $output .= $separators['after']; if ( $echo ) { echo $output; // phpcs:ignore } return $output; } /** * Outputs the co-authors display names, without links to their posts. * Co-Authors Plus equivalent of the_author() template tag. * * @param string $between Delimiter that should appear between the co-authors * @param string $betweenLast Delimiter that should appear between the last two co-authors * @param string $before What should appear before the presentation of co-authors * @param string $after What should appear after the presentation of co-authors * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { return coauthors__echo( 'display_name', 'field', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), null, $echo ); } /** * Outputs the co-authors display names, with links to their posts. * Co-Authors Plus equivalent of the_author_posts_link() template tag. * * @param string $between Delimiter that should appear between the co-authors * @param string $betweenLast Delimiter that should appear between the last two co-authors * @param string $before What should appear before the presentation of co-authors * @param string $after What should appear after the presentation of co-authors * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors_posts_links( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { global $coauthors_plus_template_filters; $modify_filter = ! empty( $coauthors_plus_template_filters ) && $coauthors_plus_template_filters instanceof CoAuthors_Template_Filters; if ( $modify_filter ) { /** * Removing "the_author" filter so that it won't get called in loop and append names for each author. * * Ref : https://github.com/Automattic/Co-Authors-Plus/issues/279 */ remove_filter( 'the_author', array( $coauthors_plus_template_filters, 'filter_the_author' ) ); } $coauthors_posts_links = coauthors__echo( 'coauthors_posts_links_single', 'callback', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), null, $echo ); if ( $modify_filter ) { add_filter( 'the_author', array( $coauthors_plus_template_filters, 'filter_the_author' ) ); } return $coauthors_posts_links; } /** * Outputs a single co-author linked to their post archive. * * @param object $author * @return string */ function coauthors_posts_links_single( $author ) { // Return if the fields we are trying to use are not sent if ( ! isset( $author->ID, $author->user_nicename, $author->display_name ) ) { _doing_it_wrong( 'coauthors_posts_links_single', 'Invalid author object used', '3.2' ); return; } $args = array( 'before_html' => '', 'href' => get_author_posts_url( $author->ID, $author->user_nicename ), 'rel' => 'author', /* translators: Author display name. */ 'title' => sprintf( __( 'Posts by %s', 'co-authors-plus' ), apply_filters( 'the_author', $author->display_name ) ), 'class' => 'author url fn', 'text' => apply_filters( 'the_author', $author->display_name ), 'after_html' => '', ); $args = apply_filters( 'coauthors_posts_link', $args, $author ); $single_link = sprintf( '%5$s', esc_url( $args['href'] ), esc_attr( $args['title'] ), esc_attr( $args['class'] ), esc_attr( $args['rel'] ), esc_html( $args['text'] ) ); return $args['before_html'] . $single_link . $args['after_html']; } /** * Outputs the co-authors first names, without links to their posts. * * @param string $between Delimiter that should appear between the co-authors * @param string $betweenLast Delimiter that should appear between the last two co-authors * @param string $before What should appear before the presentation of co-authors * @param string $after What should appear after the presentation of co-authors * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors_firstnames( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { return coauthors__echo( 'get_the_author_meta', 'tag', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), 'first_name', $echo ); } /** * Outputs the co-authors last names, without links to their posts. * * @param string $between Delimiter that should appear between the co-authors * @param string $betweenLast Delimiter that should appear between the last two co-authors * @param string $before What should appear before the presentation of co-authors * @param string $after What should appear after the presentation of co-authors * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors_lastnames( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { return coauthors__echo( 'get_the_author_meta', 'tag', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), 'last_name', $echo ); } /** * Outputs the co-authors nicknames, without links to their posts. * * @param string $between Delimiter that should appear between the co-authors * @param string $betweenLast Delimiter that should appear between the last two co-authors * @param string $before What should appear before the presentation of co-authors * @param string $after What should appear after the presentation of co-authors * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors_nicknames( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { return coauthors__echo( 'get_the_author_meta', 'tag', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), 'nickname', $echo ); } /** * Outputs the co-authors display names, with links to their websites if they've provided them. * * @param string $between Delimiter that should appear between the co-authors * @param string $betweenLast Delimiter that should appear between the last two co-authors * @param string $before What should appear before the presentation of co-authors * @param string $after What should appear after the presentation of co-authors * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors_links( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { global $coauthors_plus_template_filters; $modify_filter = ! empty( $coauthors_plus_template_filters ) && $coauthors_plus_template_filters instanceof CoAuthors_Template_Filters; if ( $modify_filter ) { /** * Removing "the_author" filter so that it won't get called in loop and append names for each author. * * Ref : https://github.com/Automattic/Co-Authors-Plus/issues/279 */ remove_filter( 'the_author', array( $coauthors_plus_template_filters, 'filter_the_author' ) ); } $coauthors_links = coauthors__echo( 'coauthors_links_single', 'callback', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), null, $echo ); if ( $modify_filter ) { add_filter( 'the_author', array( $coauthors_plus_template_filters, 'filter_the_author' ) ); } return $coauthors_links; } /** * Outputs the co-authors email addresses * * @param string $between Delimiter that should appear between the email addresses * @param string $betweenLast Delimiter that should appear between the last two email addresses * @param string $before What should appear before the presentation of email addresses * @param string $after What should appear after the presentation of email addresses * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors_emails( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { return coauthors__echo( 'get_the_author_meta', 'tag', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), 'user_email', $echo ); } /** * Outputs a single co-author, linked to their website if they've provided one. * * @param object $author * @return string */ function coauthors_links_single( $author ) { if ( 'guest-author' === $author->type && get_the_author_meta( 'website' ) ) { return sprintf( '%s', esc_url( get_the_author_meta( 'website' ) ), /* translators: Author display name. */ esc_attr( sprintf( __( 'Visit %s’s website', 'co-authors-plus' ), esc_html( get_the_author() ) ) ), esc_html( get_the_author() ) ); } if ( get_the_author_meta( 'url' ) ) { return sprintf( '%s', esc_url( get_the_author_meta( 'url' ) ), /* translators: Author display name. */ esc_attr( sprintf( __( 'Visit %s’s website', 'co-authors-plus' ), esc_html( get_the_author() ) ) ), esc_html( get_the_author() ) ); } return esc_html( get_the_author() ); } /** * Outputs the co-authors IDs * * @param string $between Delimiter that should appear between the co-authors * @param string $betweenLast Delimiter that should appear between the last two co-authors * @param string $before What should appear before the presentation of co-authors * @param string $after What should appear after the presentation of co-authors * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true. */ function coauthors_ids( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) { return coauthors__echo( 'ID', 'field', array( 'between' => $between, 'betweenLast' => $betweenLast, 'before' => $before, 'after' => $after, ), null, $echo ); } /** * Outputs the co-authors metadata. * * @param string $field Required The user field to retrieve.[login, email, nicename, display_name, url, type] * @param string $user_id Optional The user ID for meta * * @return array $meta Value of the user field */ function get_the_coauthor_meta( $field, $user_id = false ) { global $coauthors_plus; if ( ! $user_id ) { $coauthors = get_coauthors(); } else { $coauthor_data = $coauthors_plus->get_coauthor_by( 'id', $user_id ); $coauthors = array(); if ( ! empty( $coauthor_data ) ) { $coauthors[] = $coauthor_data; } } $meta = array(); if ( in_array( $field, array( 'login', 'pass', 'nicename', 'email', 'url', 'registered', 'activation_key', 'status' ) ) ) { $field = 'user_' . $field; } foreach ( $coauthors as $coauthor ) { $user_id = $coauthor->ID; if ( isset( $coauthor->type ) && 'user_url' === $field ) { if ( 'guest-author' === $coauthor->type ) { $field = 'website'; } } elseif ( 'website' === $field ) { $field = 'user_url'; } if ( isset( $coauthor->$field ) ) { $meta[ $user_id ] = $coauthor->$field; } else { $meta[ $user_id ] = ''; } } return $meta; } function the_coauthor_meta( $field, $user_id = 0 ) { // TODO: need before after options $coauthor_meta = get_the_coauthor_meta( $field, $user_id ); foreach ( $coauthor_meta as $meta ) { echo esc_html( $meta ); } } /** * Returns an array of blog users and co-authors. * @param array $args An argument array to customize the returned result. * number (int) (20): The maximum number of (co-)authors to return. * guest_authors_only (boolean) (false): If true, include only guest authors without WP users. * authors_with_posts_only (boolean) (false): If true, don't query for authors with no posts. * orderby (string) ('name'): A field to order the authors by {@see WP_Term_Query::__construct()} * * @return array A unique array of WP_User-like objects each containing data for a use or a co-author. * The returned array may contain a mix of native WP users as well as guest authors as * designated by $args. You can use the $user->type property to check for the user type. */ function coauthors_get_users( $args = array() ) { global $coauthors_plus; $defaults = array( 'number' => 20, // A sane limit to start to avoid breaking all the things 'guest_authors_only' => false, 'authors_with_posts_only' => false, 'orderby' => 'name', ); $args = wp_parse_args( $args, $defaults ); $term_args = array( 'orderby' => $args['orderby'], 'number' => (int) $args['number'], /* * Historically, this was set to always be `0` ignoring `$args['hide_empty']` value * To avoid any backwards incompatibility, inventing `authors_with_posts_only` that defaults to false */ 'hide_empty' => (bool) $args['authors_with_posts_only'], ); $author_terms = get_terms( $coauthors_plus->coauthor_taxonomy, $term_args ); $authors = array(); foreach ( $author_terms as $author_term ) { // Something's wrong in the state of Denmark if ( false === ( $coauthor = $coauthors_plus->get_coauthor_by( 'user_login', $author_term->name ) ) ) { continue; } $authors[ $author_term->name ] = $coauthor; // only show guest authors if the $args is set to true if ( ! $args['guest_authors_only'] || $authors[ $author_term->name ]->type === 'guest-author' ) { $authors[ $author_term->name ]->post_count = $author_term->count; } else { unset( $authors[ $author_term->name ] ); } } $authors = apply_filters( 'coauthors_wp_list_authors_array', $authors ); // remove duplicates from linked accounts $linked_accounts = array_unique( array_column( $authors, 'linked_account' ) ); foreach ( $linked_accounts as $linked_account ) { unset( $authors[ $linked_account ] ); } return $authors; } /** * List all the *co-authors* of the blog, with several options available. * optioncount (boolean) (false): Show the count in parentheses next to the author's name. * show_fullname (boolean) (false): Show their full names. * hide_empty (boolean) (true): Don't show authors without any posts. * feed (string) (''): If isn't empty, show links to author's feeds. * feed_image (string) (''): If isn't empty, use this image to link to feeds. * echo (boolean) (true): False to return the output, true to echo. * authors_with_posts_only (boolean) (false): If true, don't query for authors with no posts. * * @param array $args The argument array. * @return null|string The output, if echo is set to false. */ function coauthors_wp_list_authors( $args = array() ) { $defaults = array( 'optioncount' => false, 'show_fullname' => false, 'hide_empty' => true, 'feed' => '', 'feed_image' => '', 'feed_type' => '', 'echo' => true, 'style' => 'list', 'html' => true, 'number' => 20, // A sane limit to start to avoid breaking all the things 'guest_authors_only' => false, 'authors_with_posts_only' => false, 'orderby' => 'name', ); $args = wp_parse_args( $args, $defaults ); $return = ''; $authors = coauthors_get_users( $args ); foreach ( $authors as $author ) { $link = ''; if ( $args['show_fullname'] && ( $author->first_name && $author->last_name ) ) { $name = "$author->first_name $author->last_name"; } else { $name = $author->display_name; } if ( ! $args['html'] ) { if ( 0 === $author->post_count ) { if ( ! $args['hide_empty'] ) { $return .= $name . ', '; } } else { $return .= $name . ', '; } // No need to go further to process HTML. continue; } if ( ! ( 0 === $author->post_count && $args['hide_empty'] ) && 'list' == $args['style'] ) { $return .= '
    • '; } if ( 0 === $author->post_count ) { if ( ! $args['hide_empty'] ) { $link = $name; } } else { /* translators: Author display name. */ $link = '' . esc_html( $name ) . ''; if ( ( ! empty( $args['feed_image'] ) ) || ( ! empty( $args['feed'] ) ) ) { $link .= ' '; if ( empty( $args['feed_image'] ) ) { $link .= '('; } $link .= ''; } else { $link .= $name; } $link .= ''; if ( empty( $args['feed_image'] ) ) { $link .= ')'; } } if ( $args['optioncount'] ) { $link .= ' (' . $author->post_count . ')'; } } if ( ! ( 0 === $author->post_count && $args['hide_empty'] ) && 'list' == $args['style'] ) { $return .= $link . '
    • '; } elseif ( ! $args['hide_empty'] ) { $return .= $link . ', '; } } $return = trim( $return, ', ' ); if ( ! $args['echo'] ) { return $return; } echo $return; // phpcs:ignore } /** * Retrieve a Co-Author's Avatar. * * Since Guest Authors doesn't enforce unique email addresses, simply loading the avatar by email won't work when * multiple Guest Authors share the same address. * * This is a replacement for using get_avatar(), which only operates on email addresses and cannot differentiate * between Guest Authors (who may share an email) and regular user accounts * * @param object $coauthor The Co Author or Guest Author object. * @param int $size The desired size. * @param string $default Optional. URL for the default image or a default type. Accepts '404' * (return a 404 instead of a default image), 'retro' (8bit), 'monsterid' * (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"), * 'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF), * or 'gravatar_default' (the Gravatar logo). Default is the value of the * 'avatar_default' option, with a fallback of 'mystery'. * @param string $alt Optional. Alternative text to use in <img> tag. Default false. * @param array|string $class Optional. Array or string of additional classes to add to the <img> element. Default null. * @return string The image tag for the avatar, or an empty string if none could be determined. */ function coauthors_get_avatar( $coauthor, $size = 32, $default = '', $alt = false, $class = null ) { global $coauthors_plus; if ( ! is_object( $coauthor ) ) { return ''; } if ( isset( $coauthor->type ) && 'guest-author' == $coauthor->type ) { $guest_author_thumbnail = $coauthors_plus->guest_authors->get_guest_author_thumbnail( $coauthor, $size, $class ); if ( $guest_author_thumbnail ) { return $guest_author_thumbnail; } } // Make sure we're dealing with an object for which we can retrieve an email if ( isset( $coauthor->user_email ) ) { return get_avatar( $coauthor->user_email, $size, $default, $alt, array( 'class' => $class ) ); } // Nothing matched, an invalid object was passed. return ''; } upgrade.php000060400000002424147177171730006721 0ustar00 '-1', 'meta_key' => '_coauthor', ) ); foreach ( $all_posts as $single_post ) { // reset execution time limit set_time_limit( 60 ); // create new array $coauthors = array(); // get author id -- try to use get_profile $coauthor = get_user_by( 'id', (int) $single_post->post_author ); if ( is_object( $coauthor ) ) { $coauthors[] = $coauthor->user_login; } // get coauthors id $legacy_coauthors = get_post_meta( $single_post->ID, '_coauthor' ); if ( is_array( $legacy_coauthors ) ) { foreach ( $legacy_coauthors as $legacy_coauthor ) { $legacy_coauthor_login = get_user_by( 'id', (int) $legacy_coauthor ); if ( is_object( $legacy_coauthor_login ) && ! in_array( $legacy_coauthor_login->user_login, $coauthors ) ) { $coauthors[] = $legacy_coauthor_login->user_login; } } } $coauthors_plus->add_coauthors( $single_post->ID, $coauthors ); } } webpack.config.js000060400000001204147177171730007772 0ustar00const defaultConfig = require( '@wordpress/scripts/config/webpack.config' ); module.exports = { ...defaultConfig, entry : { 'index': './src/index.js', 'blocks/block-coauthor-avatar/index': './src/blocks/block-coauthor-avatar/index.js', 'blocks/block-coauthor-description/index': './src/blocks/block-coauthor-description/index.js', 'blocks/block-coauthor-image/index': './src/blocks/block-coauthor-image/index.js', 'blocks/block-coauthor-name/index': './src/blocks/block-coauthor-name/index.js', 'blocks/block-coauthors/index': './src/blocks/block-coauthors/index.js', 'blocks-store/index': './src/blocks-store/index.js', } };